最新Redis面试题,附答案

我把所有Java相关的面试题和答案都整理成了PDF,并且带书签目录,阅读起来非常方便

面试题及答案PDF下载https://www.hicxy.com/2645.html

面试题及答案PDF下载https://www.hicxy.com/2645.html

面试题及答案PDF下载https://www.hicxy.com/2645.html

1. redis 过期策略都有哪些?LRU 算法知道吗?

过期策略:

定时过期(一 key 一定时器),惰性过期:只有使用 key 时才判断 key 是否已过期,过期则清除。定期过期:前两者折中。

LRU:new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTORY, true);//第三个参数置为 true,代表 linkedlist 按访问顺序排序,可作为 LRU 缓存;设为 false 代表按插入顺序排序,可作为 FIFO 缓存

LRU 算法实现:

1.通过双向链表来实现,新数据插入到链表头部;

2.每当缓存命中(即缓存数据被访问),则将数据移到链表头部;

3.当链表满的时候,将链表尾部的数据丢弃。

LinkedHashMap:HashMap 和双向链表合二为一即是 LinkedHashMap。HashMap 是无序的,LinkedHashMap 通过维护一个额外的双向链表保证了迭代顺序。该迭代顺序可以是插入顺序(默认),也可以是访问顺序。

2. Redis的内存用完了会发生什么?

如果达到设置的上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将Redis当缓存来使用配置淘汰机制,当Redis达到内存上限时会冲刷掉旧的内容。

3. Reids的特点

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。

比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。

Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

4. Redis 有哪些适合的场景?

1、会话缓存(Session Cache)

最常用的一种使用 Redis 的情景是会话缓存(sessioncache),用 Redis 缓存会话比其他存储(如Memcached)的优势在于:Redis 提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用 Redis 来缓存会话的文档。甚至广为人知的商业平台 Magento 也提供 Redis 的插件。

2、全页缓存(FPC)

除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。回到一致性问题,即使重启了 Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似 PHP 本地FPC。

再次以 Magento 为例,Magento 提供一个插件来使用 Redis 作为全页缓存后端。

此外,对 WordPress 的用户来说,Pantheon 有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

3、队列

Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis 能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如 Python)对 list 的 push/pop操作。

如果你快速的在 Google 中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用 Redis 创建非常好的后端工具,以满足各种队列需求。例如,Celery 有一个后台就是使用Redis 作为 broker,你可以从这里去查看。

4、排行榜/计数器

Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(SortedSet)也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。

所以,我们要从排序集合中获取到排名最靠前的 10 个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:

ZRANGE user_scores 0 10 WITHSCORESAgora Games 就是一个很好的例子,用 Ruby 实现的,它的排行榜就是使用 Redis 来存储数据的,你可以在这里看到。

5、发布/订阅

最后(但肯定不是最不重要的)是 Redis 的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用 Redis 的发布/订阅功能来建立聊天系统!

5. Redis 集群如何选择数据库?

Redis 集群目前无法做数据库选择,默认在 0 数据库。

后面的问题,大家可以先自己独立思考一下。

另外我把所有Java相关的面试题和答案都整理出来了,给大家参考一下

面试题及答案PDF下载https://www.hicxy.com/2645.html

面试题及答案PDF下载https://www.hicxy.com/2645.html

面试题及答案PDF下载https://www.hicxy.com/2645.html

6. Redis持久化数据和缓存怎么做扩容?

7. Redis 集群的主从复制模型是怎样的?

8. Redis 如何做内存优化?

9. 使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?

10. 为什么要做Redis分区?

11. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

12. 锁互斥机制

13. Reids三种不同删除策略

14. 什么是 Redis?简述它的优缺点?

15. Redis 内部结构

16. 知道 redis 的持久化吗?底层如何实现的?有什么优点缺点?

17. Redis为什么这么快

18. Redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)

19. watch dog 自动延期机制

20. Redis事务支持隔离性吗

21. 生产环境中的 redis 是怎么部署的?

