缓存设计的核心要素

1、容量规划

  • 缓存内容的大小(缓存的数据不易过大,尤其是redis,单线程模式,数据过大容易阻塞其他处理请求)
  • 缓存内容的数量
  • 淘汰策略
  • 缓存的数据结构
  • 每秒的读峰值
  • 每秒的写峰值

2、性能优化

  • 线程模型
  • 预热方法
  • 缓存分片
  • 冷热数据的比例

3、高可用

  • 复制模型
  • 失效转移
  • 持久策略
  • 缓存重建

4、缓存监控

  • 缓存服务监控
  • 缓存容量监控
  • 缓存请求监控
  • 缓存响应时间监控

5、注意事项

  • 是否可能发生缓存穿透  ( 缓存穿透:使用不存在的key进行大量的高并发查询,导致缓存无法命中,每次请求都要穿透到后端数据库系统进行查询,使数据库压力过大)
  • 对于高并发的缓存使用,需要对无效的key进行缓存,以抵挡恶意或者无意的对无效缓存查询的攻击或者影响。
  • 是否有大对象
  • 是否使用缓存实现分布式锁
  • 是否使用缓存支持的脚本LUA
  • 是否避免了 race condition
  • 任何缓存的key都必须设置缓存失效时间,且失效时间不能集中在某一个时间点上,需要对key的过期时间进行随机设置,否则会导致缓存沾满内存或者缓存雪崩。
  • 对于存储较多value的key,尽量不要使用HGETALL等集合操作,该操作会造成阻塞影响其他应用的访问
  • 使用本地缓存(如ehcache)时,一定要严格控制缓存对象的数量和生命周期,由于JVM的特性,过多的缓存对象会极大的影响JVM的性能,甚至导致内存溢出。
  • 使用缓存时,一定要有降级处理!尤其是针对关键业务,缓存有问题或者失效时也要能回溯到数据库进行处理
  • 在使用远程缓存(如redist,memcached)时,一定要对操作超时时间进行设置,希望是100毫秒以内。
  •  

 

你可能感兴趣的:(缓存)