数据类型

数据类型 #

  • string
  • hash
  • list
  • set
  • sorted Set
  • hyperLogLog
  • Geo
  • bitmap
  • Stream

数据持久化 #

RDB #

Redis Database 会产生多个文件,每个文件代表某一个时刻的redis数据。对于aof来说,基于rdb恢复数据会更快。

AOF #

Append Only File 将每条写入命令写入日志中,在redis重启的时候通过日志文件重构数据

redis故障Rdb会丢失更多的数据,Rdb快照都是隔5分钟或者更长时间生成,而aof每隔一秒就会执行一次,所以只会丢失一秒钟的数据。

布隆过滤器 #

优点:优点很明显,二进制组成的数组,占用内存极少,并且插入和查询速度都足够快。

缺点:随着数据的增加,误判率会增加;还有无法判断数据一定存在;另外还有一个重要缺点,无法删除数据

场景 #

缓存击穿 #

cache breakdown

指一些很热的数据在缓存过期后,同时有大量请求集中打击数据库,一出现就“击穿”缓存去访问数据库

  • 热数据永不过期
  • 加上互斥锁

缓存穿透 #

cache penetration

指查询一个本来不应该存在的数据,结果却没有穿透缓存查询后台,导致对数据库的空请求

  • 逻辑检查,小于1 或者是字符串不允许之类的
  • 使用布隆过滤器
  • 缓存空对象,如果是网络恶意攻击(每次key不一样,且数据库不存在),缓存占用了更多的内存,缓存空对象要考虑到缓存时间的设置

缓存雪崩 #

cache avalanche

  • 过期时间设置随机值
  • 分布式部署且均匀分布热点数据
  • 热数据永不过期
  • 服务降级
  • 服务熔断
  • 请求限流

redis高可用 #

  • 主从复制 用于数据备份和读写分离
  • 哨兵机制 自动故障转移提供高可用
  • 集群机制 节点间数据同步和分区机制实现横向扩展和强一致性

redis过期策略 #

  • 定时删除:在设置 key 的过期时间时,同时创建一个定时事件,当时间到达时,由事件处理器自动执行 key 的删除操作
  • 定期删除:每隔一段时间删除
  • 惰性删除:获取的时候判断是否过期

Redis 选择「惰性删除+定期删除」这两种策略配和使用

redis的内存淘汰机制 #

  • noeviction: 当内存不足时,新写入操作会报错
  • allkeys-lru:当内存不足时,移除最近最少使用的 key(这个是最常用的)。
  • allkeys-random:当内存不足时,随机移除某个 key。
  • volatile-lru:当内存不足时,在设置了过期时间的键中,移除最近最少使用的 key。
  • volatile-random:当内存不足时,在设置了过期时间的键中,随机移除某个 key。
  • volatile-ttl:当内存不足时,在设置了过期时间的键中,有更早过期时间的 key 优先移除。