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,每個數據都是獨立的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM