Redis教程

Redis面试题,最强汇总

本文主要是介绍Redis面试题,最强汇总,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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

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

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

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

1、缓存雪崩

  • 简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
  • 解决办法
    • 事前:尽量保证整个 redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。
    • 事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL崩掉
    • 事后:利用 redis 持久化机制保存的数据尽快恢复缓存
    • 缓存雪崩

2、 缓存穿透

  • 简介:一般是黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。

  • 解决办法

    最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

2. Redis事务的三个阶段

  1. 事务开始 MULTI
  2. 命令入队
  3. 事务执行 EXEC

事务执行过程中,如果服务端收到有EXEC、DISCARD、WATCH、MULTI之外的请求,将会把请求放入队列中排队

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

EXPIRE 和 PERSIST 命令

expire 指令可以设置 key 的超时时间,单位秒。即在多少秒后过期。 返回1代表设置成功;返回 0 代表设置不成功,此时是因为key不存在导致的。

127.0.0.1:6379> expire "key-aaa" 10
(integer) 1
127.0.0.1:6379> expire "key-not-exists" 10
(integer) 0

3 秒后使用 ttl 命令查询剩余的超时时间:

127.0.0.1:6379> ttl "key-aaa"
(integer) 7

使用 persist 清除过期时间

127.0.0.1:6379> set "key-aaa" "value-bbb" EX 15
OK
127.0.0.1:6379> ttl "key-aaa"
(integer) 11
127.0.0.1:6379> persist "key-aaa"
(integer) 1
127.0.0.1:6379> ttl "key-aaa"
(integer) -1
127.0.0.1:6379> get "key-aaa"
"value-bbb"

persist 返回值:

1:成功清理过期时间。

0:key 不存在,或者没有设置过期时间

4. 使用方式

GEOADD key longitude latitude member [longitude latitude member ...]

将给定的位置对象(纬度、经度、名字)添加到指定的key。其中,key为集合名称,member为该经纬度所对应的对象。在实际运用中,当所需存储的对象数量过多时,可通过设置多key(如一个省一个key)的方式对对象集合变相做sharding,避免单集合数量过多。

成功插入后的返回值:

(integer) N

其中N为成功插入的个数。

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

1、codis

2、目前用的最多的集群方案,基本和 twemproxy 一致的效果,但它支持在节点数量改变情况下,旧节点数据可恢复到新 hash 节点。

redis cluster3.0 自带的集群,特点在于他的分布式算法不是一致性 hash,而是 hash 槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。

3、在业务代码层实现,起几个毫无关联的 redis 实例,在代码层,对 key 进行 hash 计算,然后去对应的redis 实例操作数据。这种方式对 hash 层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控等等。

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

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

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

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

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

6. 使用redis有哪些好处?

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

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

9. Redis 如何实现延时队列

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

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

12. 事务管理(ACID)概述

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

14. Redis事务的概念

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

16. Redis有哪些优缺点

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

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

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

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

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

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

23. 讲解下Redis线程模型

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

25. 为什么要做Redis分区?

26. 什么是Redis持久化?

27. Reids的特点

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

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

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

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

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

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

34. Redis常用管理命令

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

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

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

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

39. 加锁机制

40. RDB和AOF的优缺点

41. Redis 为什么是单线程的

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

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

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

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

46. 怎么理解 Redis 事务?

47. 定时删除策略

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

49. Redis 如何做内存优化?

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

51. 惰性删除策略

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

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

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

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

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

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

58. Redis为什么这么快

59. Redis事务

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

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

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

63. Reids三种不同删除策略

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

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

66. Redis事务其他实现

67. 定期删除策略

68. 锁互斥机制

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

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

71. watch dog 自动延期机制

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

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

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

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

76. Redis 内部结构

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

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

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

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

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

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

83. Redis事务支持隔离性吗

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

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

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

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

88. Redis分区有什么缺点?

89. Redis如何做内存优化?

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

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

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

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

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

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

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

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

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

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

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

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

这篇关于Redis面试题,最强汇总的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!