Redis大全這些你都會嗎

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


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(驅逐):禁止驅逐數據dom

爲何速度快

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

相關文章
相關標籤/搜索