文章目录
- 概述
- 扩容思路
- 垂直扩展(纵向扩展)
- 水平扩展(横向扩展)
- 缓存思路
- 缓存特征
- 缓存命中率影响因素
- 缓存分类和应用场景
- Guava Cache
- Memcache
- Redis
概述
这里只是讲通用的思路,实际高并发的场景需要根据实际情况来决定方案。
扩容思路
举个例子: 一共有60块砖, 1个工人。每次只能搬运10块。每次搬运耗时10分钟,这样的话,1个工人搬运完60块砖,就需要1个小时。
垂直扩展(纵向扩展)
提高系统部件能力。
用上面的例子来解释下就是:目前有120块砖要搬(相当于高并发场景),如果使用垂直扩展的话,提高运行效率,我们调整为将工人
- 每次搬砖20块,每次搬运耗时10分钟,1个小时处理完成。
- 或者每次10块,每次搬运耗时5分钟,1个小时处理完成。
水平扩展(横向扩展)
增加更多系统成员,就是我们通常说的集群
还是上面的例子,120块砖要搬(相当于高并发场景) ,工人的效率保持不变,每次只能搬运10块,每次搬运耗时10分钟,一个小时依然是60块砖。 使用水平扩展来模拟的话,那就增加一名工人,两名工人,1个小时处理120块砖。
缓存思路
缓存特征
- 命中率: 命中数/(命中数 没命中数)
- 最大元素(空间): 当缓存超出设置的容量时,会触发缓存清空策略。 因此设置合理的缓存空间,将有效的提高命中率
- 清空策略: FIFO(先进先出)、LFU(最少使用)、LRU(最近使用)、过期时间、随机清理。
缓存命中率影响因素
- 业务场景和业务需求
- 缓存的设计(粒度和策略)
- 缓存容量和基础设施
- …
缓存分类和应用场景
- 本地缓存:编程实现(成员变量、局部变量、静态变量)、Guava Cache
- 分布式缓存: Redis、Memcache
Guava Cache
借鉴了ConcurrencyHashMap的设计思想
Memcache
Redis
Redis的系列文章,请参考我的Redis专栏 Redis手札