1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        面試官:說下你項(xiàng)目中 Redis 常見使用場(chǎng)景

        共 3211字,需瀏覽 7分鐘

         ·

        2022-01-09 02:53


        下面分享16個(gè)Redis常用使用場(chǎng)景


        目錄

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

        1、緩存

        String類型

        例如:熱點(diǎn)數(shù)據(jù)緩存(例如報(bào)表、明星出軌),對(duì)象緩存、全頁緩存、可以提升熱點(diǎn)數(shù)據(jù)的訪問數(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

        分庫分表的場(chǎng)景,一次性拿一段

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

        int類型,incr方法

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

        6、限流

        int類型,incr方法

        以訪問者的ip和其他信息作為key,訪問一次增加一次計(jì)數(shù),超過次數(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),可以用來做大數(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、購物車

        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è)元素,如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
        • brpop:brpop key1 timeout 移除并獲取列表的最后一個(gè)元素,如果列表沒有元素會(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 來維護(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ù)庫簡(jiǎn)單多了。

        13、商品標(biāo)簽

        老規(guī)矩,用 tags:i5001 來維護(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)自:菜鳥編程98K
        鏈接:https://blog.csdn.net/qq_39938758/article/details/105577370


        程序汪資料鏈接

        程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理

        Java項(xiàng)目分享 最新整理全集,找項(xiàng)目不累啦 06版

        堪稱神級(jí)的Spring Boot手冊(cè),從基礎(chǔ)入門到實(shí)戰(zhàn)進(jìn)階

        臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開放下載!

        臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!

        字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開放下載!

        尚硅谷Java學(xué)科全套教程(總207.77GB)


        歡迎添加程序汪個(gè)人微信 itwang007? 進(jìn)粉絲群或圍觀朋友圈

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产干屄| 欧美成a人亚洲精品无码 | 国内自拍偷拍第一页 | 成人无码18 在线观看 | 精品成人无码麻豆 | 中文字幕第666 页 | 四虎精品一区二区三区 | 大屌干视频 | zzji欧美成熟丰满 | 肏屄屄网|