redis 网课笔记

缓存 缓存雪崩

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库。
解决方案
  • 给不同的key的TTL添加随机值
  • 利于Redis集群提高服务的可用性 哨兵模式、集群模式
  • 给缓存业务添加降级限流策略 ngxin或spring cloud gateway
  • 给业务添加多级缓存 Guava

双写一致性

  • 一致性要求高
  • 允许延迟
    数据不一致情况
    redis 网课笔记_第1张图片

redis 网课笔记_第2张图片

方案 延迟双删

放入缓存的数据:读多写少。
写操作:延迟双删
仍然有出现脏数据的可能
延时双删:主从集群,读写分离,需要延时让主节点把数据同步到从节点。

方案 互斥锁

写或读时都加锁。
优化:
因为存入缓存的数据,读多写少 -> 共享锁和排它锁

方案 异步通知(MQ、Cannal),保证数据的最终一致性

Redis持久化

RDB 定时对整个内存做快照

  • save
  • bgsace
RDB的执行原理
  • bgsave fork主进程得到子进程, 子进程复制了父进程的页表,子进程共享主进程的内存数据。
  • 子进程读取内存数据并写入RDB文件。
子进程进行读操作时,主进程可能在执行写操作 ------ copy-on-write
  • 主进程执行读操作时,访问共享内存。
  • 主进程执行写操作时,拷贝一份数据,执行写操作。

AOF 记录每一次执行的命令

默认关闭
redis.conf 中配置 appendonly yes
appendfilename 可以指定文件名
appendfsync 配置刷盘时机
alwags:同步刷盘
everysec:每秒刷盘
no:操作系统控制:性能最好,可靠性较差
AOF比RDB文件大得多,bgrewriteaof:AOF文件执行重写功能,用最少的命令达到相同的效果。

redis数据过期策略

  • 惰性删除: 设置key的过期时间之后,仅在需要该key时,检查它是否过期,入股过期就删除。优点CPU友好。缺点:内存不友好。
  • 定期删除:每隔一段时间,对key进行检查,删除过期key。SLOW模式、FAST模式。优点:通过限制删除操作执行的时长和频率来减少删除操作对CPU的影响。定期删除能有效地释放过期键占用的内存。缺点:删除操作的执行时间和频率难以确定。
  • 惰性删除和定期删除配合使用。

redis淘汰策略

  • noeviction:不淘汰任何key,默认
  • volatile-ttl : 有限淘汰剩余时间短的
  • volatile-random:对设置了过期时间的,进行随机淘汰
  • volatile-lru:对设置了过期时间的,进行LRU算法淘汰
  • volatile-lfu:对设置了过期时间的,进行LFU算法淘汰
  • allkeys-random
  • allkeys-lru
  • allkeys-lfu
    LFU:最少频率使用
    LRU:最近最少使用
数据淘汰策略使用建议
  • 优先使用allkeys-lru.尤其是有明显冷热数据区分的,把最经常访问的数据留在内存
  • 业务中数据访问频率差别不大,没有明显冷热数据区分:使用allkeys-random,随机淘汰。
  • 有置顶需求:volatile-lru,且置顶数据不设置过期时间。
  • 有短时高频访问数据:allkeys-lfu 或 volatile-lfu

redis 网课笔记_第3张图片

你可能感兴趣的:(java学习笔记,redis,笔记,mybatis)