一.key的操作
在redis裏邊,除了”\n”和空格 不能作爲名字的組成內容外,其他內容都可以作爲key的名字部分。名字長度不做要求。
exists key #測試指定key是否存在
del key1 key2 key3 #刪除給定的key
type key #返回給定的value的類型
keys pattern #返回匹配指定模式的所有key
rename oldkey newkey#改名字
dbsize #返回當前數據庫的key數量
expire key seconds #爲key指定過期時間
ttl key #返回key的剩餘過期秒數
select db-index #選擇數據庫
move key db-index #將key從當前數據庫移動到指定數據庫
flushdb #刪除當前數據庫中所有key
flushall #刪除所有數據庫中的所有key
二.String字符串類型的操作
string是redis最基本的類型
redis的string可以包含任何數據。包括jpg圖片或者序列化的對象。
單個value值最大上限是1G字節。
如果只用string類型,redis就可以被看作加上持久化特性的memcache
set key value #設置key對應的值爲string類型的value
mset key1 value1 key2 value2 #一次設置多個key的值
mget key1 key2 #一次獲取多個key的值
incr key #對key的值做加加操作,並返回新的值
decr key #對key的值做漸減操作,並返回新的值
incrby key integer #同incr,加指定的值
decrby key integer #同decr,減指定的值
append key value #給指定key的字符串值追加value
substr key start end #返回截取過的key的字符串值
127.0.0.1:6379> mset color1 red color2 blue
OK
127.0.0.1:6379> mget color1 color2
1) "red"
2) "blue"
127.0.0.1:6379> set num 3
OK
127.0.0.1:6379> incr num
(integer) 4
127.0.0.1:6379> decr num
(integer) 3
127.0.0.1:6379> incrby num 10
(integer) 13
127.0.0.1:6379> incrby num 10
(integer) 23
127.0.0.1:6379> decrby num 5
(integer) 18
127.0.0.1:6379> decrby num 5
(integer) 13
127.0.0.1:6379> append color2 andyellow
(integer) 13
127.0.0.1:6379> get color2
"blueandyellow"
127.0.0.1:6379> substr color2 4 6
"and"
127.0.0.1:6379>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
三.List鏈表類型
(一)介紹
獲得最新的10個登錄用戶信息: select * from user order by logintime desc limit 10;
以上sql語句可以實現用戶需求,但是數據多的時候,全部數據都要受到影響,對數據庫的負載比較高。必要情況還需要給關鍵字段(id或logintime)設置索引,索引也比較耗費系統資源
如果通過list鏈表實現以上功能,可以在list鏈表中只保留最新的10個數據,每進來一個新數據就刪除一箇舊數據。每次就可以從鏈表中直接獲得需要的數據。極大節省各方面資源消耗
(二)應用
list類型其實就是一個雙向鏈表。通過push,pop操作從鏈表的頭部或者尾部添加刪除元素。
這使得list既可以用作棧,也可以用作隊列。
上進上出 :棧
上進下出 :隊列
lpush key string #在key對應list的頭部添加字符串元素
rpop key #在list的尾部刪除元素,並返回刪除元素
llen key 返回key #對應list的長度,key不存在返回0,如果key對應類型不是list返回錯誤
lrange key start end #返回指定區間內的元素,下標從0開始
rpush key string #同上,在尾部添加
lpop key #從list的頭部刪除元素,並返回刪除元素
ltrim key start end #截取list,保留指定區間內元素
(三)事例
通過list鏈表保存登錄系統的最新5個用戶信息:
jim xiaoli jack xiaoming linken mary tom
設置一個list鏈表key newlogin,內部有5個元素:
127.0.0.1:6379> lpush newlogin tom
(integer) 1
127.0.0.1:6379> lpush newlogin mary
(integer) 2
127.0.0.1:6379> lpush newlogin linken
(integer) 3
127.0.0.1:6379> lpush newlogin xiaoming
(integer) 4
127.0.0.1:6379> lpush newlogin jack
(integer) 5
127.0.0.1:6379> keys *
1) "newlogin"
2) "color1"
3) "num"
4) "color2"
5) "name"
6) "age"
127.0.0.1:6379> lpush newlogin xiaoli
(integer) 6
127.0.0.1:6379> rpop newlogin
"tom"
127.0.0.1:6379> lrange newlogin 0 100
1) "xiaoli"
2) "jack"
3) "xiaoming"
4) "linken"
5) "mary"
127.0.0.1:6379>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
四.set類型的操作使用
redis的set是string類型的無序集合。
set元素最大可以包含(2的32次方-1)個元素。
關於set集合類型除了基本的添加刪除操作,
其他有用的操作還包含集合的取並集(union),交集(intersection),差集(difference)。通過這些操作可以很容易的實現sns中的好友推薦功能。
注意:每個集合中的各個元素不能重複。
sadd key member #添加一個string元素到key對應的set集合中,成功返回1,如果元素已經在集合中,返回0,key對應的set不存在返回錯誤
srem key member [memeber] #從key對應set中移除給定元素,成功返回1
smove p1 p2 member #從p1 對應set中移除member並添加到p2對應set中
scard key #返回set的元素個數
sismember key member #判斷member是否在set中
sinter key1 key2...keyn #返回所有給定key的交集
sunion key1 key2...keyn #返回所有給定key的並集
sdiff key1 key2...keyn #返回所有給定key的差集
smembers key #返回key對應set的所有元素,結果是無序的
該類型應用場合:qq好友推薦。
tom朋友圈(與某某是好友):mary jack xiaoming wang5 wang6
linken朋友圈(與某某是好友):yuehan daxiong luce wang5 wang6
1.創建tomFri的set集合類型數據,內部有5個元素:
127.0.0.1:6379> sadd tomFri mary
(integer) 1
127.0.0.1:6379> sadd tomFri jack
(integer) 1
127.0.0.1:6379> sadd tomFri xiaoming
(integer) 1
127.0.0.1:6379> sadd tomFri wang5
(integer) 1
127.0.0.1:6379> sadd tomFri wang6
(integer) 1
127.0.0.1:6379> keys *
1) "tomFri"
127.0.0.1:6379> smembers tomFri
1) "xiaoming"
2) "wang5"
3) "mary"
4) "jack"
5) "wang6"
127.0.0.1:6379>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2.再創建一個linkenFri的set集合key:
127.0.0.1:6379> sadd linkenFri yuehan
(integer) 1
127.0.0.1:6379> sadd linkenFri daxiong
(integer) 1
127.0.0.1:6379> sadd linkenFri luce
(integer) 1
127.0.0.1:6379> sadd linkenFri wang5
(integer) 1
127.0.0.1:6379> sadd linkenFri wang6
(integer) 1
127.0.0.1:6379> keys *
1) "linkenFri"
2) "tomFri"
127.0.0.1:6379> smembers linkenFri
1) "daxiong"
2) "wang5"
3) "luce"
4) "yuehan"
5) "wang6"
127.0.0.1:6379>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
3.集合取交集、並集:
127.0.0.1:6379> sinter tomFri linkenFri
1) "wang5"
2) "wang6"
127.0.0.1:6379> sunion tomFri linkenFri
1) "xiaoming"
2) "wang5"
3) "mary"
4) "luce"
5) "yuehan"
6) "wang6"
7) "daxiong"
8) "jack"
127.0.0.1:6379>
4.兩個集合互取差集:
127.0.0.1:6379> sdiff tomFri linkenFri
1) "xiaoming"
2) "mary"
3) "jack"
127.0.0.1:6379> sdiff linkenFri tomFri
1) "daxiong"
2) "luce"
3) "yuehan"
127.0.0.1:6379>
五.Sort Set排序集合類型
和set一樣sorted set也是string類型元素的集合,
不同的是每個元素都會關聯一個權。
通過權值可以有序的獲取集合中的元素
該Sort set類型適合場合:
獲得熱門帖子(回覆量)信息:select * from message order by backnum desc limit 5;
(以上需求可以通過簡單sql語句實現,但是sql語句比較耗費MySQL數據庫資源)
案例:利用sort set實現獲取最熱門的前5帖子信息
排序集合中的每個元素都是值、權的組合
(之前的set集合類型每個元素就只是一個 值)
我們只做一個sort set排序集合,裏邊只保留5個元素信息,該5個元素是回覆量最高的
每個帖子被回覆的時候,都有機會進入該集合裏邊,但是隻有回覆量最高的前5個帖子會存在於在集合,回覆量低的就被刪除。
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> zadd hotmessage 102 11
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 141 12
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 159 13
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 72 14
(integer) 1
127.0.0.1:6379[2]> zadd hotmessage 203 15
(integer) 1
127.0.0.1:6379[2]> keys *
1) "hotmessage"
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "15"
2) "13"
3) "12"
4) "11"
5) "14"
127.0.0.1:6379[2]> zadd hotmessage 189 16
(integer) 1
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "15"
2) "16"
3) "13"
4) "12"
5) "11"
6) "14"
127.0.0.1:6379[2]> zremrangebyrank hotmessage 0 0
(integer) 1
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "15"
2) "16"
3) "13"
4) "12"
5) "11"
127.0.0.1:6379[2]> zrank hotmessage 12
(integer) 1
127.0.0.1:6379[2]> zrank hotmessage 11
(integer) 0
127.0.0.1:6379[2]> zrevrank hotmessage 13
(integer) 2
127.0.0.1:6379[2]> zcard hotmessage
(integer) 5
127.0.0.1:6379[2]> zscore hotmessage 16
"189"
127.0.0.1:6379[2]> zincrby hotmessage 100 12
"241"
127.0.0.1:6379[2]> zrevrange hotmessage 0 100
1) "12"
2) "15"
3) "16"
4) "13"
5) "11"
127.0.0.1:6379[2]>