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è)置成功,用于更新
mset,mget
批量設(shè)置和獲取命令,在操作多個(gè)key的時(shí)候可以節(jié)省網(wǎng)絡(luò)傳輸時(shí)間
mset key value [key value...]
mget key [key ...]
其它字符串命令
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:[屬性]"。