Redis经典面试题
Redis经典面试题
使用场景

缓存
缓存穿透


布隆过滤器主要用于拦截不存在的数据


通过设置误判率来减少误判


缓存击穿
热门数据过期


逻辑过期是在缓存中添加一个过期时间的字段,而不再给key设置过期时间
互斥锁:强一致、性能差
逻辑过期:高可用、性能优


缓存雪崩




双写一致性



两种情况都可能出现脏数据的问题
第二次删除缓存就是为了防止脏数据的情况出现

延时的时间不好控制,也容易出现脏数据的风险

使用Redis一般是读多写少的情况


读写锁:强一致,但是性能低





持久化

RDB:


AOF:



比较:


数据过期策略

惰性删除

定期删除

Redis的过期删除策略:惰性删除 + 定期删除两种策略进行配合使用


数据淘汰策略


使用建议:

场景题:



分布式锁


但是synchronized是本地的锁,锁只在一个JVM上生效,如果是多个服务器,则还是会出现超卖的情况

Redis分布式锁



lua脚本通过调用Redis命令,可以保证多条命令执行的原子性。

可重入需要判断当前加锁的是否是同一个线程

如果还没来得及同步数据,主节点宕机了,会在从节点中选择一个作为新的主节点,之前的数据没同步过来,所以新的线程也能加锁成功,就可能出现两个线程同时持有同一把锁。
解决方法:



其他面试题
集群

主从复制





哨兵模式
作用:



老的master还被客户端写入新的数据,当老的master变成slave,需要同步新的master数据,导致自身的数据被覆盖丢失。



分片集群
结构:




Redis是单线程的,但是为什么还那么快

用户空间和内核空间

主要影响性能的原因主要是等待数据和数据的来回拷贝
阻塞IO

非阻塞IO

IO多路复用


Redis网络模型

多线程的使用主要减少了网络IO对性能的影响


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 珈豪の学习仓库!




