Redis數(shù)據(jù)類型及使用場景

redis支持常見的數(shù)據(jù)類型,現(xiàn)在是被廣泛用在各大公司的內(nèi)部,它可以做的東西很多,不過要先了解下他提供的基本數(shù)據(jù)類型與常見操作。接下來一起看看把。

字符串

最基礎(chǔ)的數(shù)據(jù)類型,首先key是字符串類型,其它的數(shù)據(jù)類型都是在字符串的基礎(chǔ)之上構(gòu)建的。

set命令
set key value [ex seconds] [px millseconds] [nx|xx]
  • ex seconds: 鍵過期時(shí)間
  • px milliseconds: 為鍵設(shè)置毫秒級過期時(shí)間
  • nx: 鍵必須不存在才可以設(shè)置成功,用于添加
  • xx: 鍵必須存在,才可以設(shè)置成功,用于更新
image.png
mset,mget

批量設(shè)置和獲取命令,在操作多個(gè)key的時(shí)候可以節(jié)省網(wǎng)絡(luò)傳輸時(shí)間

mset key value [key value...]
mget key [key ...]
image.png
其它字符串命令

incr 對值進(jìn)行加1操作,如果不是整數(shù),返回錯(cuò)誤,如果不存在按照從0開始
decr 同incr,但是是減1操作
incrby,decrby ,增加減去指定的數(shù)

使用場景

緩存:將數(shù)據(jù)以字符串方式存儲(chǔ)
計(jì)數(shù)器功能:比如視頻播放次數(shù),點(diǎn)贊次數(shù)。
共享session:數(shù)據(jù)共享的功能,redis作為單獨(dú)的應(yīng)用軟件用來存儲(chǔ)一些共享數(shù)據(jù)供多個(gè)實(shí)例訪問。

字符串的使用空間非常大,可以結(jié)合字符串提供的命令充分發(fā)揮自己的想象力

哈希

Hash一般也被稱為字典,redis自己也可以作為一個(gè)比較大的hash存儲(chǔ)。

hset key field value
hsetnx key field value  //與setnx命令一樣,不存在則設(shè)置值,用于添加,作用在field上面

hget key field //獲取值
hdel key field // 刪除值
hlen key //子酸field的個(gè)數(shù)
hmset key field value [filed value] //批量設(shè)置field-value
hexists key field  //判斷filed是否存在
hkeys key //獲取所有的field
hvals key //獲取所有的value
hgetall key //獲取所有的field-value ,如果元素?cái)?shù)較多會(huì)存在阻塞redis的可能
hincreby key filed

和字符串很像,基本上redis對字符串操作的命令,Redis的Hash一般也存在,不過在命令前多個(gè)一個(gè)h。

一些關(guān)系型數(shù)據(jù)庫中不是特別復(fù)雜的表,也無需復(fù)雜的關(guān)系查詢,可以使用Redis的Hash來存儲(chǔ),也可以用Hash做表數(shù)據(jù)緩存。

列表

列表用來存儲(chǔ)多個(gè)有序的字符串,一個(gè)列表最多可以存儲(chǔ)2^32 - 1個(gè)元素,在redis中可以對列表的兩端插入push和彈出pop,還可以取指定范圍的元素。

rpush key value [value...] //從右插入元素
lpush key value [value...] //從左邊插入元素

lrange key start end //獲取指定范圍的元素列表
lindex key index  //獲取列表指定索引下標(biāo)的元素

llen key  //獲取列表的長度

lpop key // 從列表左側(cè)彈出元素
rpop key // 從列表右側(cè)彈出元素
lrem key count value //從列表中找到等于value的元素,并進(jìn)行刪除,根據(jù)count的不同有不同的情況
lset key index newValue //修改指定索引下標(biāo)的元素
blpop key timeout  //阻塞式左彈出key
brpop key timeout  //阻塞式右彈出key

