-
Redis 面试路线最全整理(附面试题精选及答案)
Redis 面试路线最全整理,附 Redis 高频必考面试题及答案。 搞定 Redis 面试题,看这一篇就够了,不用四处找资料,节约大量时间。 1 Redis 面试题及答案 基础 什么是Redis Redis的优点、缺点是什么 为什么要用Redis 你的项目里用到了Redis,使用Redis的原因是什么 分布式Redis是前期做,还是后期规模大了再做 生产环境中的Redis是怎么部署的 为什…... -
Redis 学习进阶路线及资料(附大厂面试题合集)
Redis 是面试重灾区,也是必知必会的核心技术,它的重要性不言而喻。 我最新总结的这份 Redis 学习进阶路线及资料,包含了 Redis 涉及的所有核心知识点,可以用来参考学习、构建知识体系、复盘技术栈。 Redis 学习进阶路线 把图谱放大,就能看清楚了。 《Redis 学习进阶路线》高清图谱,到文末直接获取。 Redis 学习进阶资料 基础 什么是Redis Redis的优点、缺点是什么 …... -
缓存热点key是什么,如何解决
参考答案 缓存中的一个Key(比如一个促销商品),在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 解决方案:对缓存查询加锁,如果KEY不存在,就加锁,然后查DB入缓存,然后解锁;其他进程如果发现有锁就等待,然后等解锁后返回数据或者进入DB查询。 以上,…... -
Redis回收进程如何工作的
参考答案 一个客户端运行了新的命令,添加了新的数据。 Redis检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。 一个新的命令被执行。 不断地穿越内存限制的边界,通过不断达到边界,然后不断地回收回到边界以下。 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。 以上,是Redis面…... -
Redis如何实现延时队列
参考答案 使用sortedset,使用时间戳做score,消息内容作为key。 调用zadd来生产消息,消费者使用zrangbyscore获取n秒之前的数据做轮询处理。 以上,是Redis面试题【Redis如何实现延时队列】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---... -
使用Redis做过异步队列吗,是如何实现的
参考答案 Redis做异步队列: 使用list类型保存数据信息,rpush生产消息,lpop消费消息。 当lpop没有消息时,可以sleep一段时间,然后再检查有没有信息;如果不想sleep的话,可以使用blpop,在没有信息的时候,会一直阻塞,直到信息的到来。 Redis可以通过pub/sub主题订阅模式实现一个生产者,多个消费者。同时它也存在一定的缺点,当消费者下线时,生产的消息会丢失。 &n…... -
Redis常见性能问题和解决方案
参考答案 Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。 如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。 为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。 尽量避免在压力较大的主库上增加从库。 Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内…... -
如何保证缓存与数据库双写时的数据一致性
参考答案 只要用缓存,就可能会涉及到缓存与数据库双存储双写。只要是双写,就一定会有数据一致性的问题。 如何解决数据一致性的问题呢?有两个方案供参考: 解决方案一:读请求和写请求串行化,串到一个内存队列里去。 这种方式可以保证一定不会出现不一致的情况。 串行化之后,会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 一般来说,如果系统不是严格要求缓存+数据库必须一致性…... -
Redis与Memcached的区别
参考答案 Redis和Memcached都是非关系型内存键值数据库,一般情况下,大多数企业都采用 Redis 来实现缓存。 Redis与Memcached的相似点: Redis和Memcached都是内存数据存储系统,都用作内存中的键值数据存储。 Redis和Memcached都属于NoSQL系列数据管理解决方案,两者都基于键值数据模型。 Redis和Memcached都将所有数据保存在RAM中。…... -
Jedis与Redisson对比有什么优缺点
参考答案 Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持。 Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比较,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。 Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。 以上,是Redi…... -
Redis和Redisson有什么关系
参考答案 Redisson是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象。 例如: Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque,…... -
Redis支持的Java客户端都有哪些,官方推荐用哪个
参考答案 Redis支持的Java客户端,常见的有:Redisson、Jedis、lettuce等等。 官方推荐使用Redisson。 以上,是Redis面试题【Redis支持的Java客户端都有哪些,官方推荐用哪个】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---... -
什么是缓存降级,如何解决缓存降级
参考答案 缓存降级的概念 当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。 缓存降级的最终目的:保证核心服务可用,即使是有损的。而且有些服务是无法降级的,例如,加入购物车、结算。 缓存降级的解决方案 在进行降级之前,要先对系统进行梳理,确认哪些必须要保…... -
什么是缓存预热,如何解决缓存预热
参考答案 缓存预热的概念 缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统。 缓存预热可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题,用户直接查询事先被预热的缓存数据。 缓存预热的解决方案 直接写个缓存刷新页面,上线时手工操作下。 数据量不大,可以在项目启动的时候自动进行加载。 定时刷新缓存。 以上,是Redis面试题【什么是缓存预热,如何解决缓存预热】的参…... -
什么是缓存击穿,如何解决缓存击穿
参考答案 缓存击穿的概念 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。 缓存击穿和缓存雪崩不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。 缓存击穿的解决方案 设置热点数据永远不过期。 加互斥锁。 以上,是Re…... -
什么是缓存穿透,如何解决缓存穿透
参考答案 缓存穿透的概念 缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。 缓存穿透的解决方案 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截。 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)…... -
什么是缓存雪崩,如何解决缓存雪崩
参考答案 缓存雪崩的概念: 是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。 缓存雪崩的解决方案: 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。 一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。 给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。 以上,是Redi…... -
什么是 RedLock
参考答案 Redis 官方站提出了一种权威的基于 Redis 实现分布式锁的方式名叫Redlock,此种方式比原先的单节点的方法更安全。 Redlock可以保证以下特性: 安全特性:互斥访问,即永远只有一个 client 能拿到锁。 避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区。 容错性:只要大部分 Redis…... -
分布式Redis是前期做,还是后期规模大了再做
参考答案 Redis是轻量的(单实例只使用1M内存),为防止以后扩容,最好的办法就是一开始就启动较多实例。 即便只有一台服务器,也可以一开始就让Redis以分布式的方式运行,使用分区,在同一台服务器上启动多个实例。 一开始就多设置几个Redis实例,例如32或者64个实例,对大多数用户来说,操作可能比较麻烦,但是长远来看是值得的。 如果前期就这样做,当后期数据不断增长,要用到更多的Redis服务器…... -
如何解决Redis的并发竞争Key问题
参考答案 Redis 的并发竞争 Key 的问题,也就是多个系统同时对一个Key 进行操作,但最后执行的顺序和我们期望的顺序不同,这样也就导致了结果的不同。 想要解决Redis的并发竞争Key问题,推荐使用分布式锁。 注:Zookeeper 和Redis 都可以实现分布式锁,如果不存在 Redis 的并发竞争 Key 问题,就不要使用分布式锁,会影响性能。 基于Zookeeper临时有序节点,可以…... -
Redis如何实现分布式锁
参考答案 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。 Redis中可以使用SETNX命令实现分布式锁: 当且仅当 key 不存在,将 key 的值设为 value。 若给定的 key 已经存在,则 SETNX 不做任何动作。 SETNX (SET if Not eXists)如果不存在,则 SET。 返回值:设置成功,返回1;设…... -
Redis分区有什么缺点
参考答案 Redis分区存在如下几个缺点: 涉及多个key的操作通常不会被支持。例如,不能对两个集合求交集,因为他们可能被存储到不同的Redis实例(实际上这种情况也有办法,但是不能直接使用交集指令)。 如果同时操作多个key,则不能使用Redis事务。 分区使用的粒度是key,不能使用一个非常长的排序key存储一个数据集。 当使用分区的时候,数据处理会非常复杂。例如,为了备份你必须从不同的Red…... -
有哪些Redis分区实现方案
参考答案 Redis分区实现方案: 客户端分区:是在客户端就已经决定数据会被存储到哪个redis节点、或者从哪个redis节点读取。大多数客户端已经实现了客户端分区。 代理分区:意味着客户端将请求发送给代理,然后代理决定去哪个节点写数据或者读数据。代理根据分区规则决定请求哪些Redis实例,然后根据Redis的响应结果返回给客户端。redis和memcached的一种代理实现就是Twemproxy…... -
为什么要做Redis分区
参考答案 如果没有分区,最多只能使用一台机器的内存。 分区使得Redis的计算能力通过简单地增加计算机,从而得到成倍的提升,Redis的网络带宽也会随着计算机和网卡的增加成倍增长。 分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。 以上,是Redis面试题【为什么要做Redis分区】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点…...