最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis SDS字符串與集合的底層實(shí)現(xiàn)原理解析

 更新時(shí)間:2026年04月30日 08:47:35   作者:NE_STOP  
這篇文章給大家介紹了Redis SDS字符串與集合的底層實(shí)現(xiàn)原理解析,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

Set型Value操作命令

Set集合中的每一個(gè)元素都是String類型。

Set和List非常相似,但是Set是無序且不可重復(fù),而List則是有序可重復(fù)的。

Set集合的底層是value為null的hash表。正是如此,才保證了無序性和不可重復(fù)性。

  • sadd:將一個(gè)或多個(gè)元素加入到Set中,已經(jīng)存在的元素將被忽略

格式:sadd key member 【member...】

說明:如果key不存在,就創(chuàng)建一個(gè)只包含member元素作成員的集合。

  • smembers:返回集合key中的所有成員。
  • scard:返回Set的長度
  • sismember:判斷member元素是否是集合key的成員

格式:sismember key member

說明:如果是集合的成員返回1,不過不是,或者key不存在,就返回0

  • smove:將member元素從集合source 移動(dòng)到destination

格式:smove source destination member

說明:如果source 集合不存在,或者不包含指定的member元素,則不執(zhí)行任何操作,返回0

? 否則會(huì)從source中刪除member,并添加到destination,返回1。

? 如果destination已經(jīng)包含了member,那只是簡單的從source中刪除member。

  • srem:刪除指定集合的一個(gè)或多個(gè)元素
  • srandomember:隨機(jī)獲取集合中指定數(shù)量的元素,默認(rèn)1.

格式:srandomember key count

注意:如果count的數(shù)量大于集合中元素的個(gè)數(shù),就返回整個(gè)集合。

? 如果count為正數(shù),且小于集合長度,那么返回一個(gè)包含count個(gè)元素的數(shù)組,數(shù)組中的元素不重復(fù)。

? 如果count為負(fù)數(shù),那么返回一個(gè)包含count絕對(duì)值個(gè)元素的數(shù)組,數(shù)組中的元素可能會(huì)重復(fù)。

  • spop:移除并返回集合中的count個(gè)隨機(jī)元素。count必須是正數(shù),且默認(rèn)為1。如果count大于集合的長度,那么移除并返回整個(gè)集合。
  • sdiff/sdiffstore:返回集合差集。sdiff執(zhí)行的結(jié)果不會(huì)保存,只是臨時(shí)計(jì)算差集。sdiffstore 會(huì)保存這個(gè)差集到指定的集合中。

格式:sdiff key1 key2 (取集合key1和key2的差集)

格式:sdiffstore keyRes key1 key2 (取集合key1和key2的差集,并保存到keyRes)

  • sinter/sinterstore:返回集合交集
  • sunion/sunionstore:返回集合并集

應(yīng)用場(chǎng)景

動(dòng)態(tài)黑白名單

在服務(wù)器中設(shè)置用于控制訪問的黑名單。

將黑名單寫入Redis,只要客戶端來訪問,先在Redis中的黑名單查看客戶端IP是否存在,存在就拒絕訪問,否則訪問通過。

有限隨機(jī)數(shù)

有限隨機(jī)數(shù)是指返回的隨機(jī)數(shù)是基于某一集合范圍內(nèi)的隨機(jī)數(shù),例如抽獎(jiǎng)、隨機(jī)選人等。

通過spop或srandomember 實(shí)現(xiàn)從指定集合中隨機(jī)選出元素。

用戶畫像

用戶畫像就是為每個(gè)用戶自定義多個(gè)反應(yīng)該用戶特征的白哦去,這些標(biāo)簽可以使用sadd添加該用戶對(duì)應(yīng)的集合中。這些標(biāo)簽具有無序、不重復(fù)特征。

還可以使用sinter/sinterstore 根據(jù)用戶畫像的交集進(jìn)行好友推薦、商品推薦、客戶推薦等。

有序Set型value操作命令

有序Set中的每個(gè)元素都是String類型。

有序Set和Set的不同之處在于,有序Set中的每個(gè)元素都有一個(gè)分值score,Redis會(huì)根據(jù)score的值對(duì)集合進(jìn)行由小到大排序。

有序Set的元素不重復(fù),但元素的score可以重復(fù)。

由于該類型的命令都是z開頭,所以也稱作ZSet。

  • zadd:將一個(gè)或多個(gè)member元素及其score 值添加到ZSet中。

格式:zadd key score member [score member ...]

注意:score可以是整數(shù)或雙精度浮點(diǎn)數(shù)。

? 如果集合key不存在,就創(chuàng)建一個(gè)空的ZSet,并執(zhí)行Zadd操作。

? 如果寫入的member值存在,但score不同,新的score會(huì)覆蓋舊的score。

  • zrange和zrevrange:返回ZSet中,指定區(qū)間內(nèi)的成員。

