Redis(REmote DIctionary Server,遠端資料字典伺服器)是開源的記憶體資料庫,常用作緩存或者消息隊列。
Redis存在于記憶體,使用硬碟作為持久化;每秒十萬讀寫。
具有豐富的資料結構,字元串、哈希表、清單、集合、有序集合;提供交集、并集、差集等操作。
設定TTL存活時間,到期自動删除。
Redis單線程、Memcached多線程;對于一般的應用場景,單線程也足夠使用,優勢還是在于多資料類型、持久化。
可以将資料複制到任意數量的從伺服器。
SET keyname value 設定鍵值keyname的值是value
KEYS * 擷取所有的鍵值
GET keyname 擷取keyname的值
EXISTS keyname 判斷是否存在鍵值keyname
DEL keyname 删除鍵值keyname
TYPE keyname 判斷keyname的類型(string字元串,hash哈希表,list清單,set集合,zset有序集合)
HSET keyname key value 添加一個哈希屬性和值
HGET keyname key 擷取值
HKEYS keyname 擷取全部的key值
HVALS keyname 擷取全部的value值
HGETALL keyname 擷取所有的值
通過雙向連結清單實作,頭尾操作均為O(1),擷取指定元素比較慢。
LPUSH keyname value1或者LPUSH keyname value1 value2 在左邊插入
RPUSH keyname value2 在右邊插入
LRANGE keyname 0 -1 查詢所有的元素
LPOP keyname
RPOP keyname
元素唯一,但是沒有順序。使用值為空的哈希表實作,操作都是O(1)。
SADD keyname value1 value2 添加值
SREM keyname value1 删除
SMEMBERS keyname查詢所有元素
使用哈希和跳躍表實作,中間速度也很快。
ZADD keyname key value 添加
ZRANGE keyname start end 擷取指定範圍的元素
與清單的比較:
相同:
都是有序的
都可以擷取某一範圍的元素
不同:
清單通過雙向連結清單實作,兩端資料存取極快,中間緩慢
有序集合通過哈希和跳躍表實作,中間速度也很快,為O(log(N))
清單不能簡單地調整某個元素的位置,有序集合可以
有序集合比清單更好費記憶體
Redis提供了兩種持久化方式:1 RDB快照方式 2 AOF方式
RDB方式:
滿足一定條件時,會建立一個子程序,複制目前的資料,把資料寫入到硬碟中某個檔案,寫入完成後替換原來的存儲檔案。資料一般存儲在dump.rdb中。UNIX系統中支援寫時複制,即剛開始會執行持久化寫入磁盤的操作,如果此時有其他的資料發生改變,就複制一份資料執行。
除了這種自動的快照方式,還支援指令方式持久化:
SAVE:通過阻塞的方式,用父程序來持久化,此時無法執行其他的請求。
BGSAVE:通過fork子程序的方式,持久化。
AOF方式:
每次操作都會記錄指令,這樣會造成某些指令的備援,比如添加了一個屬性,再删除,那麼這兩個操作都是備援的。redis提供了一些優化,是以可以避免這些備援資訊。指令記錄在appendonly.aof中
Redis用于消息隊列,通常有兩種種使用方式:
LIST:基于清單的方式,所有的消費者資料加起來是清單中的所有資料.

釋出/訂閱:每個消費者訂閱獨立的channel,每個資料都是獨立的。