上一篇博客說了str、hash和list三種數(shù)據(jù)類型,這篇博客將會(huì)介紹五種數(shù)據(jù)類型的后兩種set和zset,分別是集合和有序集合。這兩個(gè)數(shù)據(jù)類型就我個(gè)人的開發(fā)經(jīng)驗(yàn)來說沒用過,一方面是不熟悉,一方面是前面的三種類型基本已經(jīng)滿足了日常開發(fā)需求。在文章的最后還會(huì)補(bǔ)充說明一些全局的命令,至此關(guān)于命令的內(nèi)容就結(jié)束啦。寫的有點(diǎn)麻煩,但是寫完后有種發(fā)現(xiàn)新大陸的感覺,后期在使用redis的時(shí)候,選擇性知識(shí)體系將會(huì)更寬,不會(huì)僅限于一兩種數(shù)據(jù)類型啦。
redis數(shù)據(jù)類型之set
set集合和Java中的set集合有點(diǎn)像,內(nèi)部元素是無序的,不可重復(fù)。單個(gè)鍵的value值里面可以存儲(chǔ)2的32次方減1個(gè)元素。另外還可以直接做交、并、差集的運(yùn)算。下面來一起了解一下set集合的常用命令。
常用命令
-
sadd key members:向集合中插入元素,一次可以插入多個(gè)元素,member值指定具體元素sadd user:1:tag it java js -
smembers key:查詢集合中的所有元素smembers user:1:tag -
srem key members:移除集合中的元素,可以一次移除多個(gè),members值指定具體元素srem user:1:tag js -
scard key:獲取當(dāng)前集合元素個(gè)數(shù)scard user:1:tag -
sdiff keys:取第一個(gè)集合和其他集合的差集sdiff user:2:tag user:1:tag -
sdiffstore destination keys:將取得的差集存儲(chǔ)的destination指定的集合中,如果destination指定的集合存在,直接覆蓋,如不存在,新增集合存儲(chǔ)sdiffstore difftags user:1:tag user:2:tag -
sunion keys:取多個(gè)集合的并集sunion user:1:tag user:2:tag -
sunionstore destination keys:取多個(gè)集合的并集,并將并集存儲(chǔ)到destination指定集合中,如果destination指定的集合存在,直接覆蓋,如不存在,新增集合存儲(chǔ)sunionstore uniontags user:1:tag user:2:tag -
sinter keys:取多個(gè)集合之間的交集sinter user:1:tag user:2:tag -
sinter destination keys:取多個(gè)集合之間的交集,并將交集存儲(chǔ)到destination指定集合中,如果destination指定的集合存在,直接覆蓋,如不存在,新增集合存儲(chǔ)sinterstore intertags user:1:tag user:2:tag
redis數(shù)據(jù)類型之zset
zset是有序的集合,內(nèi)部元素不可重復(fù),單個(gè)鍵下可以存儲(chǔ)2的32次方減1個(gè)元素。zset內(nèi)部元素排序是通過當(dāng)前元素的分?jǐn)?shù)來的,默認(rèn)采用正排序。一般用來做排行榜相關(guān)需求比較多。
常用命令
-
zadd key [nx|xx] [ch] [incr] scores members:添加zset類型數(shù)據(jù),nx、xx為可選值,nx表示不可覆蓋,xx為可覆蓋,在zadd命令里面ch、incr基本不用,可以使用zincrby替代。score表示分?jǐn)?shù),雙精度浮點(diǎn)數(shù),以字符串形式表示。zadd user 10 u1 15 u2 11 u3 -
zincrby key increment member:對(duì)zset集合中member對(duì)應(yīng)的分?jǐn)?shù)做累加操作,具體累加的數(shù)值有increment指定### u1的分?jǐn)?shù)累加10 zincrby user 10 u1 -
zrange key start stop [withscores]:正排序,指定start和stop角標(biāo),這種角標(biāo)的規(guī)則和list列表的角標(biāo)規(guī)則相同,具體可以參考list列表角標(biāo)的說明,withscores表示在返回值中包含分?jǐn)?shù)## 正序方式獲取前兩名的member和對(duì)應(yīng)的分?jǐn)?shù) zrange user 0 1 withscores -
zrevrange key start stop [withscores]:反排序,指定start和stop角標(biāo),withscores表示在返回值中包含分?jǐn)?shù)## 反序方式獲取前兩名的member和對(duì)應(yīng)的分?jǐn)?shù) zrevrange user 0 1 withscores -
zscore key member:查詢指定元素的分?jǐn)?shù)值zscore user u1 -
zrank key member:正排序,獲取當(dāng)前元素的排名zrank user u1 -
zrevrank key member:反排序,獲取當(dāng)前元素的排序zrevrank user u1 -
zcount key min max:指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù),min和max表示分?jǐn)?shù)的邊界zcount key 10 20
說明:正排序表示從小到大排序,分?jǐn)?shù)越大越靠后,反排序表示從大到小,分?jǐn)?shù)越高越靠前
redis全局命令
redis有一些全局命令是經(jīng)常被使用的,比如刪除、設(shè)置有效時(shí)間等。下面列出經(jīng)常使用的。
常用命令
-
del keys:根據(jù)key刪除,可以同時(shí)刪除多個(gè)del user:1 user:2 -
exists keys:判斷指定key是否存在exists user:1 -
flushdb:清空當(dāng)前的數(shù)據(jù)庫,redis本身把數(shù)據(jù)庫分為16個(gè)部分,從0~15,可以通過select命令切換數(shù)據(jù),flushdb是清空當(dāng)前所在的數(shù)據(jù)庫部分flushdb -
flushall:清空所有數(shù)據(jù)庫,將清除數(shù)據(jù)庫16個(gè)部分的所有數(shù)據(jù)flushall注意要分清楚
flushall和flushdb的區(qū)別,千萬不要用錯(cuò)了,否則就尷尬啦。 -
dbsize:查看當(dāng)前數(shù)據(jù)庫存在的key總數(shù)dbsize -
select index:切換到指定的數(shù)據(jù)庫,index可選值為0~15select 11 -
keys pattern:查詢當(dāng)前數(shù)據(jù)庫的所有keykeys * keys a* -
expire key seconds:設(shè)置指定key的有效時(shí)間,單位秒### 設(shè)置user:1有效時(shí)間為10秒,超過時(shí)間過期自動(dòng)刪除 expire user:1 10 -
ttl key:查看當(dāng)前key還有多長時(shí)間失效ttl user:1 -
type key:查看當(dāng)前key存儲(chǔ)數(shù)據(jù)的類型,類型有string、hash、set、zset、listtype user:1
總結(jié)
到這里基本的命令都寫完了,也都忘完了。在寫這些內(nèi)容參考了很多東西,有個(gè)騰訊云關(guān)于redis的說明,感覺很好,推薦給大家,可以參照一下。參考地址:https://cloud.tencent.com/developer/section/1374142
本文作者:程序猿楊鮑
版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處