redis數據類型

--------------------String -- 字符串--------------------redis

概述:String是簡單的 key-value 鍵值對,value 不只能夠是 String,也能夠是數字。String在redis內部存儲默認就是一個字符串,被redisObject所引用,當遇到incr,decr等操做時會轉成數值型進行計算,此時redisObject的encoding字段爲int數據庫

 

192.168.100.101:6379> set hello worldjson

OK數組

192.168.100.101:6379> get hello數據結構

"world"app

192.168.100.101:6379> EXISTS hello ##驗證key是否存在異步

(integer) 1測試

192.168.100.101:6379> type helloserver

string排序

192.168.100.101:6379> substr hello 1 2 ##查看key的第1和2兩個字符

"or"

192.168.100.101:6379> append hello ! ##在key後添加字符!

(integer) 6

192.168.100.101:6379> get hello

"world!"

192.168.100.101:6379> set haha heihei

OK

192.168.100.101:6379> keys h* ##查看以h開頭的Key

1) "haha"

2) "hello"

192.168.100.101:6379> set name xiaoming

OK

192.168.100.101:6379> keys *

1) "haha"

2) "hello"

3) "name"

192.168.100.101:6379> RANDOMKEY ##隨機返回一個Key

"name"

192.168.100.101:6379> keys *

1) "haha"

2) "hello"

3) "name"

192.168.100.101:6379> RANDOMKEY

"haha"

192.168.100.101:6379> RENAME haha hehe

OK

192.168.100.101:6379> keys *

1) "hehe"

2) "name"

3) "hello"

192.168.100.101:6379> DEL hehe

(integer) 1

192.168.100.101:6379> keys *

1) "name"

2) "hello"

192.168.100.101:6379> get name

"xiaoming"

192.168.100.101:6379> set name xiaohong

OK

192.168.100.101:6379> get name

"xiaohong"

192.168.100.101:6379> expire name 10 ##設置KEY值的超時時間

(integer) 1

192.168.100.101:6379> ttl name ##查看KEY值當前剩餘的超時時間

(integer) 4

192.168.100.101:6379> get name

"xiaohong"

192.168.100.101:6379> get name

(nil)

192.168.100.101:6379> keys *

1) "hello"

 

--------------------list -- 列表--------------------

概述:Redis列表是簡單的字符串列表,能夠類比到C++中的std::list,簡單的說就是一個鏈表或者說是一個隊列。能夠從頭部或尾部向Redis列表添加元素。列表的最大長度爲2^32 - 1,也即每一個列表支持超過40億個元素。Redis list的實現爲一個雙向鏈表,便可以支持反向查找和遍歷,更方便操做,不過帶來了部分額外的內存開銷,Redis內部的不少實現,包括髮送緩衝隊列等也都是用的這個數據結構

應用場景:Redis list的應用場景很是多,也是Redis最重要的數據結構之一,好比twitter的關注列表、粉絲列表等均可以用Redis的list結構來實現,再好比有的應用使用Redis的list類型實現一個簡單的輕量級消息隊列,生產者push,消費者pop/bpop

 

192.168.100.101:6379> rpush list1 1 ##建立列表並在尾部插入元素

(integer) 1

192.168.100.101:6379> rpush list1 2

(integer) 2

192.168.100.101:6379> lrange list1 0 1 ##驗證列表中的第0個元素到第1個元素

1) "1"

2) "2"

192.168.100.101:6379> lpush list1 0 ##在列表頭部插入元素

(integer) 3

192.168.100.101:6379> lrange list1 0 1

1) "0"

2) "1"

192.168.100.101:6379> lrange list1 0 2 ##驗證列表中的第0個元素到第2個元素

1) "0"

2) "1"

3) "2"

192.168.100.101:6379> llen list1 ##查看列表中的元素的數量

(integer) 3

192.168.100.101:6379> lindex list1 1 ##定位到列表中的第1個元素

"1"

192.168.100.101:6379> ltrim list1 1 2 ##截取列表中的第1個元素到第2個元素

OK

192.168.100.101:6379> lrange list1 0 10 ##查看列表中第0個元素到第10個元素

1) "1"

2) "2"

192.168.100.101:6379> lset list1 1 haha ##更改列表中的第1個元素值爲haha

OK

192.168.100.101:6379> lrange list1 0 10

1) "1"

2) "haha"

192.168.100.101:6379> lset list1 2 haha ##驗證更改時的元素位置不能大於現有元素的數量

(error) ERR index out of range

192.168.100.101:6379> lrange list1 0 10

1) "1"

2) "haha"

192.168.100.101:6379> rpush list1 haha ##在列表尾部插入新的元素

(integer) 3

192.168.100.101:6379> lrange list1 0 10

1) "1"

2) "haha"

3) "haha"

192.168.100.101:6379> lrem list1 2 haha ##刪除列表中兩個值爲haha的元素

(integer) 2

192.168.100.101:6379> lrange list1 0 10

1) "1"

192.168.100.101:6379> rpush list1 haha

