1. 程式人生 > >Redis 基本類型

Redis 基本類型

hashes pre add 使用 操作 重要 產生 能力 ++

REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統


  • string

127.0.0.1:6379> set mykey somevalue
OK
127.0.0.1:6379> get mykey
"somevalue"
127.0.0.1:6379> 

能夠SET和GET命令來創建和檢索strings。註意,set命令將代替現有的不論什麽已經存在的key。SET命令另一個提供附加參數的選項,我們能夠讓SET命令僅僅有在沒有同樣key的情況下成功。反之亦然,能夠讓SET命令在有同樣key值得情況下成功。
127.0.0.1:6379> set mykey newval nx
(nil)
127.0.0.1:6379> get mykey
"somevalue"
127.0.0.1:6379> 
127.0.0.1:6379> set mykey newval xx
OK
127.0.0.1:6379> get mykey
"newval"

string是Redis的基本類型,也能夠對其進行一些有趣的操作,比如加法器:
127.0.0.1:6379> set counter 100
OK
127.0.0.1:6379> incr counter
(integer) 101
127.0.0.1:6379> incr counter
(integer) 102
127.0.0.1:6379> incrby counter 50
(integer) 152

INCR命令讓the value 成為一個整數,執行一次INCR便+1。INCRBY命令便是一個加法運算。

類似的命令如減法運算為: DECR and DECRBY。

Redis能夠運用MSET and MGET 命令完畢一次性的完畢多個key-value的相應關系。使用MGET命令,Redis返回一個value數組


127.0.0.1:6379> mset a 10 b 20 c 30
OK
127.0.0.1:6379> mget a b c
1) "10"
2) "20"
3) "30"
127.0.0.1:6379> 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • list

Redis列表是簡單的字符串列表,依照插入順序排序。你能夠加入一個元素導列表的頭部(左邊)或者尾部(右邊) LPUSH 命令插入一個新的元素導頭部, 而 RPUSH插入一個新元素導尾部.當一個這兩個操作在一個空的Key上被運行的時候一個新的列表被創建。相似的,假設一個列表操作清空一個列表那麽相應的key將被從key空間刪除。這是很方便的語義,由於他們被調用使用一個空列表全然就像他們被調用時使用一個不存在的鍵值(能夠)做為參數。

PUSH一類的命令的返回值為list的長度。

一些類表操作和結果的樣例:


127.0.0.1:6379> rpush mylist A
(integer) 1
127.0.0.1:6379> rpush mylist B
(integer) 2
127.0.0.1:6379> lpush mylist first
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
127.0.0.1:6379> 

註意:LRANGE 利用了兩個檢索值,0表示list的開頭第一個,-1表示list的倒數第一個。即最後一個。-2則便是list的倒數第二個,以此類推。

這些命令都是可變的命令,也就是說你能夠一次增加多個元素放入list。

127.0.0.1:6379> RPUSH mylist 1 2 3 4 5 "hello"
(integer) 9
127.0.0.1:6379> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "1"
5) "2"
6) "3"
7) "4"
8) "5"
9) "hello"
127.0.0.1:6379> 

在Redis的命令操作中,另一類重要的操作:POP。取出list元素。和PUSH操作類似,POP命令能夠選擇不同的方向取出元素.POP命令返回值為取出的元素。
127.0.0.1:6379> rpush mylist a b c 
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1 
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpop mylist
"c"
127.0.0.1:6379> LRANGE mylist 0 -1 
1) "a"
2) "b"
127.0.0.1:6379> lpop mylist
"a"
127.0.0.1:6379> LRANGE mylist 0 -1 
1) "b"
127.0.0.1:6379> 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • hashes

Redis Hashes是字符串字段和字符串值之間的映射,因此他們是展現對象的完美數據類型。

(比如:一個有名。姓,年齡等等屬性的用戶):一個帶有一些字段的hash只須要一塊非常小的空間存儲,因此你能夠存儲數以百萬計的對象在一個小的Redis實例中。 哈希主要用來表現對象,他們有能力存儲非常多對象。因此你能夠將哈希用於更多的任務。

127.0.0.1:6379> hmset user:1000 username liubo age 20 money 100 //創建記錄,相等於數據庫表一條記錄
OK
127.0.0.1:6379> hget user:1000 username//獲取值,記錄的字段名相應的值
"liubo"
127.0.0.1:6379> hget user:1000 money
"100"

HMSET命令設置一個多域的hash表,HGET命令獲取指定的單域,HGETALL命令獲取指定key的全部信息。HMGET類似於HGET,僅僅是返回一個value數組。
127.0.0.1:6379> hmget user:1000 username age money
1) "liubo"
2) "20"
3) "100"
127.0.0.1:6379> hgetall user:1000
1) "username"
2) "liubo"
3) "age"
4) "20"
5) "money"
6) "100"
127.0.0.1:6379> 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • set

無序集合

Redis 集合(Set)是一個無序的字符串集合. 你能夠以O(1)的時間復雜度 (不管集合中有多少元素時間復雜度都是常量)完畢加入,刪除,以及測試元素是否存在。

Redis 集合擁有令人愜意的不同意包括同樣成員的屬性。

多次加入同樣的元素,終於在集合裏僅僅會有一個元素。

實際上說這些就是意味著在加入元素的時候無須檢測元素是否存在。 一個Redis集合的很有趣的事情是他支持一些服務端的命令從現有的集合出發去進行集合運算,因此你能夠在很短的時間內進行合並(unions), 求交集(intersections),找出不同的元素(differences of sets)。


127.0.0.1:6379> sadd myset 1 2 3 
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> 

SADD命令產生一個無序集合,返回集合的元素個數。SMEMBER用於查看集合。

SISMEMBER用於查看集合是否存在,匹配項包含集合名和元素個數。匹配成功返回1,匹配失敗返回0.

127.0.0.1:6379> SISMEMBER myset 3
(integer) 1
127.0.0.1:6379> SISMEMBER myset 30
(integer) 0


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • zset

有序集合

Redis有序集合與普通集合很相似。是一個沒有反復元素的字符串集合。

不同之處是有序集合的沒有成員都關聯了一個評分。這個評分被用來依照從最低分到最高分的方式排序集合中的成員。集合的成員是唯一的,可是評分能夠是反復了。 使用有序集合你能夠以很快的速度(O(log(N)))加入,刪除和更新元素。由於元素是有序的, 所以你也能夠很快的依據評分(score)或者次序(position)來獲取一個範圍的元素。訪問有序集合的中間元素也是很快的,因此你能夠使用有序集合作為一個沒有反復成員的智能列表。在有序集合中,你能夠很快捷的訪問一切你須要的東西:有序的元素,高速的存在性測試。高速訪問集合的中間元素! 簡而言之使用有序集合你能夠做完畢很多對性能有極端要求的任務,而那些任務使用其它類型的數據庫真的是非常難完畢的。

ZADD與SADD類似,可是在元素之前多了一個參數。這個參數便是用於排序的。形成一個有序的集合。

查看集合ZRANGE是查看正序的集合,ZREVRANGE是查看反序的集合。

0表示集合第一個元素,-1表示集合的倒數第一個元素。


127.0.0.1:6379> zadd myzset 20 liubo
(integer) 1
127.0.0.1:6379> zadd myzset 22 hello
(integer) 1
127.0.0.1:6379> zadd myzset 20 nice 
(integer) 1
127.0.0.1:6379> zadd myzset 0.1 welcome
(integer) 1
127.0.0.1:6379> ZRANGE myzset 0 -1 
1) "welcome"
2) "liubo"
3) "nice"
4) "hello"
127.0.0.1:6379> ZREVRANGE myzset 0 -1
1) "hello"
2) "nice"
3) "liubo"
4) "welcome"
127.0.0.1:6379> 


使用WITHSCORES 參數返回記錄值。
127.0.0.1:6379> ZREVRANGE myzset 0 2  withscores //返回分數最高的前三名, 顯示分數參數
1) "hello"
2) "22"
3) "nice"
4) "20"
5) "liubo"
6) "20"
127.0.0.1:6379> 


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Redis 基本類型