Redis學習


原文地址 :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,每個數據都是獨立的。






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