redis持久化策略
1碌秸、數(shù)據(jù)文件.rdb
2、更新日志.aof
RDB 詳解
redis.conf 文件哮肚,找到 SNAPSHOTTING 對(duì)應(yīng)內(nèi)容
1 RDB核心規(guī)則配置(重點(diǎn))
save <seconds> <changes># save ""save 900 1
save 300 10
save 60 10000
默認(rèn)開啟數(shù)據(jù)壓縮
rdbcompression yes
解說:配置存儲(chǔ)至本地?cái)?shù)據(jù)庫時(shí)是否壓縮數(shù)據(jù)允趟,默認(rèn)為yes。Redis采用LZF壓縮方式涣楷,但占用了一點(diǎn)CPU的時(shí)間抗碰。若關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫文件變的巨大弧蝇。建議開啟折砸。
觸發(fā)RDB快照
1 在指定的時(shí)間間隔內(nèi)睦授,執(zhí)行指定次數(shù)的寫操作
2 執(zhí)行save(阻塞摔寨, 只管保存快照,其他的等待) 或者是bgsave (異步)命令
3 執(zhí)行flushall 命令删顶,清空數(shù)據(jù)庫所有數(shù)據(jù)淑廊,意義不大。
4 執(zhí)行shutdown 命令季惩,保證服務(wù)器正常關(guān)閉且不丟失任何數(shù)據(jù)蜀备,意義...也不大荒叶。
通過RDB文件恢復(fù)數(shù)據(jù)
將dump.rdb 文件拷貝到redis的安裝目錄的bin目錄下,重啟redis服務(wù)即可些楣。在實(shí)際開發(fā)中愁茁,一般會(huì)考慮到物理機(jī)硬盤損壞情況,選擇備份dump.rdb 鹅很。可以從下面的操作演示中可以體會(huì)到邮屁。
RDB 的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1 適合大規(guī)模的數(shù)據(jù)恢復(fù)菠齿。
2 如果業(yè)務(wù)對(duì)數(shù)據(jù)完整性和一致性要求不高
缺點(diǎn):
1 數(shù)據(jù)的完整性和一致性不高绳匀,因?yàn)镽DB可能在最后一次備份時(shí)宕機(jī)了炸客。
2 備份時(shí)占用內(nèi)存戈钢,因?yàn)镽edis 在備份時(shí)會(huì)獨(dú)立創(chuàng)建一個(gè)子進(jìn)程,將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件(此時(shí)內(nèi)存中的數(shù)據(jù)是原來的兩倍哦)蝶溶,最后再將臨時(shí)文件替換之前的備份文件宣渗。
所以Redis 的持久化和數(shù)據(jù)的恢復(fù)要選擇在夜深人靜的時(shí)候執(zhí)行是比較合理的。
AOF 詳解
AOF :Redis 默認(rèn)不開啟田轧。它的出現(xiàn)是為了彌補(bǔ)RDB的不足(數(shù)據(jù)的不一致性)鞍恢,所以它采用日志的形式來記錄每個(gè)寫操作,并追加到文件中弦悉。Redis 重啟的會(huì)根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作蟆炊。
1 redis 默認(rèn)關(guān)閉,開啟需要手動(dòng)把no改為yes
appendonly yes
指定更新日志條件
# appendfsync always
appendfsync everysec# appendfsync no
解說:
always:同步持久化污秆,每次發(fā)生數(shù)據(jù)變化會(huì)立刻寫入到磁盤中昧甘。性能較差當(dāng)數(shù)據(jù)完整性比較好(慢,安全)
everysec:出廠默認(rèn)推薦庸推,每秒異步記錄一次(默認(rèn)值)
no:不同步
配置重寫觸發(fā)機(jī)制
auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb
解說:當(dāng)AOF文件大小是上次rewrite后大小的一倍且文件大于64M時(shí)觸發(fā)痛黎。一般都設(shè)置為3G,64M太小了掖蛤。
根據(jù)AOF文件恢復(fù)數(shù)據(jù)
正常情況下井厌,將appendonly.aof 文件拷貝到redis的安裝目錄的bin目錄下致讥,重啟redis服務(wù)即可器赞。但在實(shí)際開發(fā)中,可能因?yàn)槟承┰驅(qū)е耡ppendonly.aof 文件格式異常请契,從而導(dǎo)致數(shù)據(jù)還原失敗夏醉,可以通過命令redis-check-aof --fix appendonly.aof 進(jìn)行修復(fù) 畔柔。從下面的操作演示中體會(huì)。
AOF的重寫機(jī)制
BgRewriteAof異步執(zhí)行aof文件重寫操作靶擦,會(huì)創(chuàng)建一個(gè)當(dāng)前aof文件的體積優(yōu)化版本
若打算使用Redis 的持久化。建議RDB和AOF都開啟踩蔚。其實(shí)RDB更適合做數(shù)據(jù)的備份枚粘,留一后手赌结。AOF出問題了孝冒,還有RDB。
緩存滲透
單節(jié)點(diǎn)使用雙重檢測(cè)鎖
如果你的服務(wù)器是一個(gè)集群量承,那么仍然存在不同的服務(wù)器同時(shí)加載的問題
解決辦法是基于遠(yuǎn)端緩存做個(gè)分布式鎖穴店,實(shí)施起來稍微繁瑣一點(diǎn)
如果讀數(shù)據(jù)庫時(shí)間較長(zhǎng),并且并發(fā)進(jìn)入的請(qǐng)求又比較多忧风,可能會(huì)出現(xiàn)線程池滿的情況球凰。
另外一個(gè)辦法就是腿宰,有一個(gè)異步的任務(wù)缘厢,在后臺(tái)自動(dòng)刷,相當(dāng)于預(yù)熱椿每,這樣性能肯定是最好的英遭,就是開發(fā)上麻煩點(diǎn)。
緩存穿透
是指在緩存里查不到數(shù)據(jù)兑牡,直接查數(shù)據(jù)庫了税灌,如果大并發(fā)就會(huì)造成緩存雪崩(請(qǐng)求直接到庫,可能造成宕機(jī))苞也,給兩種解決方案:
1粘秆、加鎖計(jì)數(shù),首次查庫后存緩存殷勘。
2、由于是基于servlet昔搂,可以用布隆過濾器玲销。
4.redis中的sorted set
zset由一個(gè)dict和skiplist組成,數(shù)據(jù)結(jié)構(gòu)如下
字典的作用:可以在O(1)時(shí)間復(fù)雜度內(nèi)通過對(duì)象查找到分值摘符,如zscore命令
跳表的作用:避免每次按分值區(qū)間查找(zrange)或者rank(zrank)的時(shí)候都要進(jìn)行排序
值得一提的是贤斜,雖然zset使用了dict和skiplist來保存有序集合元素,但這兩種數(shù)據(jù)結(jié)構(gòu)都會(huì)通過指針來指向共享的相同元素的成員和分值逛裤。
寫的比較好
http://www.reibang.com/p/b8dbd020b43a
resdis跳躍表