1. 程式人生 > 資料庫 >SQL Developer報錯:Unable to find a Java Virtual Machine解決辦法

SQL Developer報錯:Unable to find a Java Virtual Machine解決辦法

redis官網:https://redis.io/
中文網:http://www.redis.cn/
本次環境:CentOS 7.0+redis 3.0.4
1.安裝(3.0.4)
前提:需要gcc環境
1)解壓壓縮包
tar -zxvf redis-3.0.4.tar.gz
2)進入redis目錄中,編譯
cd redis-3.0.4/
make
3)啟動服務(在src目錄下)
./redis-server
啟動服務端和客戶端命令補充
服務端啟動redis並指定參考的配置檔案.
./redis-server redis.conf的檔案路徑
2. 客戶端啟動命令
./redis-cli -h redis所在機器的ip地址 -p 埠

看到如下圖所示,則說明安裝成功

4)複製連線,用客戶端訪問測試

2.命令
1)進入指定的資料庫
select 資料庫索引
2)檢視當前資料庫key的數量
DBSIZE
3)當前所在資料庫所有的鍵
keys *
4)刪除資料
FLUSHDB 刪除當前庫
FLUSHALL 刪除所有庫
5)鍵(key)想關的命令
keys * 檢視當前庫所有的鍵
exists key 判斷該鍵對應的值,是否存在
move key 指定的資料庫索引 將該鍵對應的值移到指定的庫中
expire key 給指定的鍵設定有效時間 時間單位是秒
ttl key 檢視指定的key還有多長時間過期 -1表示永不過期 -2表示已經過期

type key 檢視鍵是什麼型別
6)值為String部分命令
del key 刪除鍵對應的值
append key 在該鍵對應的值後面追加
strlen key 返回該鍵對應的值的長度
incr key 對該鍵對應的值加一操作
decr key 對該鍵對應的值減一操作
incrby key 數值 對該鍵對應的值,進行指定數值的加操作
decrby key 數值 對該鍵對應的值,進行指定數值的減操作
getrange key 索引值1 索引值2 獲取兩個索引值之間的 值 若兩個索引值是 0 -1則是全部值
setrange key 索引值 資料 從索引值開始將資料對值進行覆蓋
setex key 存活時間(單位是毫秒)值 設定該key對應的值的存活時間
SETNX key v 如果值不存在就設定值為v,存在則設定失敗
mset key1 value1 key2 value2 設定多個鍵值對
mget key1 key2 key3 取key1 key2 key3的值
7)值為list相關命令(資料結構是先進先出,跟訊息佇列很類似)
rpush key value 向右側新增一個值
lindex key 索引 獲取改索引對應的值
8)值為set相關的命令
sadd key 值1 值2 向set中新增值1 值2
SMEMBERS key 獲取改key對應的set集合中所有元素
scard key 獲取集合元素的個數
SPOP key 刪除任意一個值
SRem key 值1 刪除值1
SDIFF key1 key2 返回,在key1集合中除去重複的部分
SINTER key1 key2 返回交集
SUNION key1 key2 返回並集
9)hash相關的命令
hash的資料結構:整體結構依然是key–value,但value又是一個key–value,如下圖:用於自定義實現mybatis的二級快取