使用場景:

  • 消息隊(duì)列:我們公司就是使用redis做消息隊(duì)列,lpush + brpop或rpop命令,實(shí)現(xiàn)先進(jìn)先出,如果消費(fèi)失敗客戶端把key再放回去,消費(fèi)成功真的remove掉

幾個(gè)口訣:
lpush + lpop 棧
lpush + rpop 隊(duì)列
lpush + ltrim = 有限集合
lpush + brpop = 消息隊(duì)列

集合

集合是用來保存多個(gè)字符串的元素,內(nèi)部不允許有重復(fù)遠(yuǎn)古三,集合內(nèi)的元素是無序的,Redis支持集合的增刪改查,同時(shí)支持多個(gè)集合取交集,并集,差集

sadd key value [value...] //添加元素
srem key value [value...] //刪除元素
scard key   //計(jì)算元素的個(gè)數(shù)
sismember key value //判斷元素是否在集合中
srandmember key [count]  //隨機(jī)從集合中返回指定個(gè)數(shù)的元素,不寫默認(rèn)為1
spop key //從集合隨機(jī)取出元素
smembers key //獲取集合內(nèi)的所有元素

sinter key1 key2 //求集合的交集
sunion key1 key2 //求集合的并集
sdiff key1 key2  //求集合的差集

使用場景:

  • 標(biāo)簽

有序集合

它保留了元素不能重復(fù)的特性,并且元素是有序的。

zadd key score member  //score是可以重復(fù)的,添加key的時(shí)候指定分?jǐn)?shù)
zcard key //計(jì)算成員個(gè)數(shù)
zscore key member //計(jì)算某個(gè)成員的分?jǐn)?shù)
zrank key member //計(jì)算成員排名,從低到高
zrevrank key member //計(jì)算成員排名,從高到低
zrem key member [member...]  //刪除成員
zincrby key increnment member //增加成員的分?jǐn)?shù)
zrange key start end [withscores]  //從低到高返回指定排名的分?jǐn)?shù)
zrevrange key start end [withscores]  //從高到低返回

zrangebyscore key min max [withscores] [limit offset count] //按照分?jǐn)?shù)從低到高返回
zrevrange score  key min max [withscores] [limit offset count] //按照分?jǐn)?shù)從高到低返回成員

withscore 代表返回的時(shí)候帶上成員的分?jǐn)?shù)

...還有求交集,并集等操作

使用場景:

  • 排行榜,目前公司的飆車榜用的是redis的有序集合,返回前面排名的元素之后再使用redis的mget命令獲取獲取到的key信息。

回顧

redis可以做

  • 緩存
  • 排行榜
  • 計(jì)數(shù)器
  • 標(biāo)簽
  • 消息隊(duì)列

最后

簡單提到這里,redis的數(shù)據(jù)類型比較豐富,使用的場景很多,先在心里有個(gè)數(shù),后面用的時(shí)候心里才有底。

推薦redis的key命名方式為"業(yè)務(wù)名:對象名:id:[屬性]"。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 他笑著,溫暖著雪。 誰也在笑,打落了塵埃。 —— 很久很久以前我也在想他是一個(gè)什么樣子的人。想了三天沒頭沒腦地得出...
    青絲常長閱讀 340評論 2 1
  • 六月過完了,我總結(jié)做的五件事。 1.我的陪伴 陪伊寧同學(xué)堅(jiān)持一個(gè)月的英語單詞學(xué)習(xí)并完成,無一天遺漏。我家產(chǎn)生了全勤...
    美佳佳的名字叫劉佳閱讀 332評論 0 3
  • 文 / 愛妮小姐 之前說了幾次要去南岳,總是出于各種原因沒有行成。這一次,托符叔叔...
    愛妮小姐閱讀 2,846評論 0 9
  • 2017年2月19日 星期天 天氣晴 上學(xué)期補(bǔ)了一期英語,這學(xué)期還打算讓他去,到點(diǎn)了,車費(fèi)給孩子,自己搭車去...
    希多媽閱讀 164評論 0 0