Redis大全這些你都會嗎

原創 java金融 java金融 3月7日


Redis總結

簡介

Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。

支持數據格式

key-value類型的數據,同時還提供list,set,zset,hash、sorted set等數據結構的存儲

分佈式鎖實現

setnx 命令來實現,通過lua腳本來保證加鎖是原子性的。

持久化方式

Redis 有兩種持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)
1.RDB
RDB 是 Redis 默認的持久化方案。在指定的時間間隔內,執行指定次數的寫操作,則會將內存中的數據寫入到磁盤中。即在指定目錄下生成一個dump.rdb文件。Redis 重啓會通過加載dump.rdb文件恢復數據。
優點
適合大規模的數據恢復。
如果業務對數據完整性和一致性要求不高,RDB是很好的選擇。
缺點
數據的完整性和一致性不高,因爲RDB可能在最後一次備份時宕機了。
備份時佔用內存,因爲Redis 在備份時會獨立創建一個子進程,將數據寫入到一個臨時文件(此時內存中的數據是原來的兩倍哦),最後再將臨時文件替換之前的備份文件。所以Redis 的持久化和數據的恢復要選擇在夜深人靜的時候執行是比較合理的。
2.AOF
Redis 默認不開啓。它的出現是爲了彌補RDB的不足(數據的不一致性),所以它採用日誌的形式來記錄每個寫操作,並追加到文件中。Redis 重啓的會根據日誌文件的內容將寫指令從前到後執行一次以完成數據的恢復工作。
優點:數據的完整性和一致性更高
缺點:因爲AOF記錄的內容多,文件會越來越大,數據恢復也會越來越慢。
總結
Redis 默認開啓RDB持久化方式,在指定的時間間隔內,執行指定次數的寫操作,則將內存中的數據寫入到磁盤中。
RDB 持久化適合大規模的數據恢復但它的數據一致性和完整性較差。
Redis 需要手動開啓AOF持久化方式,默認是每秒將寫操作日誌追加到AOF文件中。
AOF 的數據完整性比RDB高,但記錄內容多了,會影響數據恢復的效率。
Redis 針對 AOF文件大的問題,提供重寫的瘦身機制。
若只打算用Redis 做緩存,可以關閉持久化。
若打算使用Redis 的持久化。建議RDB和AOF都開啓。其實RDB更適合做數據的備份,留後手。AOF出問題了,還有RDB。



















Redis的回收策略

volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據




爲什麼速度快

1、完全基於內存,絕大部分請求是純粹的內存操作,非常快速。數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1);
2、數據結構簡單,對數據操作也簡單,Redis中的數據結構是專門進行設計的;
3、採用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因爲可能出現死鎖而導致的性能消耗;
4、使用多路I/O複用模型,非阻塞IO;
5、使用底層模型不同,它們之間底層實現方式以及與客戶端之間通信的應用協議不一樣,Redis直接自己構建了VM 機制 ,因爲一般的系統調用系統函數的話,會浪費一定的時間去移動和請求;



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