1. 什么是分布式缓存 ?
传统意义上的缓存是保存在应用本身的(JVM),只有应用本身可以对缓存进行读写。在分布式系统中,将缓存抽取出来做成了缓存中间件(数据库),分布式应用都可以对分布式缓存进行读写操作。并且分布式缓存具有高性能和高吞吐量的特性。
2. 为什么使用分布式缓存 ?
分布式缓存主要作用:
- 高性能(提高系统性能);
- 高并发(提高系统并发);
- 减轻关系型数据库压力
2.1 高性能和高并发
随着系统的复杂性和用户量的增加,并发越来越大,我们会发现系统变得越来越慢。因为关系型数据库的 QPS 和 TPS 是有限的,例如 MySQL 数据库,当 QPS 到达 3000 左右的时候(根据实际配置),MySQL 基本上就达到了瓶颈,数据处理就会急剧下降。处理几条查询 SQL 可能会消耗 1 秒左右的时间。
系统性能达到瓶颈后,我们需要性能更高的组件来减轻关系型数据库的压力并提高系统的性能,这个时候分布式缓存就登上了历史的舞台。缓存中的数据以 key-value 的方式存储数据,通过 key 查询 value 耗时大概在 3ms 左右,相比关系型数据 1秒的查询时间,性能提升 300 多倍这就提高了系统的性能。
系统并发达到瓶颈后,我们需要提高并发更高的组件来减轻关系型数据库的压力并提高系统并发性能,这个时候分布式缓存就登上了历史的舞台,例如 Redis QPS 基本稳定在 30000。相比关系型数据有 10 倍左右的提升。
我们可以把关系型数据库的数据查询出来存放到分布式缓存中,以提高系统的性能和并发性。当然分布式缓存还有许多其它用途:缓存、排行榜、计数器、分布式会话、分布式锁、涉及网络(点赞、关注、好友)、最新列表、消息系统、即时通讯 等。
3. 分布式缓存引入的优缺点
3.1 优点
分布式缓存可以提高系统的性能、提高系统并发、减轻关系型数据库的压力。
3.2 缺点
- 提高系统的复杂度
- 缓存系统与关系型数据库双写下数据不一致的问题
- 缓存雪崩
- 缓存击穿
- 缓存穿透
- 缓存并发竞争
- 运维成本增加
4. 参考文献
云数据库 MySQL 性能白皮书 - 白皮书 - 文档中心 - 腾讯云 (tencent.com)
独享型测试数据_云数据库 RDS_性能白皮书_MySQL_MySQL 5.7测试数据_华为云 (huaweicloud.com)
On Redis, Memcached, Speed, Benchmarks and The Toilet (antirez.com)