Redis 是如何持久化的?
Redis 有两种持久化方式:
- AOF:独立日志文件(主流方式),优先级较高,其是通过将命令写入缓存区,缓冲区再根据策略同步到硬盘,并且还会定期通过 fork() 子进程对 AOF 进行重写,优化存储空间。
- RDB:采用数据快照的存储方式。通过 fork() 子进程,根据内存生成的临时快照,再存储到硬盘或对原有文件进行原子替换。
AOF 和 RDB 的区别:
- AOF 文件比 RDB 更新频率高,优先使用 AOF 还原数据;
- AOF 比 RDB 更安全也更大;
- RDB 性能比 AOF 好;
- 如果两个都配置了,优先加载 AOF。
什么是缓存击穿?
当缓存中的 key 失效时,且同时有很多请求打在 key 上,这个时候的这些请求都会访问到数据库,造成数据库压力变大。
解决方案:设置热点数据不过时,或采用锁(必要时是分布式锁)保证每个 key 只有一个线程去查询数据库。
什么是缓存穿透?
当很多请求都请求到一个更不不存在的数据时,由于缓存中也肯定没有此数据,所以所有请求都访问到了数据库。
解决方案:用空对象替代,或者采用布隆过滤器,记录下能找不到的值,下次请求时,如果没有就能直接得到。
什么是缓存雪崩?
当缓存中大量的值同时失效,并且有很多请求都要请求这些值时,所有请求都会访问到数据库。
解决方案:通过缓存预热,搭建数据库集群分散压力,服务降级:直接不查数据库,返回默认值。
什么是布隆过滤器?
布隆过滤器:用于大数据的排重,将每条数据不同 Hash 计算得到不同的指纹,将指纹映射到一个大的按位存储的空间。
- 优点:空间和时间效率都很高。
- 缺点:随着存入的元素增加,误算率随之增大。
使用范围:
- 大数据去重:bitmap,Bloom Fiter
- 网络爬虫 Url 去重:BitSet + hash,Bloom Filter