第三節.Redis的使用

第三節.Redis的使用 

一.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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

二.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的字符串值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
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,保留指定區間內元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(三)事例

通過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的所有元素,結果是無序的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

該類型應用場合: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> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

這裏寫圖片描述

五.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
//把權最低的那個刪掉 0 0表示刪除第一個權;0 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]> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章