> For the complete documentation index, see [llms.txt](https://jon-xia.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jon-xia.gitbook.io/workspace/shu-ju-ku-11/nosql/redis/redis-huan-cun-she-ji.md).

# Redis缓存设计

收益如下：

* 加速读写：因为缓存通常都是全内存的（例如Redis、 Memcache），而

  存储层通常读写性能不够强悍（例如MySQL），通过缓存的使用可以有效

  地加速读写，优化用户体验。
* 降低后端负载：帮助后端减少访问量和复杂计算（例如很复杂的SQL

  语句），在很大程度降低了后端的负载。

成本如下：

* 数据不一致性： 缓存层和存储层的数据存在着一定时间窗口的不一致性， 时间窗口跟更新策略有关。
* 代码维护成本： 加入缓存后， 需要同时处理缓存层和存储层的逻辑，

  增大了开发者维护代码的成本。
* 运维成本： 以Redis Cluster为例， 加入后无形中增加了运维成本。

  缓存的使用场景基本包含如下两种：
* 开销大的复杂计算： 以MySQL为例子， 一些复杂的操作或者计算（例

  如大量联表操作、 一些分组计算） ， 如果不加缓存， 不但无法满足高并发

  量， 同时也会给MySQL带来巨大的负担。
* 加速请求响应： 即使查询单条后端数据足够快（例如select\*from table

  where id=） ， 那么依然可以使用缓存， 以Redis为例子， 每秒可以完成数万

  次读写， 并且提供的批量操作可以优化整个IO链的响应时间。
