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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

面试官问:你们项目中用Redis来干什么?

發布時間:2024/1/18 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试官问:你们项目中用Redis来干什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你好,我是田哥

面試中,被問到Redis問題的概率非常高,如果問一些理論性的問題,相信你只要背背八股文就能搞定,但,如果結合項目來問就沒那么好對付了。

這里給你推薦一個在線刷java面試題的神器:

woaijava.cc/mianshi/index

本文,咱們就來聊聊Redis的使用場景(如果你項目中沒有用到Redis,你看完下面的這些使用場景,你一定能編出幾個來),我給你準備了16種Redis使用場景:

緩存數據共享分布式、分布式鎖、全局 ID、計數器、限流、位統計購物車用戶消息時間線 timeline、消息隊列、抽獎、點贊、簽到、打卡商品標簽商品篩選、用戶關注、推薦模型、排行榜。

接下來,我們逐個分析:

1、緩存

作為Key-Value形態的內存數據庫,Redis 最先會被想到的應用場景便是作為數據緩存。而使用 Redis 緩存數據非常簡單,只需要通過string類型將序列化后的對象存起來即可,不過也有一些需要注意的地方:

必須保證不同對象的 key 不會重復,并且使 key 盡量短,一般使用類名(表名)加主鍵拼接而成。

選擇一個優秀的序列化方式也很重要,目的是提高序列化的效率和減少內存占用。?

2、數據共享分布式

因為 Redis 是分布式的獨立服務,可以在多個應用之間共享

例如:分布式Session

  • <dependency>?
  • <groupId>org.springframework.session</groupId>?
  • <artifactId>spring-session-data-redis</artifactId>?
  • </dependency>
  • 3、分布式鎖

    setnx方法,只有不存在時才能添加成功,返回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

    分庫分表的場景,一次性拿一段

    5、計數器

    int類型,incr方法

    例如:文章的閱讀量、微博點贊數、允許一定的延遲,先寫入Redis再定時同步到數據庫

    6、限流

    int類型,incr方法

    以訪問者的ip和其他信息作為key,訪問一次增加一次計數,超過次數則返回false

    7、位統計

    bitcount(1.6.6的bitmap數據結構介紹)

    字符是以8位二進制存儲的

  • set?k1?a
  • setbit?k1?6?1
  • setbit?k1?7?0
  • get?k1?
  • /*?6?7?代表的a的二進制位的修改
  • a?對應的ASCII碼是97,轉換為二進制數據是01100001
  • b?對應的ASCII碼是98,轉換為二進制數據是01100010
  • 因為bit非常節省空間(1 MB=8388608 bit),可以用來做大數據量的統計。
  • */
  • 例如:在線用戶統計,留存用戶統計

  • setbit?onlineusers?01?
  • setbit?onlineusers?11?
  • setbit?onlineusers?20
  • 支持按位與、按位或等等操作

  • BITOPANDdestkeykey[key...]?,對一個或多個 key 求邏輯并,并將結果保存到 destkey 。???????
  • BITOPORdestkeykey[key...]?,對一個或多個 key 求邏輯或,并將結果保存到 destkey 。?
  • BITOPXORdestkeykey[key...]?,對一個或多個 key 求邏輯異或,并將結果保存到 destkey 。?
  • BITOPNOTdestkeykey ,對給定 key 求邏輯非,并將結果保存到 destkey 。
  • 計算出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:商品數量。

    • +1:hincr。-1:hdecr。刪除:hdel。全選:hgetall。商品數:hlen。

    9、用戶消息時間線timeline

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

    10、消息隊列

    List提供了兩個阻塞的彈出操作:blpop/brpop,可以設置超時時間

    • blpop:blpop key1 timeout 移除并獲取列表的第一個元素,如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。

    • brpop:brpop key1 timeout 移除并獲取列表的最后一個元素,如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。

    上面的操作。其實就是java的阻塞隊列。學習的東西越多。學習成本越低

    • 隊列:先進先除:rpush blpop,左頭右尾,右邊進入隊列,左邊出隊列

    • 棧:先進后出:rpush brpop

    11、抽獎

    自帶一個隨機獲得值

    spop?myset

    12、點贊、簽到、打卡

    假如上面的微博ID是t1001,用戶ID是u3001

    用 like:t1001 來維護 t1001 這條微博的所有點贊用戶

    • 點贊了這條微博:sadd like:t1001 u3001

    • 取消點贊:srem like:t1001 u3001

    • 是否點贊:sismember like:t1001 u3001

    • 點贊的所有用戶:smembers like:t1001

    • 點贊數:scard like:t1001

    是不是比數據庫簡單多了。

    13、商品標簽

    老規矩,用 tags:i5001 來維護商品所有的標簽。

    • sadd tags:i5001 畫面清晰細膩

    • 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之間的,屏幕材質是LCD屏幕

    sinter?brand:apple?brand:ios?screensize:6.0-6.24?screentype:lcd

    15、用戶關注、推薦模型

    follow 關注 fans 粉絲

    相互關注:

    • sadd 1:follow 2

    • sadd 2:fans 1

    • sadd 1:fans 2

    • sadd 2:follow 1

    我關注的人也關注了他(取交集):

    • sinter 1:follow 2:fans

    可能認識的人:

    • 用戶1可能認識的人(差集):sdiff 2:follow 1:follow

    • 用戶2可能認識的人:sdiff 1:follow 2:follow

    16、排行榜

    id 為6001 的新聞點擊數加1:

    zincrby?hotNews:20190926?1?n6001

    獲取今天點擊最多的15條:

    zrevrange?hotNews:20190926?0?15?withscores

    最后,給你推薦一個刷java面試題的神器(已錄入1000多題):

    網站:www.woaijava.cc?(也可以文末左下角閱讀原文直接訪問)

    面經系列

    第一次面試,面完,直接拒了!

    深圳 | 1面 耗時 40多分鐘

    面試考代碼,居然翻車了!

    順豐面試,第二個問題把我勸退了!

    在線刷題,我成功入職 搜狐!

    精彩文章

    資料:秒殺系統設計,文檔、代碼和視頻

    用Spring Boot搞了個醫院項目,附源碼!

    海康 面試:說說MyBatis 插件機制

    50000多字,線程池源碼詳解!建議收藏

    手把手教:如何準備面試!

    dubbo源碼深度分析:62個文檔+中文注釋+流程圖+思維導圖

    來源:https://blog.csdn.net/o9109003234/article/details/128195932

    總結

    以上是生活随笔為你收集整理的面试官问:你们项目中用Redis来干什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。