原文地址 :http://www.cnblogs.com/xing901022/p/4863929.html
Redis初級介紹
1 什麼是Redis
Redis(REmote DIctionary Server,遠程數據字典服務器)是開源的內存數據庫,常用作緩存或者消息隊列。
Redis的特點:
- Redis存在於內存,使用硬盤作爲持久化;每秒十萬讀寫。
- 具有豐富的數據結構,字符串、哈希表、列表、集合、有序集合;提供交集、並集、差集等操作。
- 設置TTL存活時間,到期自動刪除。
- Redis單線程、Memcached多線程;對於一般的應用場景,單線程也足夠使用,優勢還是在於多數據類型、持久化。
- 可以將數據複製到任意數量的從服務器。
2 Redis中的數據結構
字符串
- 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))
- 列表不能簡單地調整某個元素的位置,有序集合可以
- 有序集合比列表更好費內存
3 Redis持久化
Redis提供了兩種持久化方式:1 RDB快照方式 2 AOF方式
RDB方式:
滿足一定條件時,會創建一個子進程,複製當前的數據,把數據寫入到硬盤中某個文件,寫入完成後替換原來的存儲文件。數據一般存儲在dump.rdb中。UNIX系統中支持寫時複製,即剛開始會執行持久化寫入磁盤的操作,如果此時有其他的數據發生改變,就複製一份數據執行。
除了這種自動的快照方式,還支持命令方式持久化:
- SAVE:通過阻塞的方式,用父進程來持久化,此時無法執行其他的請求。
- BGSAVE:通過fork子進程的方式,持久化。
AOF方式:
每次操作都會記錄命令,這樣會造成某些命令的冗餘,比如添加了一個屬性,再刪除,那麼這兩個操作都是冗餘的。redis提供了一些優化,所以可以避免這些冗餘信息。命令記錄在appendonly.aof中
4 Redis的消息隊列
Redis用於消息隊列,通常有兩種種使用方式:
LIST:基於列表的方式,所有的消費者數據加起來是列表中的所有數據.
發佈/訂閱:每個消費者訂閱獨立的channel,每個數據都是獨立的。