<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一口氣說(shuō)出 Redis 16 個(gè)常見(jiàn)使用場(chǎng)景

          共 3300字,需瀏覽 7分鐘

           ·

          2022-02-28 09:50

          往期熱門文章:

          1、監(jiān)控員工離職傾向系統(tǒng)已被下架,網(wǎng)友:勸你善良
          2、同事說(shuō),我寫Java代碼像寫詩(shī)
          3、阿里p7和副處級(jí)干部選哪個(gè)?
          4、2021年互聯(lián)網(wǎng)公司“死亡”名單!2022 年跳槽一定要謹(jǐn)慎些!
          5、京東程序員離職怒刪代碼被判10個(gè)月,京東到家請(qǐng)人花三萬(wàn)恢復(fù)!

          目錄
          • 緩存
          • 數(shù)據(jù)共享分布式
          • 分布式鎖
          • 全局ID
          • 計(jì)數(shù)器
          • 限流
          • 位統(tǒng)計(jì)
          • 購(gòu)物車
          • 用戶消息時(shí)間線timeline
          • 消息隊(duì)列
          • 抽獎(jiǎng)
          • 點(diǎn)贊、簽到、打卡
          • 商品標(biāo)簽
          • 商品篩選
          • 用戶關(guān)注、推薦模型
          • 排行榜

          1、緩存

          String類型
          例如:熱點(diǎn)數(shù)據(jù)緩存(例如報(bào)表、明星出軌),對(duì)象緩存、全頁(yè)緩存、可以提升熱點(diǎn)數(shù)據(jù)的訪問(wèn)數(shù)據(jù)。

          2、數(shù)據(jù)共享分布式

          String 類型,因?yàn)?Redis 是分布式的獨(dú)立服務(wù),可以在多個(gè)應(yīng)用之間共享
          例如:分布式Session
          <dependency>?
          ?<groupId>org.springframework.sessiongroupId>?
          ?<artifactId>spring-session-data-redisartifactId>?
          dependency>

          3、分布式鎖

          String 類型setnx方法,只有不存在時(shí)才能添加成功,返回true
          public?static?boolean?getLock(String?key)?{
          ????Long?flag?=?jedis.setnx(key,?"1");
          ????if?(flag?==?1)?{
          ????????jedis.expire(key,?10);
          ????}
          ????return?flag?==?1;
          }

          public?static?void?releaseLock(String?key)?{
          ????jedis.del(key);
          }

          4、全局ID

          int類型,incrby,利用原子性
          incrby userid 1000
          分庫(kù)分表的場(chǎng)景,一次性拿一段

          5、計(jì)數(shù)器

          int類型,incr方法
          例如:文章的閱讀量、微博點(diǎn)贊數(shù)、允許一定的延遲,先寫入Redis再定時(shí)同步到數(shù)據(jù)庫(kù)

          6、限流

          int類型,incr方法
          以訪問(wèn)者的ip和其他信息作為key,訪問(wèn)一次增加一次計(jì)數(shù),超過(guò)次數(shù)則返回false

          7、位統(tǒng)計(jì)

          String類型的bitcount(1.6.6的bitmap數(shù)據(jù)結(jié)構(gòu)介紹)
          字符是以8位二進(jìn)制存儲(chǔ)的
          set?k1?a
          setbit?k1?6?1
          setbit?k1?7?0
          get?k1?
          /*?6?7?代表的a的二進(jìn)制位的修改
          a?對(duì)應(yīng)的ASCII碼是97,轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)是01100001
          b?對(duì)應(yīng)的ASCII碼是98,轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)是01100010

          因?yàn)閎it非常節(jié)省空間(1 MB=8388608 bit),可以用來(lái)做大數(shù)據(jù)量的統(tǒng)計(jì)。
          */

          例如:在線用戶統(tǒng)計(jì),留存用戶統(tǒng)計(jì)
          setbit?onlineusers?01?
          setbit?onlineusers?11?
          setbit?onlineusers?20
          支持按位與、按位或等等操作
          BITOPANDdestkeykey[key...]?,對(duì)一個(gè)或多個(gè) key 求邏輯并,并將結(jié)果保存到 destkey 。???????
          BITOPORdestkeykey[key...]?,對(duì)一個(gè)或多個(gè) key 求邏輯或,并將結(jié)果保存到 destkey 。?
          BITOPXORdestkeykey[key...]?,對(duì)一個(gè)或多個(gè) key 求邏輯異或,并將結(jié)果保存到 destkey 。?
          BITOPNOTdestkeykey ,對(duì)給定 key 求邏輯非,并將結(jié)果保存到 destkey 。
          計(jì)算出7天都在線的用戶
          BITOP?"AND"?"7_days_both_online_users"?"day_1_online_users"?"day_2_online_users"?...??"day_7_online_users"

          8、購(gòu)物車

          String 或hash。所有String可以做的hash都可以做
          • key:用戶id;field:商品id;value:商品數(shù)量。
          • +1:hincr。-1:hdecr。刪除:hdel。全選:hgetall。商品數(shù):hlen。

          9、用戶消息時(shí)間線timeline

          list,雙向鏈表,直接作為timeline就好了。插入有序

          10、消息隊(duì)列

          List提供了兩個(gè)阻塞的彈出操作:blpop/brpop,可以設(shè)置超時(shí)時(shí)間
          • blpop:blpop key1 timeout 移除并獲取列表的第一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
          • brpop:brpop key1 timeout 移除并獲取列表的最后一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
          上面的操作。其實(shí)就是java的阻塞隊(duì)列。學(xué)習(xí)的東西越多。學(xué)習(xí)成本越低
          • 隊(duì)列:先進(jìn)先除:rpush blpop,左頭右尾,右邊進(jìn)入隊(duì)列,左邊出隊(duì)列
          • 棧:先進(jìn)后出:rpush brpop

          11、抽獎(jiǎng)

          自帶一個(gè)隨機(jī)獲得值
          spop?myset

          12、點(diǎn)贊、簽到、打卡

          假如上面的微博ID是t1001,用戶ID是u3001
          用 like:t1001 來(lái)維護(hù) t1001 這條微博的所有點(diǎn)贊用戶
          • 點(diǎn)贊了這條微博:sadd like:t1001 u3001
          • 取消點(diǎn)贊:srem like:t1001 u3001
          • 是否點(diǎn)贊:sismember like:t1001 u3001
          • 點(diǎn)贊的所有用戶:smembers like:t1001
          • 點(diǎn)贊數(shù):scard like:t1001
          是不是比數(shù)據(jù)庫(kù)簡(jiǎn)單多了。

          13、商品標(biāo)簽

          老規(guī)矩,用 tags:i5001 來(lái)維護(hù)商品所有的標(biāo)簽。
          • sadd tags:i5001 畫面清晰細(xì)膩
          • sadd tags:i5001 真彩清晰顯示屏
          • sadd tags:i5001 流程至極

          14、商品篩選

          //?獲取差集
          sdiff?set1?set2
          //?獲取交集(intersection?)
          sinter?set1?set2
          //?獲取并集
          sunion?set1?set2
          假如:iPhone11 上市了
          sadd?brand:apple?iPhone11

          sadd?brand:ios?iPhone11

          sad?screensize:6.0-6.24?iPhone11

          sad?screentype:lcd?iPhone?11
          賽選商品,蘋果的、ios的、屏幕在6.0-6.24之間的,屏幕材質(zhì)是LCD屏幕
          sinter?brand:apple?brand:ios?screensize:6.0-6.24?screentype:lcd

          15、用戶關(guān)注、推薦模型

          follow 關(guān)注 fans 粉絲
          相互關(guān)注:
          • sadd 1:follow 2
          • sadd 2:fans 1
          • sadd 1:fans 2
          • sadd 2:follow 1
          我關(guān)注的人也關(guān)注了他(取交集):
          • sinter 1:follow 2:fans
          可能認(rèn)識(shí)的人:
          • 用戶1可能認(rèn)識(shí)的人(差集):sdiff 2:follow 1:follow
          • 用戶2可能認(rèn)識(shí)的人:sdiff 1:follow 2:follow

          16、排行榜

          id 為6001 的新聞點(diǎn)擊數(shù)加1:
          zincrby hotNews:20190926 1 n6001
          獲取今天點(diǎn)擊最多的15條:
          zrevrange hotNews:20190926 0 15 withscores
          轉(zhuǎn)自:網(wǎng)絡(luò)

          往期熱門文章:

          1、滴滴程序員被親戚鄙視:年薪八十萬(wàn)還不如二本教書(shū)的...
          2、IT界驚現(xiàn)文豪!華為領(lǐng)導(dǎo)及阿里P10遭吐槽

          3、上海地鐵乘車碼“變紅”,嚇倒一眾乘客,官方:為營(yíng)造節(jié)日氣氛……
          4Spring Boot 項(xiàng)目打成 .exe 程序?實(shí)戰(zhàn)來(lái)了!
          5Spring Boot太重,Vert.x真香!
          6中美程序員不完全對(duì)比
          7、Spring Boot 3.0 M1 發(fā)布,正式棄用 Java 8,最低要求 Java 17。。。
          8、一個(gè)“扛住100億次請(qǐng)求”的春晚紅包系統(tǒng)
          9、你覺(jué)得HTTPS能防止重放攻擊嗎?
          10、數(shù)據(jù)一致性,為什么不推薦雙寫?

          瀏覽 19
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品自在拍在线拍 | 男男精品一区二区三区 | 人人看人人爱人人摸 | 爱爱网官方登录网站入口 | 日本A片黄色 |