1. 程式人生 > >redis 體系結構

redis 體系結構

alt 客戶端命令 mem key ges 並不是 不出 字符串 get

程序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 體系結構