分布式缓存
分布式缓存
memcached, redis
JPA, MySQL 缓存为什么不能用?
MySQL: 无法操控
且虽然都是跨进程, 但小缓存可以本机,(而DB基本都是Server)且分布式大缓存集群容量不是数据库能比的
并且可以存计算结果,省去复杂计算与格式转换开销
memcached 内部, 类似SLAB的结构, 按照不同大小分chunk放对象
多节点memchaced, 最简单的就是拿key做hash, 如果要动态拓展还有chord ring算法
redis 直接存对象不太好,如果要支持query(以不同的搜索条件)
这种方式效率比较低并且一致性容易出问题
更好的方法可能是不要把query key当redis key,而是把它当成搜索条件
db层这样缓存是有sql 查询plan优化,但redis层没有这个
什么放缓存:
- 生成后基本不变的数据
- 读密集型/热点
- 计算中间值(计算代价大的数据)
- 千人一面的数据(timeline的前n页,filter;排行榜;各种计数和统计)
不适合使用缓存的场景:
1)写多读少,更新频繁;
2)对数据一致性要求严格;
缓存的好实践: 动静分离,小对象, 过期超时, 缓存隔离, 失败降级, 容量控制, 业务导向(没必要加的就别加), 监控告警