日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis系列六、redis的五种数据结构和相关指令之Sorted Set

發(fā)布時(shí)間:2024/7/23 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis系列六、redis的五种数据结构和相关指令之Sorted Set 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本節(jié)中將介紹Redis支持的主要數(shù)據(jù)結(jié)構(gòu),以及相關(guān)的常用Redis命令。redis是一種基于鍵值對(duì)(key-value)的內(nèi)存數(shù)據(jù)庫,redis數(shù)據(jù)結(jié)構(gòu)可以分為string、hash、list、set、sorted set。

redis的五種數(shù)據(jù)結(jié)構(gòu)和相關(guān)指令之有序集合sorted set

有序集合sorted set

有序集合與集合一樣,元素都不能重復(fù);Sorted Set中的每個(gè)元素都需要指派一個(gè)分?jǐn)?shù)(score),Sorted Set會(huì)根據(jù)score對(duì)元素進(jìn)行升序排序。如果多個(gè)member擁有相同的score,則以字典序進(jìn)行升序排序。
常用于排行榜,如視頻網(wǎng)站需要對(duì)用戶上傳視頻做排行榜,或點(diǎn)贊數(shù)與集合有聯(lián)系,不能有重復(fù)的成員。


與LIST和SET對(duì)比

?

1、常用命令

?

2、增刪指令

添加指令

zadd key [NX|XX] [CH] [INCR] score member [score member…]

XX: 僅僅更新存在的成員,不添加新成員。

NX: 不更新存在的成員。只添加新成員。

CH: 修改返回值為發(fā)生變化的成員總數(shù),原始是返回新添加成員的總數(shù) (CH 是 changed 的意思)。更改的元素是新添加的成員,已經(jīng)存在的成員更新分?jǐn)?shù)。 所以在命令中指定的成員有相同的分?jǐn)?shù)將不被計(jì)算在內(nèi)。注:在通常情況下,ZADD返回值只計(jì)算新添加成員的數(shù)量,注意: 如果和incr一起使用的時(shí)候,返回的會(huì)是incr的結(jié)果。

INCR: 當(dāng)ZADD指定這個(gè)選項(xiàng)時(shí),成員的操作就等同ZINCRBY命令,對(duì)成員的分?jǐn)?shù)進(jìn)行遞增操作。

zadd user:3 200 james //james的點(diǎn)贊數(shù)1, 返回操作成功的條數(shù)1 zadd user:3 200 james 120 mike 100 lee// 返回3zadd test:1 nx 100 james ? //鍵test:1必須不存在,主用于添加 zadd test:1 xx incr 200 james ? //鍵test:1必須存在,主用于修改,此時(shí)為300 zadd test:1 xx ch incr -299 james //返回操作結(jié)果1,300-299=1 zrange test:1 0 -1 withscores ?//查看點(diǎn)贊(分?jǐn)?shù))與成員名

增加分?jǐn)?shù)

zincrby user:3 10 lee ? ? //成員lee的分?jǐn)?shù)加10 zadd user:3 xx incr 10 lee //和上面效果一樣

刪除指令

zrem user:zan jame mike //返回成功刪除2個(gè)成員,還剩lee


刪除指定排名內(nèi)的升序元素:

zremrangebyrank user:3 0 1 //分?jǐn)?shù)升序排列,刪除第0個(gè)與第1個(gè),只剩james


刪除指定分?jǐn)?shù)范圍的成員

zadd user:5 200 james 120 mike 100 lee//先插入測(cè)試數(shù)據(jù) zremrangebyscore user:5 100 300 ? ? //刪除分?jǐn)?shù)在100與300范圍的成員 zremrangebyscore user:5 (100 +inf ? ?//刪除分?jǐn)?shù)大于100(不包括100),還剩lee

3、查看指令

查看分?jǐn)?shù)

zscore user:3 james ? ? //查看james的點(diǎn)贊數(shù)(分?jǐn)?shù)),返回200

查看排名

zrank user:3 james ?//返回名次:第3名返回2,從0開始到2,共3名 zrevrank user:3 james //返回0, 反排序,點(diǎn)贊數(shù)越高,排名越前

返回指定排名范圍的分?jǐn)?shù)與成員

zadd user:4 200 james 120 mike 100 lee//先插入數(shù)據(jù) zrange user:4 0 -1 withscores //返回結(jié)果如下圖

