redis簡單來說 就是一個數據庫,不過與傳統數據庫不同的是 redis 的數據是存在內存中的,所以存寫速度非常快,因此 redis 被廣泛應用於緩存方向。另外,redis 也經常用來做分佈式鎖。redis 提供了多種數據類型來支持不同的業務場景。除此之外,redis 支持事務 、持久化、LUA腳本、LRU驅動事件、多種集群方案。所以在面試中我們經常可以看到redis的身影,今天給大家帶來一道redis的面試真題以及解析,後面會給大家分享今年來redis常考試的一些真題。
面試官:redis 常見數據結構以及使用場景分析
1. String
常用命令: set,get,decr,incr,mget 等。
String數據結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。 常規key-value緩存應用; 常規計數:微博數,粉絲數等。
2.Hash
常用命令: hget,hset,hgetall 等。
Hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象,後續操作的時候,你可以直接僅僅修改這個對象中的某個字段的值。 比如我們可以Hash數據結構來存儲用戶信息,商品信息等等。比如下面我就用 hash 類型存放了我本人的一些信息:
3.List
常用命令: lpush,rpush,lpop,rpop,lrange等
list就是鏈表,Redis list的應用場景非常多,也是Redis最重要的數據結構之一,比如微博的關注列表,粉絲列表,消息列表等功能都可以用Redis的 list 結構來實現。
Redis list 的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷。
另外可以通過 lrange 命令,就是從某個元素開始讀取多少個元素,可以基於 list 實現分頁查詢,這個很棒的一個功能,基於 redis 實現簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。
4.Set
常用命令: sadd,spop,smembers,sunion 等
set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的。
當你需要存儲一個列表數據,又不希望出現重複數據時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。可以基於 set 輕易實現交集、並集、差集的操作。
比如:在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis可以非常方便的實現如共同關注、共同粉絲、共同喜好等功能。這個過程也就是求交集的過程,具體命令如下:
5.Sorted Set
常用命令: zadd,zrange,zrem,zcard等
和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列。
舉例: 在直播系統中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息,適合使用 Redis 中的 SortedSet 結構進行存儲。
常見resdis面試真題40道(含解析)
- 什麼是 Redis?
- Redis 的數據類型?
- 使用 Redis 有哪些好處?
- Redis 相比 Memcached 有哪些優勢?
- Memcache 與 Redis 的區別都有哪些?
- Redis 是單進程單線程的?
- 一個字符串類型的值能存儲最大容量是多少?
- Redis 的持久化機制是什麼?各自的優缺點?
- Redis 常見性能問題和解決方案:
- redis 過期鍵的刪除策略?
- Redis 的回收策略(淘汰策略)?
- 為什麼 edis 需要把所有數據放到內存中?
- Redis 的同步機制瞭解麼?
- Pipeline 有什麼好處,為什麼要用 pipeline?
- 是否使用過 Redis 集群,集群的原理是什麼?
- Redis 集群方案什麼情況下會導致整個集群不可用?
- Redis 支持的 Java 客戶端都有哪些?官方推薦用哪個?
- Jedis 與 Redisson 對比有什麼優缺點?
- Redis 如何設置密碼及驗證密碼?
- 說說 Redis 哈希槽的概念?
- Redis 集群的主從複製模型是怎樣的?
- Redis 集群會有寫操作丟失嗎?為什麼?
- Redis 集群之間是如何複製的?
- Redis 集群最大節點個數是多少?
- Redis 集群如何選擇數據庫?
- 怎麼測試 Redis 的連通性?
- 怎麼理解 Redis 事務?
- Redis 事務相關的命令有哪幾個?
- Redis key 的過期時間和永久有效分別怎麼設置?
- Redis 如何做內存優化?
- Redis 回收進程如何工作的?
- 都有哪些辦法可以降低 Redis 的內存使用情況呢?
- Redis 的內存用完了會發生什麼?
- 一個 Redis 實例最多能存放多少的 keys?List、Set、Sorted Set 他們最多能存放多少元素?
- MySQL 裡有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中的數據都是熱點數據?
- Redis 最適合的場景?
- 假如 Redis 裡面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的前綴開頭的,如果將它們全部找出來?
- 如果有大量的 key 需要設置同一時間過期,一般需要注意什麼?
- 使用過 Redis 做異步隊列麼,你是怎麼用的?
- 使用過 Redis 分佈式鎖麼,它是什麼回事?
總結:
由於解析過長沒有將所有的解析給大家列出來,除了40道redis面試真題,還有1000道spring,mybatis,MySQL,dubbo等等面試真題,需要完整解析和千道面試真題的朋友可以關注小編+轉發文章+私信【面試真題】獲取,最後祝大家能夠在新的一年找到自己心儀的工作。
閱讀更多 java高端開發 的文章