(integer) 2

192.168.100.101:6379> rpush list1 haha

(integer) 3

192.168.100.101:6379> rpush list1 haha

(integer) 4

192.168.100.101:6379> rpush list1 haha

(integer) 5

192.168.100.101:6379> lrange list1 0 10

1) "1"

2) "haha"

3) "haha"

4) "haha"

5) "haha"

192.168.100.101:6379> lpop list1 ##刪除列表內開頭的第一個元素

"1"

192.168.100.101:6379> lrange list1 0 10

1) "haha"

2) "haha"

3) "haha"

4) "haha"

192.168.100.101:6379> lpop list1

"haha"

192.168.100.101:6379> lrange list1 0 10

1) "haha"

2) "haha"

3) "haha"

 

--------------------set -- 無序集合--------------------

概述:能夠理解爲一堆值不重複的列表,相似數學領域中的集合概念,且Redis也提供了針對集合的求交集、並集、差集等操做。set 的內部實現是一個 value永遠爲null的HashMap,實際就是經過計算hash的方式來快速排重的,這也是set能提供判斷一個成員是否在集合內的緣由

應用場景:Redis set對外提供的功能與list相似是一個列表的功能,特殊之處在於set是能夠自動排重的,當你須要存儲一個列表數據,又不但願出現重複數據時,set是一個很好的選擇,而且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。又或者在微博應用中,每一個用戶關注的人存在一個集合中,就很容易實現求兩我的的共同好友功能

 

192.168.100.101:6379> sadd set1 0 ##建立set1並賦值0

(integer) 1

192.168.100.101:6379> sadd set1 1 ##在set1後追加值1

(integer) 1

192.168.100.101:6379> smembers set1 ##顯示set1的全部值

1) "0"

2) "1"

192.168.100.101:6379> scard set1 ##顯示set1的基數

(integer) 2

192.168.100.101:6379> sismember set1 0 ##顯示set1中是否包含值爲0的元素

(integer) 1

192.168.100.101:6379> srandmember set1 ##隨機返回set1中的的元素值

"0"

192.168.100.101:6379> sadd set2 0 ##建立set2並添加元素

(integer) 1

192.168.100.101:6379> sadd set2 2

(integer) 1

192.168.100.101:6379> sinter set1 set2 ##過濾set1與set2的交集

1) "0"

192.168.100.101:6379> sinterstore set3 set1 set2 ##將set1與set2的交集保存到set3

(integer) 1

192.168.100.101:6379> smembers set3

1) "0"

192.168.100.101:6379> sunion set1 set2 ##過濾set1與set2的並集

1) "0"

2) "1"

3) "2"

192.168.100.101:6379> sdiff set1 set2 ##相對與set2來說,set1的差集

1) "1"

192.168.100.101:6379> sdiff set2 set1 ##相對比set1來說,set2的差集

1) "2"

192.168.100.101:6379> keys * ##查看已經存在的各類數據類型的鍵

1) "set1"

2) "hello"

3) "list"

4) "list1"

5) "set2"

 

--------------------zset -- 有序集合--------------------

概述:Redis有序集合相似Redis無序集合,不一樣的是增長了一個功能,即集合是有序的。一個有序集合的每一個成員帶有分數,用於進行排序。Redis有序集合添加、刪除和測試的時間複雜度均爲O(1)(固定時間,不管裏面包含的元素集合的數量)。列表的最大長度爲2^32- 1元素(4294967295,超過40億每一個元素的集合);Redis sorted set的內部使用HashMap和跳躍表(SkipList)來保證數據的存儲和有序,HashMap裏放的是成員到score的映射,而跳躍表裏存放的是全部的成員,排序依據是HashMap裏存的score,使用跳躍表的結構能夠得到比較高的查找效率,而且在實現上比較簡單

使用場景:Redis sorted set的使用場景與set相似,區別是set不是自動有序的,而sorted set能夠經過用戶額外提供一個優先級(score)的參數來爲成員排序,而且是插入有序的,即自動排序。當你須要一個有序的而且不重複的集合列表,那麼能夠選擇sorted set數據結構

 

192.168.100.101:6379> zadd zset1 1 baidu.com ##建立集合zset1,添加元素baidu.com,而且設置元素的score值(有序集合的序列號)爲1

(integer) 1

192.168.100.101:6379> zadd zset1 2 sina.com

(integer) 1

192.168.100.101:6379> zadd zset1 3 qq.com

(integer) 1

192.168.100.101:6379> zrange zset1 0 2 ##查看集合zset1中的元素

1) "baidu.com"

2) "sina.com"

3) "qq.com"

192.168.100.101:6379> zcard zset1 ##查看集合zset1中的基數

(integer) 3

192.168.100.101:6379> zscore zset1 baidu.com ##驗證元素baidu.com在集合zset1中的score值

"1"

192.168.100.101:6379> zscore zset1 qq.com ##驗證元素qq.com在集合zset1中的score值

"3"

192.168.100.101:6379> zrevrange zset1 0 1 ##倒序查找集合中的元素

