神奇的Redis

Redis按照官方的定義是一個開源的,高級的鍵值存儲。本文就想擴展開介紹,高級和存儲兩點。html

爲何高級,我們列一下它的基本特性:git

  1. 每秒10萬+的讀,8萬+的寫(是否是有點吹?)github

  2. 操做原子性(還支持把一組命令合併爲一個原子操做)redis

  3. 多種基元數據類型的支持(hash/list/(sorted)set/string)mongodb

  4. 支持過時(能夠用做緩存)數據庫

  5. 支持主從架構(多級層次)緩存

  6. 支持管道(一次性發送多個命令執行)安全

以及豐富的API:架構

  1. 提供豐富有關key的操做命令併發

    1. 移動/排序/刪除/重命名/獲取類型/是否存在

    2. 得到符合某個表達式的全部鍵

    3. 設置和刪除過時時間

    4. 隨機得到一個

  2. 提供豐富的list結構操做命令

    1. 獲取列表長度

    2. 獲取列表中一段元素

    3. 移除一個或若干項

    4. 從最後開始移除若干項

    5. 追加一個項

    6. 爲列表最前加入一項

    7. 移除並獲取第一項

    8. 移除並獲取最後一項

    9. 按照索引號獲取或設置項

    10. 移除A列表最後一項追加到B列表

    11. 在列表中某個項(根據值)前或後加入項

    12. 獲取項的索引號

  3. 提供豐富的string操做命令

    1. 設置(容許有過時)和追加值

    2. 獲取值的一段

    3. 遞減和遞增

    4. 減小和增長

    5. 設置新值而且返回老的值

    6. 一次獲取和設置多個鍵的值

    7. 獲取值的長度

  4. 提供豐富的set結構操做命令

    1. 增長

    2. 批量增長

    3. 交集(而且保存到另一個集合)

    4. 並集(而且保存到另一個集合)

    5. 從一個移除加入另外一個

    6. 獲取長度

    7. 隨機獲取(並移除)

    8. 是否存在

    9. 獲取全部

  5. 提供豐富的hash結構操做命令

  6. 提供豐富的sorted set操做命令

  7. 支持主從(而且支持多層)

  8. 提供發佈訂閱功能

    1. 監聽某個信道(符合某個表達式)的消息

    2. 向某個信道發佈消息

  9. 提供事務功能

    1. 開始事務塊

    2. 拋棄以前的全部命令

    3. 執行事務塊中的全部命令

    4. 監視某個鍵的事務執行

  10. 其它

    1. 受權

    2. 改變數據庫

    3. 在線配置

    4. 異步刷新數據到磁盤

    5. 同步刷新數據到磁盤

    6. 獲取狀態信息

    7. 得到調試信息

    8. 刪除全部數據

    9. 關閉

  11. 支持SET if Not eXists(能夠用做分佈式鎖)

這麼多API總結起來:

  1. 如此多的基於服務端的命令能夠實現各類各樣的邏輯(這裏重點突出服務端這個詞,雖然咱們知道不少狀況下能夠get後再set,或是getall後再setall,可是這效率沒法和服務端直接操做相比)

  2. 不少命令都組合成了原子命令(這是很重要的,使得咱們不須要在客戶端作分佈式鎖)

  3. 創新的list/set/sorted set存儲結構,比單純的key/value豐富多了

 

接下來講說存儲這個詞,不少人把它和memcached來比較,其實Redis的配置和架構是如此靈活,咱們想怎麼用就怎麼用,想怎麼調優就怎麼調,能夠爲咱們的應用來定製存儲架構:

  1. 設置數據刷新到磁盤的條件(幾秒內幾回改動)

  2. 設置數據刷新到磁盤的方式(老是/每秒/不刷新)

  3. 設置虛擬內存(最大內存/頁大小/頁數量)

  4. 設置限制(內存佔用/併發數/端口/是否後臺)

對於用做緩存仍是存儲,數據的安全性等咱們均可以根據不一樣的應用來調整。那麼Redis能夠用做哪些應用呢?

  1. 分佈式緩存

  2. 分佈式鎖

  3. 消息隊列

  4. 全文索引

  5. 和業務邏輯綁定的存儲

對於.NET客戶端來講,目前ServiceStack.Redis是不錯的選擇,其中也有一些不錯的例子:

  1. 發佈訂閱

  2. 分佈式鎖

  3. 博客的例子

更多信息,參閱:

  1. http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html

  2. http://simonwillison.net/static/2010/redis-tutorial/

  3. http://antirez.com/

Mongodb做爲大數據量的存儲,把Redis做爲中數據量的業務熱點的存儲確實是不錯的方案。

相關文章
相關標籤/搜索