Skip to main content

分布式缓存

分布式缓存

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)对数据一致性要求严格

缓存的好实践: 动静分离,小对象, 过期超时, 缓存隔离, 失败降级, 容量控制, 业务导向(没必要加的就别加), 监控告警