面试官问:你们项目中用Redis来干什么?
你好,我是田哥
面試中,被問到Redis問題的概率非常高,如果問一些理論性的問題,相信你只要背背八股文就能搞定,但,如果結合項目來問就沒那么好對付了。
這里給你推薦一個在線刷java面試題的神器:
woaijava.cc/mianshi/index
本文,咱們就來聊聊Redis的使用場景(如果你項目中沒有用到Redis,你看完下面的這些使用場景,你一定能編出幾個來),我給你準備了16種Redis使用場景:
緩存、數據共享分布式、分布式鎖、全局 ID、計數器、限流、位統計、購物車、用戶消息時間線 timeline、消息隊列、抽獎、點贊、簽到、打卡、商品標簽、商品篩選、用戶關注、推薦模型、排行榜。
接下來,我們逐個分析:
1、緩存
作為Key-Value形態的內存數據庫,Redis 最先會被想到的應用場景便是作為數據緩存。而使用 Redis 緩存數據非常簡單,只需要通過string類型將序列化后的對象存起來即可,不過也有一些需要注意的地方:
必須保證不同對象的 key 不會重復,并且使 key 盡量短,一般使用類名(表名)加主鍵拼接而成。
選擇一個優秀的序列化方式也很重要,目的是提高序列化的效率和減少內存占用。?
2、數據共享分布式
因為 Redis 是分布式的獨立服務,可以在多個應用之間共享
例如:分布式Session
3、分布式鎖
setnx方法,只有不存在時才能添加成功,返回true
4、全局ID
int類型,incrby,利用原子性
incrby userid 1000
分庫分表的場景,一次性拿一段
5、計數器
int類型,incr方法
例如:文章的閱讀量、微博點贊數、允許一定的延遲,先寫入Redis再定時同步到數據庫
6、限流
int類型,incr方法
以訪問者的ip和其他信息作為key,訪問一次增加一次計數,超過次數則返回false
7、位統計
bitcount(1.6.6的bitmap數據結構介紹)
字符是以8位二進制存儲的
例如:在線用戶統計,留存用戶統計
支持按位與、按位或等等操作
計算出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?myset12、點贊、簽到、打卡
假如上面的微博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、商品篩選
假如:iPhone11 上市了
賽選商品,蘋果的、ios的、屏幕在6.0-6.24之間的,屏幕材質是LCD屏幕
sinter?brand:apple?brand:ios?screensize:6.0-6.24?screentype:lcd15、用戶關注、推薦模型
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来干什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【文献阅读】Applications o
- 下一篇: 几款主流SDR对比
