Redis常见面试问题

Redis号称支持并发11万读操作、并发8万写操作。

1、使用Redis有什么缺点?

缓存和数据库双写一致性问题

缓存雪崩问题

缓存击穿问题

缓存的并发竞争问题

2、Redis是单线程还是多线程?

回答: 主线程是单线程, 但6.0版本前后线程机制有做调整

3、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?

非常简单, 当Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

4、Redis过期策略和内存淘汰机制?

正解:Redis采用的是定期删除+惰性删除策略。

5、Redis 的持久化底层如何实现的?有什么优点缺点?

RDB: 在不同的时间点将 redis 的数据生成的快照同步到磁盘等介质上):内存到硬盘的快照,定期更新。缺点:耗时,耗性能(fork+io 操作),易丢失数据。

AOF:将 redis 所执行过的所有指令都记录下来,在下次 redis 重启时,只需要执行指令就可以了):写日志。缺点:体积大,恢复速度慢。

Redis4.0 之后有了混合持久化的功能,将 bgsave 的全量和 aof 的增量做了融合处理,这样既保证了恢复的效率又兼顾了数据的安全性。

6、什么是缓存穿透?如何解决缓存穿透问题?

指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。

穿透解决方案如下:

1.查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短;

2.布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对 DB 的查询。

posted @ 2020-08-26 09:36  gaopengpy  阅读(112)  评论(0编辑  收藏  举报