Redis 存储

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
updatedupdated2022-06-232022-06-23