格式:zrange key start stop [withscores] 或zrevrangekey start stop [withscores]

說明:zrange命令會(huì)按score值遞增排序。

? zrevrange命令會(huì)按score值遞減排序。

? 具有相同score值得成員按字典序/逆字典序排序。

? 可以通過使用withscores 選項(xiàng),來讓成員和它的score值一并返回。

? 當(dāng)start大于ZSet的最大下標(biāo),或者start>stop時(shí)(兩者同為正數(shù)或負(fù)數(shù)時(shí)),zrange命令會(huì)返回一個(gè)空列表。

? 當(dāng)stop大于ZSet的最大下標(biāo),那么Redis將stop當(dāng)作最大下標(biāo)處理。

如果集合中包含大量元素,該命令會(huì)阻塞Redis服務(wù),所以生產(chǎn)環(huán)境一般不使用該命令,而使用zscan代替。

  • zrangebyscore和zrevrangebyscore:返回ZSet中,指定score區(qū)間內(nèi)的成員。

格式:zrangebyscore key min max [withscores] [limit offset count]

? zrevrangebyscore key min max [withscores] [limit offset count]

說明:Zset按score遞增/遞減排序。

? 相同score按字典序/逆字典序排列。

? limit參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間。

? offset 表示從結(jié)果的某個(gè)下標(biāo)開始

? count表示截取元素的個(gè)數(shù)。

? 當(dāng)offset很大時(shí),定位offset的操作可能需要遍歷整個(gè)有序集,此過程效率可能會(huì)較低。

? min和max的取值是正負(fù)無窮大。區(qū)間的取值用閉區(qū)間,也可以給參數(shù)前加左括號(hào)“(”來使用開區(qū)間。

注意:如果使用zrevrangebyscore ,那么start必須大于stop。

# 按score 截取大于20 小于等于60,再從其結(jié)果的下標(biāo)3開始截取7個(gè)元素并返回。
zrangebyscore city (20 60 withscores limit 3 7
  • zcard:返回集合的長度。
  • zcount:返回Zset中,score值在min和max之間(包含min和max)的成員的數(shù)量。

格式:zcount key min max

  • zscore:返回ZSet中,指定元素的score值

格式:zscore key member

  • zincrby:在ZSet中,給指定元素的score加上具體的值

格式:zincrby key increment member

  • zrank和zrevrank:返回ZSet中,指定元素的排名名次(名次從0開始計(jì)算)

格式:zrank key member // 正序名次

? zrevrankkey member // 倒序名次

  • zrem:移除ZSet中,指定的一個(gè)或多個(gè)元素

格式:zrem key member [member...]

  • zremrangebyrank:移除ZSet中,名次在start和stop之間的元素(包含start和stop),0表示第一名,以此類推。

格式:zremrangebyrank key start stop

  • zremrangebyscore:移除ZSet中,score在min和max之間的元素(包含min和max)

格式:zremrangebyscore key min max

  • zrangebylex:該命令僅適用于集合中所有成員都具有相同score的情況。這時(shí)集合的元素會(huì)根據(jù)成員的字典序排序。如果集合里的成員有不同的score,那么和zrange 效果相同。

格式:zrangebylex key min max [limit offset count]

# 按字典序排序(因?yàn)閟core全部一樣),返回區(qū)間在[b,e)之間的成員。
zrangebylex ch [b (e
  • zlexcount:該命令僅適用于集合中所有成員都具有相同score的情況。返回集合中元素值本身(非score值)介于min和max范圍內(nèi)的元素?cái)?shù)量。

格式:zlexcount key min max

  • zremrangebylex:該命令僅適用于集合中所有成員都具有相同score的情況。移除集合中元素值本身(非score值)介于min和max范圍內(nèi)的元素?cái)?shù)量。

格式:zremrangebylex key min max

應(yīng)用場(chǎng)景

各種排行榜。例如音樂、視頻平臺(tái)的排行榜。將播放量作為score,進(jìn)行排序。

benchmark測(cè)試工具

Redis安裝完畢后會(huì)自動(dòng)安裝一個(gè)redis-benchmark測(cè)試工具,它是一個(gè)壓力測(cè)試工具,用于測(cè)試redis性能。

通過redis-benchmark -help 查看其用法。

redis-benchmark -c <clients> # 并行連接的客戶端數(shù)量,默認(rèn)50
redis-benchmark -n <requests> # 接收請(qǐng)求總數(shù),默認(rèn)100000
# 案例:測(cè)試并發(fā)100個(gè),2萬請(qǐng)求
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 20000
# 案例:測(cè)試并發(fā)100個(gè),2萬請(qǐng)求,指定測(cè)試命令set,lpush,sadd
redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush,sadd -c 100 -n 20000
# 案例:只查看測(cè)試報(bào)告結(jié)果,不看詳細(xì)內(nèi)容:-q
redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush,sadd -c 100 -n 20000 -q