hset user username zhangsan 給user這個鍵設定單個值
hget user username 獲取user這個鍵對應的username的值
hmset user username lisi age 20 address henan 給user這個鍵設定多個值
hmget user username age address 獲取多個
hgetall user 獲取user這個鍵的所有值
hkeys user 或取user這個鍵的所有鍵
hvals user 或取user這個鍵的所有值
HEXISTS user email 判斷user這個鍵,是不是存在email這個鍵
10)zset相關的命令
zadd user001 80 age003 新增一個元素
3.redis配置檔案詳解
引數說明
redis.conf 配置項說明如下:

  1. Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序
      daemonize no
  2. 當Redis以守護程序方式執行時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定
      pidfile /var/run/redis.pid
  3. 指定Redis監聽埠,預設埠為6379,作者在自己的一篇博文中解釋了為什麼選用6379作為預設埠,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自義大利歌女Alessia Merz的名字
      port 6379
  4. 繫結的主機地址
      bind 127.0.0.1
    5.當 客戶端閒置多長時間後關閉連線,如果指定為0,表示關閉該功能
      timeout 300
  5. 指定日誌記錄級別,Redis總共支援四個級別:debug、verbose、notice、warning,預設為verbose
      loglevel verbose
  6. 日誌記錄方式,預設為標準輸出,如果配置Redis為守護程序方式執行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null
      logfile stdout
  7. 設定資料庫的數量,預設資料庫為0,可以使用SELECT 命令在連線上指定資料庫id
      databases 16
  8. 指定在多長時間內,有多少次更新操作,就將資料同步到資料檔案,可以多個條件配合
      save
      Redis預設配置檔案中提供了三個條件:
      save 900 1
      save 300 10
      save 60 10000
      分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。
  9. 指定儲存至本地資料庫時是否壓縮資料,預設為yes,Redis採用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致資料庫檔案變的巨大
      rdbcompression yes
  10. 指定本地資料庫檔名,預設值為dump.rdb
      dbfilename dump.rdb
  11. 指定本地資料庫存放目錄
      dir ./
  12. 設定當本機為slav服務時,設定master服務的IP地址及埠,在Redis啟動時,它會自動從master進行資料同步
      slaveof
  13. 當master服務設定了密碼保護時,slav服務連線master的密碼
      masterauth
  14. 設定Redis連線密碼,如果配置了連線密碼,客戶端在連線Redis時需要通過AUTH 命令提供密碼,預設關閉
      requirepass foobared
  15. 設定同一時間最大客戶端連線數,預設無限制,Redis可以同時開啟的客戶端連線數為Redis程序可以開啟的最大檔案描述符數,如果設定 maxclients 0,表示不作限制。當客戶端連線數到達限制時,Redis會關閉新的連線並向客戶端返回max number of clients reached錯誤資訊
      maxclients 128
  16. 指定Redis最大記憶體限制,Redis在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
      maxmemory
  17. 指定是否在每次更新操作後進行日誌記錄,Redis在預設情況下是非同步的把資料寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為 redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設為no
      appendonly no
  18. 指定更新日誌檔名,預設為appendonly.aof
       appendfilename appendonly.aof
  19. 指定更新日誌條件,共有3個可選值: 
      no:表示等作業系統進行資料快取同步到磁碟(快) 
      always:表示每次更新操作後手動呼叫fsync()將資料寫到磁碟(慢,安全) 
      everysec:表示每秒同步一次(折衷,預設值)
      appendfsync everysec
  20. 指定是否啟用虛擬記憶體機制,預設值為no,簡單的介紹一下,VM機制將資料分頁存放,由Redis將訪問量較少的頁即冷資料swap到磁碟上,訪問多的頁面由磁碟自動換出到記憶體中(在後面的文章我會仔細分析Redis的VM機制)
       vm-enabled no
  21. 虛擬記憶體檔案路徑,預設值為/tmp/redis.swap,不可多個Redis例項共享
       vm-swap-file /tmp/redis.swap
  22. 將所有大於vm-max-memory的資料存入虛擬記憶體,無論vm-max-memory設定多小,所有索引資料都是記憶體儲存的(Redis的索引資料 就是keys),也就是說,當vm-max-memory設定為0的時候,其實是所有value都存在於磁碟。預設值為0
       vm-max-memory 0
  23. Redis swap檔案分成了很多的page,一個物件可以儲存在多個page上面,但一個page上不能被多個物件共享,vm-page-size是要根據儲存的 資料大小來設定的,作者建議如果儲存很多小物件,page大小最好設定為32或者64bytes;如果儲存很大大物件,則可以使用更大的page,如果不 確定,就使用預設值
       vm-page-size 32
  24. 設定swap檔案中的page數量,由於頁表(一種表示頁面空閒或使用的bitmap)是在放在記憶體中的,,在磁碟上每8個pages將消耗1byte的記憶體。
       vm-pages 134217728
  25. 設定訪問swap檔案的執行緒數,最好不要超過機器的核數,如果設定為0,那麼所有對swap檔案的操作都是序列的,可能會造成比較長時間的延遲。預設值為4
       vm-max-threads 4
  26. 設定在向客戶端應答時,是否把較小的包合併為一個包傳送,預設為開啟
      glueoutputbuf yes
  27. 指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的雜湊演算法
      hash-max-zipmap-entries 64
      hash-max-zipmap-value 512
  28. 指定是否啟用重置雜湊,預設為開啟(後面在介紹Redis的雜湊演算法時具體介紹)
      activerehashing yes
  29. 指定包含其它的配置檔案,可以在同一主機上多個Redis例項之間使用同一份配置檔案,而同時各個例項又擁有自己的特定配置檔案
      include /path/to/local.conf
    解決redis遠端連線不上問題
    修改redis.conf檔案以下幾個地方。
    #固定這個ip可以連線的上
    1.bind 127.0.0.1改為 #bind 127.0.0.1 (註釋掉)
    #設定外部網路連線redis服務
    2.protected-mode yes 改為 protected-mode no
    4.redis的事務(中文網關於事務的介紹http://www.redis.cn/topics/transactions.html)
    官網定義:事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。
    事務的命令:

5.redis叢集的搭建(本次採用偽分散式)
1)拷貝多個redis.conf檔案(啟動服務的時候,以指定檔案的形式啟動)
2)修改redis的配置
1)值修改為yes
  daemonize yes