zrevrange user:4 0 -1 withscores ? //倒序,結(jié)果如下圖


返回指定分?jǐn)?shù)范圍的成員

zrangebyscore user:4 110 300 withscores //返回120 lee ,200 James, 由低到高? zrevrangebyscore user:4 300 110 withscores //返回200james 120lee,由高到低zrangebyscore user:4 (110 +inf withscores//110到無限大,120mike 200james? zrevrangebyscore user:4 (110 -inf withscores//無限小到110,返回100 lee

返回指定分?jǐn)?shù)范圍的成員個(gè)數(shù):

zcount user:4 110 300 ?//返回2,由mike120和james200兩條數(shù)據(jù)

統(tǒng)計(jì)成員數(shù)量

zcard test:1 ? ? //計(jì)算成員個(gè)數(shù), 返回1


4、有序集合交集

格式:

zinterstore destination numkeys key ... [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

destination:交集產(chǎn)生新的元素存儲(chǔ)鍵名稱。
numkeys: 要做交集計(jì)算的鍵個(gè)數(shù),匹配不上會(huì)有語法錯(cuò)誤,會(huì)執(zhí)行不了。
key :元素鍵值。
weights:每個(gè)被選中的鍵對(duì)應(yīng)值乘weight, 默認(rèn)為1。
初始化數(shù)據(jù):

zadd user:7 1 james 2 mike 4 jack 5 kate ? ? ?//初始化user:7數(shù)據(jù) zadd user:8 3 james 4 mike 4 lucy 2 lee ?6 jim ?//初始化user:8數(shù)據(jù)

交集例子:

?zinterstore user_jj 2 user:7 user:8 aggregate sum //2代表鍵合并個(gè)數(shù), //aggregate sum可加也不可加上,因?yàn)槟J(rèn)是sum //結(jié)果user_jj:4james(1+3), 6mike(2+4)?zinterstore user_jjmax 2 user:7 user:8 aggregate max 或min? //取交集最大的分?jǐn)?shù),返回結(jié)果 3james ?4mike, min取最小

weights的使用:

zinterstore user_jjweight 2 user:7 user:8 weights 8 4 aggregate max //1,取兩個(gè)成員相同的交集,user:7->1 james ?2 mike; ?user:8->3 james ?4 mike //2,將user:7->james 1*8=8, ?user:7->mike 2*8 =16, 最后user:7結(jié)果 8 james ?16 mike;? //3,將user:8-> james 3*4=12, user:8->mike 4*4=16,最后user:8結(jié)果12 james ?16 mike //4,最終相乘后的結(jié)果,取最大值為 ?12 james 16mike //5, zrange user_jjweight 0 -1 withscores 查詢結(jié)果為 ?12 james 16mike


5、有序集合并集(合并去重)

格式:

zunionstore destination numkeys key ... [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

destination:交集產(chǎn)生新的元素存儲(chǔ)鍵名稱
numkeys: 要做交集計(jì)算的鍵個(gè)數(shù) key :元素鍵值
weights:每個(gè)被選中的鍵對(duì)應(yīng)值乘weight, 默認(rèn)為1
eg:

zunionstore user_jjweight2 2 user:7 user:8 weights 8 4 aggregate max //與以上zinterstore一樣,只是取并集,指令一樣


6、有序集合應(yīng)用場(chǎng)景

排行榜系統(tǒng),如視頻網(wǎng)站需要對(duì)用戶上傳的視頻做排行榜
點(diǎn)贊數(shù):

zadd user:1:20180106 3 mike ?//mike獲得3個(gè)贊

再獲一贊:

zincrby user:1:20180106 1 mike ?//在3的基礎(chǔ)上加1

用戶作弊,將用戶從排行榜刪掉:

zrem user:1:20180106 mike

展示贊數(shù)最多的5個(gè)用戶:

zrevrangebyrank user:1:20180106 ?0 ?4?

查看用戶贊數(shù)與排名:

zscore user:1:20180106 mike ?? zrank user:1:20180106 mike


————————————————
版權(quán)聲明:本文為CSDN博主「lingengy」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/w1lgy/article/details/84377092

總結(jié)

以上是生活随笔為你收集整理的Redis系列六、redis的五种数据结构和相关指令之Sorted Set的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。