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道(含解析)

  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 分布式锁么,它是什么回事?

 

总结:

由于解析过长没有将所有的解析给大家列出来,除了40道redis面试真题,还有1000道spring,mybatis,MySQL,dubbo等等面试真题,需要完整解析和千道面试真题的朋友可以关注小编+转发文章后扫描小编的二维码即可免费获取,最后祝大家能够在新的一年找到自己心仪的工作。

最后还给大家整理了面试文档,大家快看过来!!!