1) "qq.com"

2) "sina.com"

192.168.100.101:6379> zrem zset1 qq.com ##刪除集合中的元素qq.com

(integer) 1

192.168.100.101:6379> zrange zset1 0 5 ##驗證集合中的全部元素

1) "baidu.com"

2) "sina.com"

192.168.100.101:6379> zincrby zset1 5 taobao.com ##設置該元素score值爲5.如若此元素不存在,則會添加到集合中

"5"

192.168.100.101:6379> zrange zset1 0 5 ##驗證集合中的原色

1) "baidu.com"

2) "sina.com"

3) "taobao.com"

192.168.100.101:6379> zrange zset1 0 5 withscores ##查看集合中的元素值而且輸出其自己的score值

1) "baidu.com"

2) "1"

3) "sina.com"

4) "2"

5) "taobao.com"

6) "5"

192.168.100.101:6379> zincrby zset1 10 haha.com ##添加新元素haha.com並指定其自己score值

"10"

192.168.100.101:6379> zrange zset1 0 5 withscores ##驗證元素的排序

1) "baidu.com"

2) "1"

3) "sina.com"

4) "2"

5) "taobao.com"

6) "5"

7) "haha.com"

8) "10"

192.168.100.101:6379> zincrby zset1 15 baidu.com ##如若新添加的元素已經存在,那麼會在原有score值的基礎上增長指定得score值

"16"

192.168.100.101:6379> zrange zset1 0 5 withscores ##驗證元素baidu.com的score值變爲16,增長了15,並排序到集合的末尾

1) "sina.com"

2) "2"

3) "taobao.com"

4) "5"

5) "haha.com"

6) "10"

7) "baidu.com"

8) "16"

注:此外, 還有zrevrank, zrevrange, zrangebyscore, zremrangebyrank, zramrangebyscore, zinterstore/zunionstore等操做

 

--------------------hash--------------------

概述:相似C#中的dict類型或者C++中的hash_map類型。Redis Hash對應Value內部實際就是一個HashMap,這個Hash的成員比較少時Redis爲了節省內存會採用相似一維數組的方式來緊湊存儲,而不會採用真正的HashMap結構,對應的value redisObject的encoding爲zipmap,當成員數量增大時會自動轉成真正的HashMap,此時encoding爲ht

應用場景:假設有多個用戶及對應的用戶信息,能夠用來存儲以用戶ID爲key,將用戶信息序列化爲好比json格式作爲value進行保存

 

192.168.100.101:6379> hset hash1 key1 value1 ##設置鍵值hash1,而且指定內部key與value對應

(integer) 1

192.168.100.101:6379> hget hash1 key1 ##查看hash1中的key1的值

"value1"

192.168.100.101:6379> hexists hash1 key1 ##檢查hash1中是否有key1

(integer) 1

192.168.100.101:6379> hset hash1 key2 value2 ##在hash1中建立key2

(integer) 1

192.168.100.101:6379> hlen hash1 ##查看hash1中鍵值的基數

(integer) 2

192.168.100.101:6379> hkeys hash1 ##查看hash1中具體包含的鍵

1) "key1"

2) "key2"

192.168.100.101:6379> hvals hash1 ##查看hash1中具體包含的值

1) "value1"

2) "value2"

192.168.100.101:6379> hmget hash1 key1 key2 ##經過明確指定hash1中的key,去查看值是什麼

1) "value1"

2) "value2"

192.168.100.101:6379> hgetall hash1 ##查看hash1中包含的全部鍵和值的對應

1) "key1"

2) "value1"

3) "key2"

4) "value2"

192.168.100.101:6379> hset hash1 key4 10 ##添加新鍵key4,值爲整數10

(integer) 1

192.168.100.101:6379> hincrby hash1 key4 15 ##將key4執行計算加10(僅限整數)

(integer) 25

192.168.100.101:6379> hmset hash1 key5 value5 key6 value6 key7 value7 ##批量添加鍵值對

OK

192.168.100.101:6379> hgetall hash1 ##驗證批量添加的鍵值對

1) "key1"

2) "value1"

3) "key2"

4) "value2"

5) "key3"

6) "value3"

7) "key4"

8) "25"

9) "key5"

10) "value5"

11) "key6"

12) "value6"

13) "key7"

14) "value7"

 

--------------------redis中其餘操做--------------------

 

192.168.100.101:6379> dbsize ##查看全部key的數目 

192.168.100.101:6379> flushdb ##刪除當前選擇數據庫中的全部key 

192.168.100.101:6379> flushall ##刪除全部數據庫中的全部key 

192.168.100.101:6379> save ##將數據同步保存到磁盤 

192.168.100.101:6379> bgsave ##異步保存 

192.168.100.101:6379> lastsave ##上次成功保存到磁盤的Unix時間戳 

192.168.100.101:6379> info ##查詢server信息 

192.168.100.101:6379> slaveof ##改變複製策略設置

相關文章
相關標籤/搜索