https://github.com/redisson
Redis常用數(shù)據(jù)結(jié)構(gòu):
String、List猴贰、Hash对雪、set、sortedset
Redis數(shù)據(jù)持久化:
一米绕、RDB【對內(nèi)存中的數(shù)據(jù)庫狀態(tài)進(jìn)行快照】建議開啟:fork出一個(gè)子進(jìn)程( 一個(gè)進(jìn)程瑟捣,包括代碼、數(shù)據(jù)和分配給進(jìn)程的資源义郑。fork()函數(shù)通過系統(tǒng)調(diào)用創(chuàng)建一個(gè)與原來進(jìn)程幾乎完全相同的進(jìn)程)蝶柿,所有持久化工作都由子進(jìn)程完成,Redis會定期保存數(shù)據(jù)快照至一個(gè)rbd文件中非驮,并在啟動時(shí)自動加載rdb文件交汤,恢復(fù)之前保存的數(shù)成[通過save指令 默認(rèn)900秒1次,300秒10次劫笙,60秒10000次]
RDB的優(yōu)點(diǎn):
①對性能影響最小芙扎。如前文所述,Redis在保存RDB快照時(shí)會fork出子進(jìn)程進(jìn)行填大,幾乎不影響Redis處理客戶端請求的效率戒洼。
②每次快照會生成一個(gè)完整的數(shù)據(jù)快照文件,所以可以輔以其他手段保存多個(gè)時(shí)間點(diǎn)的快照(例如把每天0點(diǎn)的快照備份至其他存儲媒介中)允华,作為非橙剑可靠的災(zāi)難恢復(fù)手段。
③使用RDB文件進(jìn)行數(shù)據(jù)恢復(fù)比使用AOF要快很多靴寂。
RDB的缺點(diǎn):
①快照是定期生成的磷蜀,所以在Redis crash時(shí)或多或少會丟失一部分?jǐn)?shù)據(jù)。
②如果數(shù)據(jù)集非常大且CPU不夠強(qiáng)(比如單核CPU)百炬,Redis在fork子進(jìn)程時(shí)可能會消耗相對較長的時(shí)間(長至1秒)褐隆,影響這期間的客戶端請求。
二剖踊、 AOF redis將每個(gè)寫請求寫入到日志中庶弃,在redis重啟時(shí)衫贬,會把AOF寫操作的順序執(zhí)行一遍,確保數(shù)據(jù)恢復(fù)到最新
AOF的優(yōu)點(diǎn):
①最安全歇攻,在啟用appendfsync always時(shí)固惯,任何已寫入的數(shù)據(jù)都不會丟失,使用在啟用appendfsync everysec也至多只會丟失1秒的數(shù)據(jù)掉伏。
AOF文件在發(fā)生斷電等問題時(shí)也不會損壞缝呕,即使出現(xiàn)了某條日志只寫入了一半的情況,也可以使用redis-check-aof工具輕松修復(fù)斧散。
②AOF文件易讀供常,可修改,在進(jìn)行了某些錯(cuò)誤的數(shù)據(jù)清除操作后鸡捐,只要AOF文件沒有rewrite栈暇,就可以把③AOF文件備份出來,把錯(cuò)誤的命令刪除箍镜,然后恢復(fù)數(shù)據(jù)源祈。
AOF的缺點(diǎn):
①AOF文件通常比RDB文件更大
②性能消耗比RDB高
③數(shù)據(jù)恢復(fù)速度比RDB慢
三、Redis內(nèi)存設(shè)置
在內(nèi)存占用達(dá)到了maxmemory后色迂,再向Redis寫入數(shù)據(jù)時(shí)香缺,Redis會:
①根據(jù)配置的數(shù)據(jù)淘汰策略嘗試淘汰數(shù)據(jù),釋放空間
②如果沒有數(shù)據(jù)可以淘汰歇僧,或者沒有配置數(shù)據(jù)淘汰策略图张,那么Redis會對所有寫請求返回錯(cuò)誤,但讀請求仍然可以正常執(zhí)行
【注意在為Redis設(shè)置maxmemory時(shí)诈悍,如果采用了Redis的主從同步祸轮,主節(jié)點(diǎn)向從節(jié)點(diǎn)同步數(shù)據(jù)時(shí),會占用掉一部分內(nèi)存空間侥钳,如果maxmemory過于接近主機(jī)的可用內(nèi)存适袜,導(dǎo)致數(shù)據(jù)同步時(shí)內(nèi)存不足。所以設(shè)置的maxmemory不要過于接近主機(jī)可用的內(nèi)存舷夺,留出一部分預(yù)留用作主從同步苦酱。
四、緩存淘汰策略
數(shù)據(jù)淘汰機(jī)制
Redis提供了5種數(shù)據(jù)淘汰策略:
volatile-lru:使用LRU算法進(jìn)行數(shù)據(jù)淘汰(淘汰上次使用時(shí)間最早的给猾,且使用次數(shù)最少的key)躏啰,只淘汰設(shè)定了有效期的key
allkeys-lru:使用LRU算法進(jìn)行數(shù)據(jù)淘汰,所有的key都可以被淘汰
volatile-random:隨機(jī)淘汰數(shù)據(jù)耙册,只淘汰設(shè)定了有效期的key
allkeys-random:隨機(jī)淘汰數(shù)據(jù),所有的key都可以被淘汰
volatile-ttl:淘汰剩余有效期最短的key