22. 都有哪些办法可以降低Redis的内存使用情况呢?

23. Redis 集群方案应该怎么做?都有哪些方案?

24. Redis中数据库默认是多少个db即作用?

25. Redis 为什么是单线程的

26. 一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?

27. Redis 集群最大节点个数是多少?

28. Redis 官方为什么不提供 Windows 版本?

29. Redis事务其他实现

30. Redis与其他key-value存储有什么不同?

31. Redis事务

32. 如何选择合适的持久化方式?

33. 在选择缓存时,什么时候选择 redis,什么时候选择 memcached?

34. 缓存雪崩和缓存穿透问题解决方案

35. Redis有哪些优缺点

36. Redis 集群方案应该怎么做?都有哪些方案?

37. 分布式Redis是前期做还是后期规模上来了再做好?为什么?

38. Redis 主要消耗什么物理资源?

39. Redis 与 memcached 相比有哪些优势?

40. 为什么Redis的操作是原子性的,怎么保证原子性的?

41. 如何保证缓存与数据库双写时的数据一致性?

42. 说说 Redis 哈希槽的概念?

43. Redis 支持哪几种数据类型?

44. Redis事务的概念

45. 使用方式

46. MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?

47. Redis分区有什么缺点?

48. 你知道有哪些Redis分区实现方案?

49. Redis 回收进程如何工作的?

50. 对于大量的请求怎么样处理

51. Redis 集群会有写操作丢失吗?为什么?

52. redis 常见数据结构以及使用场景分析

53. 为什么要用 redis/为什么要用缓存

54. Redis是单线程的,如何提高多核CPU的利用率?

55. Redis 集群之间是如何复制的?

56. 使用redis有哪些好处?

57. 事务管理(ACID)概述

58. Redis 事务相关的命令有哪几个?

59. Redis的过期键的删除策略

60. 定期删除策略

61. Redis的过期策略以及内存淘汰机制

62. 使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别?

63. Redis 如何实现延时队列

64. Redis key 的过期时间和永久有效分别怎么设置?

65. 为什么 Redis 需要把所有数据放到内存中?

66. 怎么理解 Redis 事务?

67. Redis有哪些适合的场景?

68. Redis常用管理命令

69. 为什么redis需要把所有数据放到内存中?

70. Redis的内存占用情况怎么样?

71. Redis 的数据淘汰策略有哪些

72. 定时删除策略

73. Redis key的过期时间和永久有效分别怎么设置?

74. Redis 到底是怎么实现“附近的人”

75. 一个字符串类型的值能存储最大容量是多少?

76. 讲解下Redis线程模型

77. 修改配置不重启Redis会实时生效吗?

78. 缓存与数据库不一致怎么办

79. 什么是Redis持久化?

80. 如何选择合适的持久化方式

81. 单线程的redis为什么这么快

82. Redis 集群方案什么情况下会导致整个集群不可用?

83. 如何解决 Redis 的并发竞争 Key 问题

84. Redis如何做内存优化?

85. RDB和AOF的优缺点

86. redis 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?

87. Redis 常见性能问题和解决方案?

88. 使用 Redis 做过异步队列吗,是如何实现的

89. Redis 的持久化机制是什么?各自的优缺点?

90. Redis事务的三个阶段

91. Redis事务保证原子性吗,支持回滚吗

92. 我们知道通过expire来设置key 的过期时间,那么对过期的数据怎么处理呢?

93. 请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。具体登录函数或功能用空函数即可,不用详细写出。

94. Redis 有哪几种数据淘汰策略?

95. Redis 常见的性能问题和解决方案

96. 惰性删除策略

97. Redis提供了哪几种持久化方式?

98. 缓存穿透、缓存击穿、缓存雪崩解决方案?

99. Redis的数据类型,以及每种数据类型的使用场景

100. Redis 中的管道有什么用?

101. 加锁机制

原文地址:https://www.cnblogs.com/wyl-0120/p/15456664.html