厦门网站建设 模板建站,外贸建站什么意思,互联网技术网站,网站前期策划目录 缓存更新策略
定期⽣成
实时⽣成
缓存淘汰策略
Redis内置缓存淘汰策略
缓存预热
缓存穿透
缓存雪崩
缓存击穿 缓存更新策略
定期⽣成
每隔⼀定的周期(⽐如⼀天/⼀周/⼀个⽉), 对于访问的数据频次进⾏统计. 挑选出访问频次最⾼的前 %N的数据.
实时⽣成
先给缓存…
目录 缓存更新策略
定期⽣成
实时⽣成
缓存淘汰策略
Redis内置缓存淘汰策略
缓存预热
缓存穿透
缓存雪崩
缓存击穿 缓存更新策略
定期⽣成
每隔⼀定的周期(⽐如⼀天/⼀周/⼀个⽉), 对于访问的数据频次进⾏统计. 挑选出访问频次最⾼的前 %N的数据.
实时⽣成
先给缓存设定容量上限(可以通过 Redis 配置⽂件的 maxmemory 参数设定). 接下来把⽤⼾每次查询: • 如果在 Redis 查到了, 就直接返回. • 如果 Redis 中不存在, 就从数据库查, 把查到的结果同时也写⼊ Redis.
如果缓存已经满了(达到上限), 就触发缓存淘汰策略, 把⼀些 相对不那么热⻔ 的数据淘汰掉. 按照上述过程, 持续⼀段时间之后 Redis 内部的数据⾃然就是 热⻔数据 了.
缓存淘汰策略 FIFO (First In First Out) 先进先出 把缓存中存在时间最久的 (也就是先来的数据) 淘汰掉. LRU (Least Recently Used) 淘汰最久未使⽤的 记录每个 key 的最近访问时间. 把最近访问时间最⽼的 key 淘汰掉. LFU (Least Frequently Used) 淘汰访问次数最少的 记录每个 key 最近⼀段时间的访问次数. 把访问次数最少的淘汰掉. Random 随机淘汰 从所有的 key 中抽取幸运⼉被随机淘汰掉. Redis内置缓存淘汰策略
Redis 内置的淘汰策略如下 • volatile-lru 当内存不⾜以容纳新写⼊数据时从设置了过期时间的key中使⽤LRU最近最 少使⽤算法进⾏淘汰 • allkeys-lru 当内存不⾜以容纳新写⼊数据时从所有key中使⽤LRU最近最少使⽤算法进⾏淘汰. • volatile-lfu 4.0版本新增当内存不⾜以容纳新写⼊数据时在过期的key中使⽤LFU算法 进⾏删除key. • allkeys-lfu 4.0版本新增当内存不⾜以容纳新写⼊数据时从所有key中使⽤LFU算法进⾏ 淘汰. • volatile-random 当内存不⾜以容纳新写⼊数据时从设置了过期时间的key中随机淘汰数 据. • allkeys-random 当内存不⾜以容纳新写⼊数据时从所有key中随机淘汰数据. • volatile-ttl 在设置了过期时间的key中根据过期时间进⾏淘汰越早过期的优先被淘汰. (相当于 FIFO, 只不过是局限于过期的 key) • noeviction 默认策略当内存不⾜以容纳新写⼊数据时新写⼊操作会报错. 缓存预热
定义 缓存预热是指在系统启动之前或系统达到高峰期之前通过预先将常用数据加载到缓存中以提高缓存命中率和系统性能的过程。 目的 尽可能地避免缓存击穿和缓存雪崩。 减轻后端存储系统的负载提高系统的响应速度和吞吐量。 减少冷启动影响即系统重启或新启动时避免首次请求处理缓慢。 提高数据访问速度确保数据快速可用。 平滑流量峰值帮助系统更好地处理高流量。 保证数据的时效性特别是对于高度依赖于实时数据的系统。 预热方法 系统启动时加载在系统启动时将常用的数据加载到缓存中。 定时任务加载定时执行任务将常用的数据加载到缓存中以保持数据的实时性和准确性。 手动触发加载在系统达到高峰期之前手动触发加载常用数据到缓存中。 用时加载在用户请求到来时根据用户的访问模式和业务需求动态地将数据加载到缓存中。 缓存加载器一些缓存框架提供了缓存加载器的机制可以在缓存中不存在数据时自动调用加载器加载数据到缓存中。 缓存穿透
定义 缓存穿透是指查询一个一定不存在的数据由于缓存是不命中时需要从数据库查询查不到数据则不写入缓存这将导致这个不存在的数据每次请求都要到数据库去查询进而给数据库带来压力。 产生原因 恶意攻击攻击者故意查询不存在的数据以此来消耗系统资源。 频繁查询不存在的数据系统中的业务逻辑错误或设计不合理导致频繁查询不存在的数据。 解决方案 对查询结果为null的数据进行缓存设定短时限例如30~60秒最高5分钟并定期进行清理。 使用布隆过滤器通过哈希思想快速判断一个数据是否存在于集合中从而避免无效的查询。 对URL中的key id值进行对称加密防止黑客攻击。 缓存雪崩
定义 缓存雪崩是指缓存中数据大批量到过期时间而查询数据量巨大引起数据库压力过大甚至宕机。 产生原因 Redis宕机。 采用了相同的过期时间导致大量缓存同时失效。 解决方案 给不同的Key的TTLTime To Live添加随机值避免大量缓存同时失效。 利用Redis集群提高服务的可用性。 给缓存业务添加降级限流策略。 给业务添加多级缓存。 缓存击穿
定义 缓存击穿是指一个热点的Key有大并发集中对其进行访问突然间这个Key失效了导致大并发全部打在数据库上导致数据库压力剧增。 产生原因 某个热点的key失效了此时有大量请求同时访问该数据。 并发查询多个请求同时查询一个数据导致缓存未命中请求直接访问数据库。 解决方案 使用互斥锁当缓存数据为空时使用互斥锁保证只有一个线程可以访问数据库其他线程等待该线程查询数据库并将结果写入缓存。 使用布隆过滤器快速判断一个key是否存在于缓存中从而避免无效的查询。 预加载在缓存中设置短暂的过期时间当缓存数据即将过期时提前异步更新缓存。