到此這篇關(guān)于Redis--SDS字符串與集合的底層實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)Redis--SDS字符串與集合的底層實(shí)現(xiàn)原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis數(shù)據(jù)庫的應(yīng)用場(chǎng)景介紹

    Redis數(shù)據(jù)庫的應(yīng)用場(chǎng)景介紹

    這篇文章主要介紹了Redis數(shù)據(jù)庫的應(yīng)用場(chǎng)景介紹,本文講解了MySql+Memcached架構(gòu)的問題、Redis常用數(shù)據(jù)類型、Redis數(shù)據(jù)類型應(yīng)用和實(shí)現(xiàn)方式、Redis實(shí)際應(yīng)用場(chǎng)景等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • Redis SAVE命令不可用問題的原因和解決方案

    Redis SAVE命令不可用問題的原因和解決方案

    遇到 ERR unknown command 'SAVE' 錯(cuò)誤表明Redis 服務(wù)器配置中禁用了 SAVE 命令,這是一個(gè)安全特性,通常在生產(chǎn)環(huán)境中會(huì)被禁用,本文給大家詳細(xì)介紹了解決方案,需要的朋友可以參考下
    2025-07-07
  • 在redis中防止消息丟失的機(jī)制

    在redis中防止消息丟失的機(jī)制

    在項(xiàng)目中,由于網(wǎng)絡(luò)問題,我們很難保證生產(chǎn)者發(fā)送的消息能100%到達(dá)消息隊(duì)列服務(wù)器,也就是說有消息丟失的可能性,因 此,生產(chǎn)者就必須具有消息丟失檢測(cè)和重發(fā)機(jī)制,這篇文章主要介紹了如何在redis中防止消息丟失,需要的朋友可以參考下
    2023-02-02
  • redis中數(shù)據(jù)類型命令整理

    redis中數(shù)據(jù)類型命令整理

    在本篇文章里小編給大家整理的是關(guān)于redis中5種數(shù)據(jù)類型基本命令介紹,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • Redis實(shí)現(xiàn)商品秒殺的示例代碼

    Redis實(shí)現(xiàn)商品秒殺的示例代碼

    本文主要介紹了Redis實(shí)現(xiàn)商品秒殺的示例代碼,詳細(xì)介紹了Redis的List、Set和Hash類型,以及使用Redis事務(wù)保證原子性的方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 詳解redis緩存與數(shù)據(jù)庫一致性問題解決

    詳解redis緩存與數(shù)據(jù)庫一致性問題解決

    這篇文章主要介紹了詳解redis緩存與數(shù)據(jù)庫一致性問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Redis緩存穿透/擊穿工具類的封裝

    Redis緩存穿透/擊穿工具類的封裝

    在實(shí)際生產(chǎn)環(huán)境中,緩存的使用規(guī)范也是一直備受重視的,如果使用的不好,很容易就遇到緩存擊穿、雪崩等嚴(yán)重異常情景。本文為大家準(zhǔn)備了Redis緩存穿透/擊穿工具類的封裝,需要的可以參考一下
    2022-07-07
  • 監(jiān)聽Redis實(shí)時(shí)數(shù)據(jù)變化實(shí)現(xiàn)過程

    監(jiān)聽Redis實(shí)時(shí)數(shù)據(jù)變化實(shí)現(xiàn)過程

    本文介紹了通過定時(shí)遍歷Redis并對(duì)比緩存Map,實(shí)現(xiàn)監(jiān)聽指定前綴鍵的value變化的方法,并簡要提及了可用Keyspace通知等更高效的手段
    2025-10-10
  • Redis 的查詢很快的原因解析及Redis 如何保證查詢的高效

    Redis 的查詢很快的原因解析及Redis 如何保證查詢的高效

    由于redis是內(nèi)存數(shù)據(jù)庫,歸功于它的數(shù)據(jù)結(jié)構(gòu)所以查詢效率非常高,今天通過本文給大家介紹下Redis 的查詢很快的原因解析及Redis 如何保證查詢的高效,感興趣的朋友一起看看吧
    2022-03-03
  • Redis迷你版微信搶紅包實(shí)戰(zhàn)

    Redis迷你版微信搶紅包實(shí)戰(zhàn)

    本文主要介紹了Redis迷你版微信搶紅包實(shí)戰(zhàn)
    2025-05-05

最新評(píng)論

龙里县| 来凤县| 安仁县| 上林县| 历史| 体育| 汕头市| 巨野县| 沂源县| 且末县| 金塔县| 陕西省| 乃东县| 浦东新区| 泰州市| 满城县| 甘孜| 徐汇区| 来宾市| 嘉义市| 慈溪市| 邓州市| 凤山县| 盐亭县| 石屏县| 陇川县| 沙湾县| 壶关县| 临沭县| 洛阳市| 常德市| 沂南县| 清水河县| 遂川县| 镇巴县| 全州县| 来凤县| 孝昌县| 龙江县| 晋州市| 白河县|