一.Redis
Redis 是一個開源(BSD許可)的,記憶體中的資料結構存盤系統,它可以用作資料庫、快取和訊息中間件,
中文官方地址:http://www.redis.cn/
Redis支持五種資料型別:string(字串),hash(哈希),list(串列),set(集合)及zset(sorted set:有序集合)
String(字串)
string 是 redis 最基本的型別,你可以理解成與 Memcached 一模一樣的型別,一個 key 對應一個 value,
string 型別是二進制安全的,意思是 redis 的 string 可以包含任何資料,比如jpg圖片或者序列化的物件,
string 型別是 Redis 最基本的資料型別,string 型別的值最大能存盤 512MB,
Hash(哈希)
Redis hash 是一個鍵值(key=>value)對集合,
Redis hash 是一個 string 型別的 field 和 value 的映射表,hash 特別適合用于存盤物件,
List(串列)
Redis 串列是簡單的字串串列,按照插入順序排序,你可以添加一個元素到串列的頭部(左邊)或者尾部(右邊)
Set(集合)
Redis 的 Set 是 string 型別的無序集合,
集合是通過哈希表實作的,所以添加,洗掉,查找的復雜度都是 O(1),
sadd 命令
添加一個 string 元素到 key 對應的 set 集合中,成功回傳 1,如果元素已經在集合中回傳 0
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string型別元素的集合,且不允許重復的成員,
不同的是每個元素都會關聯一個double型別的分數,redis正是通過分數來為集合中的成員進行從小到大的排序,
zset的成員是唯一的,但分數(score)卻可以重復
二.Redis存盤方式
Redis提供了兩種存盤方式:RDB 和 AOF
RDB是將資料寫入一個臨時檔案,持久化結束后,用這個臨時檔案替換上次的檔案,達到資料恢復
AOF是將執行過的指令記錄下來,資料恢復時按照從前到后的順序再將指令執行一遍實作資料恢復,
RDB存盤是默認的存盤方式,小數量,不在乎是否有并發,資料是不會丟失,安全性最好,占用的空間也最小,AOF方式在分布式下,可應對大量資料處理問題,但也會存在資料丟失
三.Redis快取淘汰策略
(1)volatile-lru:從已設定過期時間的資料集中挑選最近最少使用的資料淘汰,
(2)volatile-ttl:從已設定過期時間的資料集中挑選將要過期的資料淘汰,
(3)volatile-random:從已設定過期時間的資料集中任意選擇資料淘汰,
(4)volatile-lfu:從已設定過期時間的資料集挑選使用頻率最低的資料淘汰,
(5)allkeys-lru:從資料集中挑選最近最少使用的資料淘汰
(6)allkeys-lfu:從資料集中挑選使用頻率最低的資料淘汰,
(7)allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰
(8) no-enviction(驅逐):禁止驅逐資料,這也是默認策略,意思是當記憶體不足以容納新入資料時,新寫入操作就會報錯,請求可以繼續進行,線上任務也不能持續進行,采用no-enviction策略可以保證資料不被丟失,
這八種大體上可以分為4中,lru、lfu、random、ttl
淘汰機制的實作
(1)消極方法(passive way),在主鍵被訪問時如果發現它已經失效,那么就洗掉它,redis在實作GET、MGET、HGET、LRANGE等所有涉及到讀取資料的命令時都會呼叫 expireIfNeeded,它存在的意義就是在讀取資料之前先檢查一下它有沒有失效,如果失效了就洗掉它,
expireIfNeeded函式中呼叫的另外一個函式propagateExpire,這個函式用來在正式洗掉失效主鍵,并且廣播告訴其他地方,目的地有倆:AOF檔案,將洗掉失效主鍵的這一操作以DEL Key的標準命令格式記錄下來;另一個就是發送到當前Redis服務器的所有Slave,同樣將洗掉失效主鍵的這一操作以DEL Key的標準命令格式告知這些Slave洗掉各自的失效主鍵,
(2)積極方法(active way),周期性地探測,發現失效就洗掉,消極方法的缺點是,如果key 遲遲不被訪問,就會占用很多記憶體空間,所以才有積極方式,
(3)主動洗掉:當記憶體超過maxmemory限定時,觸發主動清理策略,該策略由啟動引數的配置決定
淘汰資料的量
既然是淘汰資料,那么淘汰多少合適呢?
為了避免頻繁的觸發淘汰策略,每次會淘汰掉一批資料,淘汰的資料的大小其實是和置換的大小來確定的,如果置換的資料量大,淘汰的肯定也多
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/119063.html
標籤:Linux