2)檔名修改為redis埠.pid
  pidfile /var/run/redis埠.pid
3)修改埠唯一
  port 6379
4)修改log檔案的名字
logfile “檔名字”
5)修改dump.rdb檔案的名字
dbfilename dump埠.rdb
3)以配置檔案的形式啟動三個服務
服務端啟動redis並指定參考的配置檔案.
./redis-server redis.conf的檔案路徑
客戶端啟動命令
./redis-cli -h redis所在機器的ip地址 -p 埠
4)在作為從機的終端執行一下命令
slaveof 主機ip 主機埠
現在的情形是:從機只讀不能寫
主機掛了,從機是待命的狀態
從機掛了,需要重新與主機建立連線
注意:如果從機執行寫操作,那麼主機和從機之間連線就會段
主從複製,讀寫分離的其他命令
1)檢視機器狀態,是從機?還是主機
INFO replication
2)反客為主,就是在即將成為主機的從機上執行
SLAVEOF no one
6.哨兵模式
模式圖:

1)是什麼樣?
當主伺服器宕機後,需要自動選舉一臺從伺服器切換為主伺服器
2)配置:
#在redis的根目錄下有sentinel.conf的配置檔案
sentinel monitor 監控主機的名字(自定義) 主機ip 主機埠 1代表只有一個或一個以上的哨兵認為主伺服器不可用的時候,才會進行failover操作。
sentinel monitor mymaster 127.0.0.1 6379 1

sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis伺服器密碼

sentinel auth-pass

sentinel auth-pass mymaster 123456
3)啟動哨兵服務
./redis-sentinel /root/redis-5.0.5/sentinel.conf
4)sentinel.conf檔案詳解

哨兵sentinel例項執行的埠,預設26379

port 26379

哨兵sentinel的工作目錄

dir ./

哨兵sentinel監控的redis主節點的

ip:主機ip地址

port:哨兵埠號

master-name:可以自己命名的主節點名字(只能由字母A-z、數字0-9 、這三個字元".-_"組成。)

quorum:當這些quorum個數sentinel哨兵認為master主節點失聯 那麼這時 客觀上認為主節點失聯了

sentinel monitor

sentinel monitor mymaster 127.0.0.1 6379 2

當在Redis例項中開啟了requirepass ,所有連線Redis例項的客戶端都要提供密碼。

sentinel auth-pass

sentinel auth-pass mymaster 123456

指定主節點應答哨兵sentinel的最大時間間隔,超過這個時間,哨兵主觀上認為主節點下線,預設30秒

sentinel down-after-milliseconds

sentinel down-after-milliseconds mymaster 30000

指定了在發生failover主備切換時,最多可以有多少個slave同時對新的master進行同步。這個數字越小,完成failover所需的時間就越長;反之,但是如果這個數字越大,就意味著越多的slave因為replication而不可用。可以通過將這個值設為1,來保證每次只有一個slave,處於不能處理命令請求的狀態。

sentinel parallel-syncs

sentinel parallel-syncs mymaster 1

故障轉移的超時時間failover-timeout,預設三分鐘,可以用在以下這些方面:

1. 同一個sentinel對同一個master兩次failover之間的間隔時間。

2. 當一個slave從一個錯誤的master那裡同步資料時開始,直到slave被糾正為從正確的master那裡同步資料時結束。

3. 當想要取消一個正在進行的failover時所需要的時間。

4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置為指向master,但是就不按parallel-syncs所配置的規則來同步資料了

sentinel failover-timeout

sentinel failover-timeout mymaster 180000

當sentinel有任何警告級別的事件發生時(比如說redis例項的主觀失效和客觀失效等等),將會去呼叫這個指令碼。一個指令碼的最大執行時間為60s,如果超過這個時間,指令碼將會被一個SIGKILL訊號終止,之後重新執行。

對於指令碼的執行結果有以下規則:

1. 若指令碼執行後返回1,那麼該指令碼稍後將會被再次執行,重複次數目前預設為10。

2. 若指令碼執行後返回2,或者比2更高的一個返回值,指令碼將不會重複執行。

3. 如果指令碼在執行過程中由於收到系統中斷訊號被終止了,則同返回值為1時的行為相同。

sentinel notification-script

sentinel notification-script mymaster /var/redis/notify.sh

這個指令碼應該是通用的,能被多次呼叫,不是針對性的。

sentinel client-reconfig-script

sentinel client-reconfig-script mymaster /var/redis/reconfig.sh