1. sorted_set 類型
- 新的存儲需求户辱,數(shù)據(jù)排序有利于數(shù)據(jù)的有效展示,需要提供一種可以根據(jù)自身特征進行排序的方式
- 需要的存儲結(jié)構(gòu):新的存儲模型,可以保存可排序的數(shù)據(jù)
- sorted_set類型:在set的存儲結(jié)構(gòu)基礎(chǔ)上添加可排序字段
2. sorted_set 類型數(shù)據(jù)的基本操作
2.1 操作
- 添加數(shù)據(jù)
zadd <key> <score1> <member1> [score2 member2]
- 獲取全部數(shù)據(jù)
zrange <key> <start> <stop? [withscores]
zrevrange <key> <start> <stop? [withscores]
- 刪除數(shù)據(jù)
zrem <key> <member> [member...]
- 按條件獲取數(shù)據(jù)
zrangebyscore <key> <min> <max> [withscores] [limit]
zrevrangebyscore <key> <min> <max> [withscores] [limit]
- 條件刪除數(shù)據(jù)
zremrangebyrank <key> <start> <stop>
zremrangebyscore <key> <min> <max>
- 獲取集合數(shù)據(jù)總量
zcard <key>
zcount <key> <min> <max>
- 集合交并操作
zinterstore <destination> <numkeys> <key> [key...]
zunionstore <destination> <numkeys> <key> [key...]
2.2 注意
- min與max用于限定搜索查詢的條件
- start與stop用于限定查詢范圍,作用于索引畜隶,表示開始和結(jié)束索引
- offset與count用于限定查詢范圍,作用于查詢結(jié)果号胚,表示開始位置和數(shù)據(jù)總量
3. sorted_set 類型數(shù)據(jù)的擴展操作
- 業(yè)務(wù)場景
- 票選廣東十大杰出青年,各類綜藝選修海選投票
- 各類資源網(wǎng)站TOP10(電影浸遗,歌曲猫胁,文檔,電商跛锌,游戲等)
= 聊天室活躍度統(tǒng)計 - 游戲好友親密度
- 解決方案
- 獲取數(shù)據(jù)對應(yīng)的索引(排名)
zrank <key> <member>
zrevrank <key> <member>
- score值獲取與修改
zscore <key> <member>
zincrby <key> <increment> <member>
4. sorted_set 類型數(shù)據(jù)操作的注意事項
- score保存的數(shù)據(jù)存儲空間是64位弃秆,整數(shù)范圍long型
- score保存的數(shù)據(jù)也可以是一個雙精度的double值,基于雙精度浮點數(shù)的特征髓帽,可能會丟失精度菠赚,使用時候要慎重
- sorted_set底層存儲還是基于set結(jié)構(gòu)的,因此數(shù)據(jù)不能重復(fù)郑藏,如果重復(fù)添加相同的數(shù)據(jù)衡查,scoe值將被反復(fù)覆蓋,保留最后一次修改的結(jié)果
5. sorted_set 類型應(yīng)用場景
-
業(yè)務(wù)場景
基礎(chǔ)服務(wù)+增值服務(wù)類網(wǎng)站會設(shè)定各類會員的試用必盖,讓用戶充分體驗會員優(yōu)勢拌牲。例如觀影試用VIP、游戲VIP體驗歌粥,云盤下載體驗VIP塌忽,數(shù)據(jù)查看體驗VIP。當(dāng)VIP體驗到期后失驶,如果有效管理此類信息土居。即便對于正式VIP用戶也存在對應(yīng)的管理方式。
網(wǎng)站會定期開始投票嬉探、討論擦耀。限時進行,逾期作廢涩堤。如何有效管理此類過期信息 解決方案
- 對于基于時間線限定的任務(wù)處理埂奈,將處理時間記錄為score值。利用排序功能區(qū)分處理的先后順序
- 記錄下一個要處理的時間定躏,當(dāng)?shù)狡诤筇幚韺?yīng)任務(wù)账磺,移除redis中的記錄芹敌,并記錄下一個要處理的時間
- 當(dāng)新任務(wù)加入時,判斷并更新當(dāng)前下一個要處理的任務(wù)時間
- 當(dāng)提升sorted_set的性能垮抗,通常將任務(wù)根據(jù)特征存儲為若干個sorted_set氏捞。例如1小時內(nèi),1天內(nèi)冒版,1周內(nèi)液茎,1月內(nèi),季內(nèi)辞嗡,年度等捆等。操作時逐級提升,將即將操作的若干個任務(wù)納入到1小時內(nèi)處理的隊列中
6. sorted_set 類型應(yīng)用場景3
- 業(yè)務(wù)場景
任務(wù)续室、消息權(quán)重設(shè)定應(yīng)用
當(dāng)任務(wù)或者消息待處理栋烤,形成了任務(wù)隊列或者消息隊列時,對于高優(yōu)先級的任務(wù)要保障對其優(yōu)先處理挺狰,如何實現(xiàn)任務(wù)權(quán)重管理
- 解決方案
- 對于帶有權(quán)重的任務(wù)明郭,優(yōu)先處理權(quán)重高的任務(wù),采用score記錄權(quán)重即可