Cache
缓存结构
静态化模版 freemarker 过时了。
openresty 100M lua + 缓存 动态渲染 对于易变的数据,用js 异步获取
Nginx 一般cache很小,只放热点数据。
Ehcache:500M jvm level 的缓存,比redis 省去了io时间
Redis:xG
缓存问题
缓存穿透: 是指用户查询一个不存在的数据, 缓存不命中,且存储层不会将查询不到的写入缓存。如果压力测试这个不存在的数据,可能数据库就会崩溃。
解决方法: 1. 还是将空数据写入缓存 2. 布隆过滤器
缓存雪崩: 是指我们的缓存过期时间一致,这样会导致所有请求一起到 DB 造成DB 过载。
解决方法: 1.可以设置一个随机器 2. 利用锁来限制对 DB 的访问
缓存击穿: key对应的数据存在,但在缓存中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
解决方法: 可以用互斥锁