天天看點

神奇的Redis

Redis

按照官方的定義是一個開源的,進階的鍵值存儲。本文就想擴充開介紹,進階和存儲兩點。

為什麼進階,咱們列一下它的基本特性:

  1. 每秒10萬+的讀,8萬+的寫(是不是有點吹?)
  2. 操作原子性(還支援把一組指令合并為一個原子操作)
  3. 多種基中繼資料類型的支援(hash/list/(sorted)set/string)
  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. 部落格的例子

更多資訊,參閱:

  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作為中資料量的業務熱點的存儲确實是不錯的方案。

作者:

lovecindywang

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。