redis缓存相关的面试题
1.什么叫缓存穿透,缓存击穿,缓存雪崩?以及应该怎么解决它?
答:1.缓存穿透:当用户请求不存在的key时,会穿透缓存直接访问数据库,导致数据库宕机。 解决:给那些不存在的key设置返回空值或者是在请求到达缓存前设置一个布隆过滤器,拦截请求使用三次哈希去除那些key为空的请求。
2.缓存击穿:当某一个key过期时,此时有大量的并发请求会击穿redis使数据库宕机。
解决:使用互斥锁,举个例子:两个线程都发起请求,一个线程获取了互斥锁缓存键,另一个线程只能等第一个线程解锁然后直接获取缓存数据。
3.缓存雪崩:某一时间节点,有大量的key过期,导致直接访问数据库。
解决:给不同的key设置不同的时间,可以设置一个随机值来实现。
2.MySQL与redis如何保持一致性?
答:可以使用redisson读写锁,这个锁分为共享锁和排他锁,共享锁是指在写的同时可以读操作。而排他锁是指在写的过程中禁止其他读写操作。
3.redis的持久化策略?
答:1.RDB策略:RDB是一种快照文件,就把redis的数据保存在磁盘中,当redis要恢复数据时,再从这个快照文件中获取这个缓存数据。
2.AOF策略:AOF是一种追加文件,可以存储redis的写命令,当redis要恢复数据时可以执行这个AOF文件可以恢复数据。
4.数据过期策略?
答:1.惰性删除:当需要某一个Key时,然后访问这个Key,如果发现已经过期了就删除。2.定期删除:每隔一段时间检查一些key如果过期了就删除。
5.数据淘汰策略?
答:1.LRU 最近最少使用。2.LFU最少频率使用。主要是这两种策略。