按照官方的定義是一個開源的,進階的鍵值存儲。本文就想擴充開介紹,進階和存儲兩點。
為什麼進階,咱們列一下它的基本特性:
- 每秒10萬+的讀,8萬+的寫(是不是有點吹?)
- 操作原子性(還支援把一組指令合并為一個原子操作)
- 多種基中繼資料類型的支援(hash/list/(sorted)set/string)
- 支援過期(可以用作緩存)
- 支援主從架構(多級層次)
- 支援管道(一次性發送多個指令執行)
以及豐富的API:
- 提供豐富有關key的操作指令
- 移動/排序/删除/重命名/擷取類型/是否存在
- 獲得符合某個表達式的所有鍵
- 設定和删除過期時間
- 随機獲得一個
- 提供豐富的list結構操作指令
- 擷取清單長度
- 擷取清單中一段元素
- 移除一個或若幹項
- 從最後開始移除若幹項
- 追加一個項
- 為清單最前加入一項
- 移除并擷取第一項
- 移除并擷取最後一項
- 按照索引号擷取或設定項
- 移除A清單最後一項追加到B清單
- 在清單中某個項(根據值)前或後加入項
- 擷取項的索引号
- 提供豐富的string操作指令
- 設定(允許有過期)和追加值
- 擷取值的一段
- 遞減和遞增
- 減少和增加
- 設定新值并且傳回老的值
- 一次擷取和設定多個鍵的值
- 擷取值的長度
- 提供豐富的set結構操作指令
- 增加
- 批量增加
- 交集(并且儲存到另外一個集合)
- 并集(并且儲存到另外一個集合)
- 從一個移除加入另一個
- 擷取長度
- 随機擷取(并移除)
- 是否存在
- 擷取所有
- 提供豐富的hash結構操作指令
- 提供豐富的sorted set操作指令
- 支援主從(并且支援多層)
- 提供釋出訂閱功能
- 監聽某個信道(符合某個表達式)的消息
- 向某個信道釋出消息
- 提供事務功能
- 開始事務塊
- 抛棄之前的所有指令
- 執行事務塊中的所有指令
- 監視某個鍵的事務執行
- 其它
- 授權
- 改變資料庫
- 線上配置
- 異步重新整理資料到磁盤
- 同步重新整理資料到磁盤
- 擷取狀态資訊
- 獲得調試資訊
- 删除所有資料
- 關閉
- 支援SET if Not eXists(可以用作分布式鎖)
這麼多API總結起來:
- 如此多的基于服務端的指令可以實作各種各樣的邏輯(這裡重點突出服務端這個詞,雖然我們知道很多情況下可以get後再set,或是getall後再setall,但是這效率無法和服務端直接操作相比)
- 很多指令都組合成了原子指令(這是很重要的,使得我們不需要在用戶端做分布式鎖)
- 創新的list/set/sorted set存儲結構,比單純的key/value豐富多了
接下來說說存儲這個詞,很多人把它和memcached來比較,其實Redis的配置和架構是如此靈活,我們想怎麼用就怎麼用,想怎麼調優就怎麼調,可以為我們的應用來定制存儲架構:
- 設定資料重新整理到磁盤的條件(幾秒内幾次改動)
- 設定資料重新整理到磁盤的方式(總是/每秒/不重新整理)
- 設定虛拟記憶體(最大記憶體/頁大小/頁數量)
- 設定限制(記憶體占用/并發數/端口/是否背景)
對于用作緩存還是存儲,資料的安全性等我們都可以根據不同的應用來調整。那麼Redis可以用作哪些應用呢?
- 分布式緩存
- 分布式鎖
- 消息隊列
- 全文索引
- 和業務邏輯綁定的存儲
對于.NET用戶端來說,目前
ServiceStack.Redis是不錯的選擇,其中也有一些不錯的例子:
- 釋出訂閱
- 部落格的例子
更多資訊,參閱:
- http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html
- http://simonwillison.net/static/2010/redis-tutorial/
- http://antirez.com/
把
Mongodb作為大資料量的存儲,把Redis作為中資料量的業務熱點的存儲确實是不錯的方案。
作者:
lovecindywang本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。