01.07 螞蟻金服Java研發崗二面:redis 常見數據結構以及使用場景分析

redis簡單來說 就是一個數據庫,不過與傳統數據庫不同的是 redis 的數據是存在內存中的,所以存寫速度非常快,因此 redis 被廣泛應用於緩存方向。另外,redis 也經常用來做分佈式鎖。redis 提供了多種數據類型來支持不同的業務場景。除此之外,redis 支持事務 、持久化、LUA腳本、LRU驅動事件、多種集群方案。所以在面試中我們經常可以看到redis的身影,今天給大家帶來一道redis的面試真題以及解析,後面會給大家分享今年來redis常考試的一些真題。

螞蟻金服Java研發崗二面: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 類型存放了我本人的一些信息:

螞蟻金服Java研發崗二面:redis 常見數據結構以及使用場景分析

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可以非常方便的實現如共同關注、共同粉絲、共同喜好等功能。這個過程也就是求交集的過程,具體命令如下:

螞蟻金服Java研發崗二面:redis 常見數據結構以及使用場景分析

5.Sorted Set

常用命令: zadd,zrange,zrem,zcard等

和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列。

舉例: 在直播系統中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息,適合使用 Redis 中的 SortedSet 結構進行存儲。

常見resdis面試真題40道(含解析)

  1. 什麼是 Redis?
  2. Redis 的數據類型?
  3. 使用 Redis 有哪些好處?
  4. Redis 相比 Memcached 有哪些優勢?
  5. Memcache 與 Redis 的區別都有哪些?
  6. Redis 是單進程單線程的?
  7. 一個字符串類型的值能存儲最大容量是多少?
  8. Redis 的持久化機制是什麼?各自的優缺點?
  9. Redis 常見性能問題和解決方案:
  10. redis 過期鍵的刪除策略?
  11. Redis 的回收策略(淘汰策略)?
  12. 為什麼 edis 需要把所有數據放到內存中?
  13. Redis 的同步機制瞭解麼?
  14. Pipeline 有什麼好處,為什麼要用 pipeline?
  15. 是否使用過 Redis 集群,集群的原理是什麼?
  16. Redis 集群方案什麼情況下會導致整個集群不可用?
  17. Redis 支持的 Java 客戶端都有哪些?官方推薦用哪個?
  18. Jedis 與 Redisson 對比有什麼優缺點?
  19. Redis 如何設置密碼及驗證密碼?
  20. 說說 Redis 哈希槽的概念?
  21. Redis 集群的主從複製模型是怎樣的?
  22. Redis 集群會有寫操作丟失嗎?為什麼?
  23. Redis 集群之間是如何複製的?
  24. Redis 集群最大節點個數是多少?
  25. Redis 集群如何選擇數據庫?
  26. 怎麼測試 Redis 的連通性?
  27. 怎麼理解 Redis 事務?
  28. Redis 事務相關的命令有哪幾個?
  29. Redis key 的過期時間和永久有效分別怎麼設置?
  30. Redis 如何做內存優化?
  31. Redis 回收進程如何工作的?
  32. 都有哪些辦法可以降低 Redis 的內存使用情況呢?
  33. Redis 的內存用完了會發生什麼?
  34. 一個 Redis 實例最多能存放多少的 keys?List、Set、Sorted Set 他們最多能存放多少元素?
  35. MySQL 裡有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中的數據都是熱點數據?
  36. Redis 最適合的場景?
  37. 假如 Redis 裡面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的前綴開頭的,如果將它們全部找出來?
  38. 如果有大量的 key 需要設置同一時間過期,一般需要注意什麼?
  39. 使用過 Redis 做異步隊列麼,你是怎麼用的?
  40. 使用過 Redis 分佈式鎖麼,它是什麼回事?
螞蟻金服Java研發崗二面:redis 常見數據結構以及使用場景分析

總結:

由於解析過長沒有將所有的解析給大家列出來,除了40道redis面試真題,還有1000道spring,mybatis,MySQL,dubbo等等面試真題,需要完整解析和千道面試真題的朋友可以關注小編+轉發文章+私信【面試真題】獲取,最後祝大家能夠在新的一年找到自己心儀的工作。


分享到:


相關文章: