--------------------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 ##改變複製策略設置