
Redis面试总结
文章平均质量分 62
总结Redis高频知识点以及面试题
风清扬,夏邑
学无止境
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Redis常见面试题汇总
在一个线程删除缓存以后,可以设置一个时间间隔,让这个线程再删除一次缓存,只要其他的线程的写缓存操作是在这个线程两次删缓存操作之间执行的,这个线程就可以在第二次删除缓存时把其他线程写的脏数据给删除掉。这个是不能的,比如,当线程1加锁成功后,master节点数据会异步复制到slave节点,此时当前持有Redis锁的master节点宕机,slave节点被提升为新的master节点,假如现在来了一个线程2,再次加锁,会在新的master节点上加锁成功,这个时候就会出现两个节点同时持有一把锁的问题。原创 2024-07-23 12:19:11 · 8334 阅读 · 0 评论 -
Redis集群
当然,如果在rdb生成执行期间,依然有请求到了主节点,而主节点会以命令的方式记录到缓冲区,缓冲区是一个日志文件,最后把这个日志文件发送给从节点,这样就能保证主节点与从节点完全一致了,后期再同步数据的时候,都是依赖于这个日志文件,这个就是全量同步。增量同步指的是,当从节点服务重启之后,数据就不一致了,所以这个时候,从节点会请求主节点同步数据,主节点还是判断不是第一次请求,不是第一次就获取从节点的offset值,然后主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步。取值的逻辑是一样的。原创 2024-07-12 23:32:41 · 623 阅读 · 1 评论 -
Redis分布式锁
将线程ID传入scheduleExpirationRenewal,然后在renewExpiration中创建定时任务,当线程持有锁的时间到了超时时间的1/3,就会通过定时任务中的renewExpirationAsync方法会通过Lua脚本为锁重新设置超时时间。(5)添加锁成功,则添加缓存然后再释放锁,最后返回数据。业务加锁后启动一个看门狗,每隔一段时间检查一下,如果业务还持有锁key,那么就会不断的延长锁key的生存时间。锁的释放也是通过 Lua 脚本来保证原子性,确保只有持有锁的客户端才能释放锁。原创 2024-07-12 22:03:20 · 605 阅读 · 0 评论 -
Redis数据淘汰策略(Redis缓存内存占满了怎么办?)
当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。主要看数据淘汰策略是什么?如果是其它策略,按照以上对应的策略对key进行淘汰。【1】:数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据?使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,留下来的都是经常访问的热点数据。【2】Redis的内存用完了会发生什么?原创 2024-07-12 21:57:47 · 413 阅读 · 0 评论 -
Redis过期删除策略
Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。设置该key过期时间后,我们不去管它,当需要该key时,从缓存中取出该key,然后再检查其是否过期,如果过期,我们就删掉它,反之返回该key。每隔一段时间,我们就对一些key进行检查,从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key。Redis的过期删除策略一般使用。两种策略进行配合使用。原创 2024-07-12 21:54:27 · 155 阅读 · 0 评论 -
Redis数据持久化
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件。AOF采用文件追加方式,文件会越来越大,为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。在指定的时间间隔内将内存中的数据集快照写入磁盘(Snapshot),它恢复时是将快照文件直接读到内存里。为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化。原创 2024-07-12 21:50:27 · 377 阅读 · 0 评论 -
Redis作为缓存,如何保证MySQL数据库与Redis缓存一致性(双写一致性)?
(2)利用canal中间件,不需要修改业务代码,伪装为mysql的一个从节点,canal通过读取binlog数据更新缓存。当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。(2)排他锁:独占锁writeLock也叫,加锁之后,阻塞其他线程读写操作。(1)共享锁:读锁readLock,加锁之后,其他线程可以共享读操作。(1)使用MQ中间中间件,更新数据之后,通知缓存删除。原创 2024-07-12 21:47:04 · 688 阅读 · 4 评论 -
缓存三兄弟之缓存雪崩
缓存雪崩意思是设置缓存时大量的key采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。与缓存击穿的区别:雪崩是很多key,击穿是某一个key缓存。原创 2024-07-12 00:32:00 · 197 阅读 · 0 评论 -
缓存三兄弟之缓存击穿
缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。当缓存失效时,不立即去加载 db,先使用Redis的setnx(Set if not exit)去设置一个互斥锁,当操作成功返回时再进行加载db的操作并回设缓存,否则重试get缓存的方法。的方案,性能上可能没那么高,锁需要等待,也有可能产生死锁的问题。原创 2024-07-12 00:30:46 · 277 阅读 · 0 评论 -
缓存三兄弟之缓存穿透
判断一个元素是否存在于集合时,同样使用多个哈希函数计算出对应的哈希值,然后检查位数组中对应的位置是否都为1,如果有任意一个位置为0,则说明该元素不存在于集合中;(1)哈希碰撞:不同的元素经过哈希函数计算可能映射到相同的二进制位,导致不同元素在布隆过滤器中产生了冲突,从而可能被误判为存在于集合中。(2)容量限制:布隆过滤器使用有限的二进制位数组来表示集合,当集合中元素数量较多时,可能会导致位的重复使用,从而增加误判的概率。虽然查询元素是否存在有误判率,但是如果查询元素是否不存在,则没有误判率。原创 2024-07-12 00:27:38 · 374 阅读 · 0 评论