Redis學習2

redis管道(pipeline)

redis的pipeline(管道)功能在命令行中沒有,但是redis是支持管道的,在java的客戶端(jedis)中是可以使用的。

測試發現:

1:使用管道方式,插入1000條數據耗時37毫秒

Pipeline pipelined = jedis.pipelined();

long start = System.currentTimeMillis();

for (int i = 0; i < 1000; i++) {

pipelined.set("test"+i, "test"+i);

}

pipelined.sync();

System.out.println(System.currentTimeMillis() - start );


2:不使用管道方式,插入1000條數據耗時328毫秒

long start = System.currentTimeMillis();

for (int i = 0; i < 1000; i++) {

jedis.set("test"+i, "test"+i);

}

System.out.println(System.currentTimeMillis() -start);


redis任務隊列

可以使用list的lpush和rpop實現,左進右出。brpop命令也可以彈出最後一個元素,如果集合爲空,會等待有新元素,

並彈出

brpop 有兩個參數,一個是監聽的list 一個是超時時間,如果集合中沒有元素會等待,但超過超時時間停止等待

brpop list 0 代表永不超時

任務優先級隊列

同時監聽三個list

例 brpoplist1 list2 list3 0 優先級是遞減的


redis持久化(persistence)

redis支持兩種方式的持久化,可以單獨使用或者結合起來使用。

第一種:RDB方式 (默認)

第二種:AOF方式


redis持久化之RDB

rdb方式的持久化是通過快照完成的,當符合一定條件時redsi會自動將內存中的所有數據進行快照並存儲到硬盤上。

默認存儲在redis根目錄的dump.rdb文件中。

rdb是redis默認採用的持久化方式,配置信息在配置文件redis.conf中

save 900 1:表示900秒內至少一個鍵被更改則進行快照。

save 300 10

save 60 10000

手動執行save或者bgsave命令讓redis執行快照。

兩個命令的區別在於,save是由主進程進行快照操作,會阻塞其它請求。bgsave會通過fork子進程進行快照操作。


redis實現快照的過程:

1.redis使用fork函數複製一份當前進程的副本(子進程)

2.父進程繼續接收並處理客戶端發來的命令,而子進程開始將內存中的數據寫入硬盤中的臨時文件

3.當子進程寫入完所有數據後會用該臨時文件替換舊的RDB文件,至此,一次快照操作完成


文件修復命令:redis-check-dump

rdb的優缺點

優點:由於存儲的有數據快照文件,恢復數據很方便。

缺點:會丟失最後一次快照以後更改的所有數據。


redis持久化之AOF

aof方式的持久化是通過日誌文件的方式。默認情況下redis沒有開啓aof,可以通過參數appendonly參數開啓。

appendonly yes

aof文件的保存位置和rdb文件的位置相同,都是dir參數設置的,默認的文件名是appendonly.aof,可以通過

appendfilename參數修改

appendfilename appendonly.aof

aof日誌文件重寫

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

手動執行bgrewriteaof進行重寫

redis寫命令同步的時機

appendfsync always 每次都會執行

appendfsync everysec 默認 每秒執行一次同步操作(推薦)

appendfsync no不主動進行同步,由操作系統來做,30秒一次

文件修復:redis-check-aof

動態切換redis持久方式,從 RDB 切換到 AOF(支持Redis 2.2及以上)

CONFIG SET appendonly yes

CONFIG SET save ""(該命令可選,將save參數置空了,代表不進行RDB方式持久化)


redis優化

精簡鍵名和鍵值

鍵名:儘量精簡,但是也不能單純爲了節約空間而使用不易理解的鍵名。

鍵值:對於鍵值的數量固定的話可以使用0和1這樣的數字來表示,(例如:male/female、right/wrong)

當業務場景不需要數據持久化時,關閉所有的持久化方式可以獲得最佳的性能

內部編碼優化(瞭解)

redis爲每種數據類型都提供了兩種內部編碼方式,在不同的情況下redis會自動調整合適的編碼方式。

SLOWLOG

slowlog-log-slower-than 它決定要對執行時間大於多少微秒(microsecond,1秒 = 1,000,000 微秒)的命令進行記錄

slowlog-max-len 它決定 slowlog 最多能保存多少條日誌


RedisClient -- redis可視化客戶端工具


未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章