缓存面试题

项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?

如何使用

如何使用是回答用缓存来干嘛了。 回答点:缓存能用来干嘛,项目中的缓冲用来干嘛了。
缓存当然是用来缓冲存储层的数据的和计算后的结果。
在我们项目这使用了以上两种。 xxxx and xxxx

为什么使用

回答这个为什么使用的时候围绕两点:性能和高并发。
缓存了计算后的结果,节省了计算时间,那么自然性能就上来了。
缓存了存储层的数据,后续请求无需再次访问数据库,那么并发自然也就上来了。MySQL的QPS到2000已经是单机的瓶颈了,Redis单机的QPS上限在10w,并发提升50倍。

使用不当的后果,怎么避免

数据不一致问题:比如现在有一个写命令过来。 如果先操作缓存,再操作数据库。当操作完缓存后,OOM了。这个时候数据就不一致了。数据库和缓存数据不一致
缓存雪崩问题:当缓存集体失效或者缓存服务器宕机时,那么大量的请求会打到存储层,就可能级联导致存储层雪崩。
缓存穿透问题:当出现大量的缓存miss,流量就会打到存储层,也可能引起存储层的崩溃
缓存击穿问题:当某个热点key过期时,也会有大流量打到存储层,也可能引起存储层的崩溃
三个问题

Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么 Redis 单线程却能支撑高并发?

这个问题其实是在问技术选型。
当我们使用一项技术的时候,肯定有很多备选项,那么我们应该如何挑选呢?
我们需要分析各个备选项的特性和优缺点,选择最贴合项目需求,社区活跃,符合未来架构,足够的普遍性(降低学习成本)。

特性RedisMemcached
线程模型单线程架构多线程架构
网络IO模型IO多路复用IO多路复用
内存分配分配完内存后把内存的大小写入头部,提供释放内存速度,jemalloc算法分配预分配机制,按块分配,没有内存碎片
支持的数据结构string、hash、list、zset、set、geo、hyperloglog、bitmap、boomfilter简单的kv
数据持久化RDB AOF不支持
集群模式第三方和原生的cluster客户端或者第三方
高可用原生支持主从第三方支持

单线程架构,无锁。内存操作,纳秒级别。IO多路复用的网络模型

Redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?

定时过期,定期过期,惰性过期。
内存淘汰机制:
无非就是针对过期键还是持久键,是随机删除还是lru还是ttl

linkedHashMap在put时如果当前size达到最大size,那么从头部remove一个节点。accessOrder置为true

如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?

高并发是依赖主从,从节点分担读请求。 写请求超过10w,那就要上集群模式了。
高可用就是主从复制+哨兵机制

主从复制原理

复制流程:ping - pong -sync - rdb - aof - 每次写命令异步发送到从服务器
短时间断线重连:psync - 检查是否为自己的从节点,复制偏移量是否在复制缓冲区 - aof | rdb
复制流程的rdb是不会落磁盘的,减少对master正常工作的影响
心跳:主节点10s一次,从节点1秒一次

本问题主要回答

哨兵redis-sentinel

哨兵是往master和slave节点发送ping来判断主节点是否存活。发送pub/sub发现其他sentinel节点和交换本节点的主从节点信息。
主观下线:当master超过down-after-milliseconds没有收到sub消息时,就会认为主观下线。
客观下线:当sentinel有quorum个节点都认为无响应后,认为客户下线
通过raft选举算法选举出领头羊来执行这次故障转移:

  1. 对从节点slaveof no one
  2. 对其他从节点执行slaveof 新master
  3. 记录原master为slave
    使用epoch来保证master的正确更新
  • 每隔10秒,每个sentinel节点向主节点和从节点发送info命令获取最新的拓扑结构
  • 每隔2秒,每个sentinel节点会向redis数据节点的__sentinel__:hello频道发送sentinel节点对于主节点的判断以及当前sentinel节点的信息,并且订阅此频道,了解其他节点对主节点的判断
  • 每隔1秒,每个sentinel节点会向主节点、从节点、其余sentinel节点发送一条ping命令做一次心跳检测,是否存活。

Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

特点AOFRDB
文件大小存储了每条写命令大于rdb二进制文件
完整度配置everysec最多延迟2s触发save才会保存,延迟较大
恢复速度较快
执行代价每次写命令后追加一天日志缓冲文件的写和定期的bgrewriteaof在业务低峰期执行,代价很小

aof:每一次写命令 写入到日志缓冲区,根据刷盘策略刷新到磁盘
rdb:根据配置的save 定时触发。fork 子线程 -> 复制 + aof +cow -> 主线程把aof写入rdb 原子性的更换rdb文件。

Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

简单问题
redis开发与运维读书笔记

Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

多个客户端并发操作一个key,因为网络问题导致先后执行顺序错乱。
事务+watch机制
lua脚本。

生产环境中的 Redis 是怎么部署的?

yaml文件。 headless + statefulset + pv + redis cluster

回答: Redis缓存面试题可以涉及到Redis的使用场景和常见问题。其中一个常见的面试题是关于Redis的会话缓存(session cache)。Redis的会话缓存可以通过持久化提供更好的存储一致性,相比其他存储(如Memcached)具有优势。如果用户的购物车信息丢失,大多数人会感到不高兴。幸运的是,Redis提供了持久化功能,可以确保数据不会丢失。甚至一些流行的商业平台如Magento也提供了Redis的插件来缓存会话。 另一个可能涉及到的面试题是关于缓存穿透的问题。缓存穿透指的是在Redis缓存和数据库中都找不到相关的数据,可能由于非法查询导致。解决缓存穿透的方法包括过滤非法查询、缓存空对象和采用布隆过滤器。过滤非法查询可以在后台服务中对非法查询进行过滤,不让其落到Redis服务上。缓存空对象可以在Redis中存储一个表示数据不存在的空对象,避免重复查询。而采用布隆过滤器可以用于判断一个元素是否在集合中,具有较高的空间效率和查询时间,但也有一定的误识别率和删除困难。 以上是关于Redis缓存的一些面试题的回答,希望对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [面试 Redis 没底?这 40 道面试题让你不再慌(附答案)](https://blog.csdn.net/xmt1139057136/article/details/115423283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [66道史上最全Redis面试题,面试官能问的都被我找到了(附答案)](https://blog.csdn.net/m0_60478027/article/details/119215355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [10题经典Redis面试题](https://blog.csdn.net/m0_52256357/article/details/125709819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值