redis 體系結構
程序strings key-value 類型 ,value不僅是String,也可以是數字.使用strings 類型可以完全實現目前
Memcache 的功能,並且效率更高,還可以享受redis的定時持久化,操作日誌及replication 等功能.
除了提供與 Memcache一樣的get ,set,incr,decr 等操作外,redis還提供下面的操作
1.獲取字符串的長度
2.往字符串append的內容
3.設置和獲取字符串的一段內容
4.設置及獲取字符串的某一位(bit)
5.批量設置一系列字符串的內容
Hashs
在Memcached 中,我們經常將一些結構化的信息打包成hanshmap,在客戶端序列化之後存儲為一個字符串
的值,比如用戶的昵稱,年齡,性別,積分等,這時候在需要修改其中某一項時,通常需要將所有值取出後反序列化後,
修改某一項的值,再序列化存儲回去,這樣不僅增大了開銷,也不適用於一些可能並發操作的場合(比如兩個並發操作都需要修改積分)
redis的hash結構可以使你像在數據庫中update一個屬性一樣只修改某一項的屬性值
Lists
Lists 就是鏈表,相信略有數據結構知識的人都應該能理解其結構.使用Lists結構,我們可以輕松的實現
最新消息排行等功能.Lists的另一個應用就是消息隊列,可以利用Lists的PUSH 操作,將任務存在Lists中,
然後工作線程再用POP 操作將任務取出進行執行.redis還提供了操作Lists中某一段的api,你可以直接查詢,刪除Lists中某一項元素
Sets
Sets就是一個集合,集合的概念之一就是一堆不重復的組合.利用redis提供的Sets 數據結構,可以存儲一些集合性的數據,
比如在微博應用中,可以將一個用戶所有的關註人存在一個集合中,將其所有粉絲存在一個集合中,還提供交集,並集,差集等操作
可以非常方便的實現如同關註,共同喜好,二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端
還是存集到一個新的集合中
sorted sets
和Set相比,sorted Sets 增加了一個權重參數score ,使得集合中的元素,能夠按score進行有序排列,比如一個存儲全班同學成績
sorted sets,其集合value 可以是同學的學號,而score就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序,
另外還可以用Sorted Sets 來做帶權重的隊列,比如普通消息的score 為 1 ,重要消息的score 為 2,然後工作線程可以選擇按score
的倒序來獲取工作任務.讓重要的任務優先執行
Pub/Sub
Pub/Sub從字面上理解就是發布(publish)與訂閱(Subscribe),在redis中, 你可以設定對某一個key值
進行消息發布及消息訂閱,當一個key值上進行了消息發布後,所有訂閱它的客戶端都會收到對應的消息,
這一功能最明顯的用法就是作實時消息系統,比如普通即時聊天,群聊等功能
Transactions
誰說NoSQL都不支持事務,雖然redis的 Transactions提供的並不是嚴格的ACID 的事物
(比如一串用EXEC 提交執行的命令,在執行中服務器宕機,那麽會有一部分執行了,剩下沒執行)
但是這個Transactions 還是提供了基本的命令打包執行的功能(在服務器不出問題的情況下,可以保證
一連串的命令是順序在一起執行的,,中間會有其他客戶端命令插進來執行)
redis還提供一個watch功能,你可以對一個key進行watch,然後再執行Transctions,在這過程中,
如果對這個watched的值進行了修改,那麽這個Transactions會發現並拒絕執行
redis適用場合經典架構
應用程序直接訪問redis數據庫
應用程序直接訪問redis,當redis訪問失敗訪問磁盤數據庫, 比如mysql關系型數據庫
集群功能
redis 體系結構