reids數據類型

 
今天第一次開通,寫的很差,請諒解
 
redis並不是簡單的key-value存儲,實際上它是一個數據結構服務器,支持不一樣類型的值,也就是說,咱們不只僅把字符串看成鍵所指向的值,
 
以下這些數據類型均可以做爲值類型:
 
1 二進制安全的字符串:string;
 
2 二進制安全的字符串列表:list of string;
 
3 二進制安全的字符串集合:set of string,換言之:它是一組無重複未排序的element; 能夠把它當作Ruby中的hash-其key等於element,value都等於'true'。
 
4 有序集合:sorted set of string,相似於集合set,但其中每一個元素都和一個浮點數score(評分)關聯。element根據score排序,能夠把它當作Ruby中的hash-其key等於element,value等於score,但元素老是按score的順序排序,無需額外的排序操做
 

 
Redis 鍵
 
Redis key值是二進制安全的,這意味着能夠能夠用任何二進制序列做爲key值,從形如"foo"的簡單字符串到一個JPEG文件的內容均可以。
空字符串也是有效key值。
 
key的規則
 
1 太長的鍵值不是好主意,例如1024字節的鍵值就不是好主意,不只由於消耗內存,並且在數據中查找這類鍵值的計算成本很高;
 
2 過短的鍵值一般也不是好主意,若是你要用"u:1000:pwd"來代替"user:1000:password",這沒有什麼問題,但後者更易閱讀,並由此增長的空間消耗相對於key object和value object自己來講很小,也沒有人去阻止您必定要用更短的鍵值節省一丁點空間;
 
3 最好堅持一種模式。如:"object-type:id:field"就是個不錯的注意,像這樣"user:1000:password"。在多單詞的字段名中加上一個點,就像:"comment:1234:reply.to"
 

字符串是Redis的基本值類型
字符串類型:Redis就像一個能夠持久化的memcached服務器(注:memcache的數據僅保存在內存中,服務器重啓後,數據將丟失)。
 
一般用SET command 和 GET command來設置和獲取字符串值 值能夠是任何種類的字符串(包括二進制數據),例如你能夠在一個鍵下保存一副jpeg圖片。值的長度不能超過1GB。
 
原子遞增
$ redis-cli set counter 100
OK $ redis-cli incr counter
(integer) 101
$ redis-cli incr counter
(integer) 102
$ redis-cli incrby counter 10
(integer) 112
 
INCR 命令將字符串值解析成整型,將其加一,最後將結果保存爲新的字符串值,相似的命令有INCRBY, DECR and DECRBY。實際上他們在內部就是同一個命令,只是看上去有點兒不一樣。
 
GETSET命令:爲key設置新值而且返回原值,若是咱們的系統中有新的用戶訪問時就用INCR命令操做一個Redis key,但若是咱們但願每小時對這個信息收集一次,那麼咱們就能夠用GETSET這個key並給其賦值0並讀取原值
 

 
列表類型:通常來說,列表就是有序元素的序列:10,20,1,2,3就是一個列表,但用數組實現的List和用Linked List實現的List,在屬性方面大不相同。
 
Redis Lists用linked list實現的緣由是:對於數據庫系統來講,相當重要的特性是:能很是快的在很大的列表上添加元素。另外一個重要因素是,正如你將要看到的:Redis lists能在常數時間取得常數長度。
 

 
Redis的七種特性:
 
一 Strings數據結構
 
簡單的key-value類型,value其實不只是String,也能夠是數字。
 
使用Strings類型,你能夠徹底實現目前 Memcached 的功能,而且效率更高。
 
還能夠享受Redis的定時持久化,操做日誌及 Replication等功能。
 
除了提供與 Memcached 同樣的get、set、incr、decr 等操做外,
Redis還提供了下面一些操做:
 
獲取字符串長度
 
往字符串append內容
設置和獲取字符串的某一段內容
 
設置及獲取字符串的某一位(bit)
批量設置一系列字符串的內容
 
二 Hashs
 
在Memcached中,咱們常常將一些結構化的信息打包成hashmap,在客戶端序列化後存儲爲一個字符串的值,好比用戶的暱稱、年齡、性別、積分等,這時候在須要修改其中某一項時,一般須要將全部值取出反序列化後,修改某一項的值,再序列化存儲回去。
 
這樣不只增大了開銷,也不適用於一些可能併發操做的場合(好比兩個併發的操做都須要修改積分)。
 
而Redis的Hash結構可使你像在數據庫中Update一個屬性同樣只修改某一項屬性值。
 
三 Lists
 
Lists 就是鏈表,相信略有數據結構知識的人都應該能理解其結構。
 
使用Lists結構,咱們能夠輕鬆地實現最新消息排行等功能。
 
Lists的另外一個應用就是消息隊列,能夠利用Lists的PUSH操做,將任務存在Lists中,而後工做線程再用POP操做將任務取出進行執行。
 
Redis還提供了操做Lists中某一段的api,你能夠直接查詢,刪除Lists中某一段的元素。
 
四 Sets
 
Sets 就是一個集合,集合的概念就是一堆不重複值的組合。
 
利用Redis提供的Sets數據結構,能夠存儲一些集合性的數據,好比在微博應用中,能夠將一個用戶全部的關注人存在一個集合中,將其全部粉絲存在一個集合。
 
Redis還爲集合提供了求交集、並集、差集等操做,能夠很是方便的實現如共同關注、共同喜愛、二度好友等功能,對上面的全部集合操做,你還可使用不一樣的命令選擇將結果返回給客戶端仍是存集到一個新的集合中。
 
五 Sorted Sets
 
和Sets相比,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,而後再執行Transactions,
 
在這過程當中,若是這個Watched的值進行了修改,那麼這個Transactions會發現並拒絕執行。
相關文章
相關標籤/搜索