缓存,消息队列,分库分表是高并发解决方案三剑客。
缓存之所以能够让系统“更快”,本质上做到了如下两点:
-
减小 CPU 消耗
将原来需要实时计算的内容提前算好、把一些公用的数据进行复用,这可以减少 CPU 消耗,从而提升响应性能。
-
减小 I/O 消耗
将原来对网络、磁盘等较慢介质的读写访问变为对内存等较快介质的访问,从而提升响应性能。
对于应用系统来讲,我们经常将缓存划分为本地缓存和分布式缓存。
本地缓存 :应用中的缓存组件,缓存组件和应用在同一进程中,缓存的读写非常快,没有网络开销。但各应用或集群的各节点都需要维护自己的单独缓存,无法共享缓存。
分布式缓存:和应用分离的缓存组件或服务,与本地应用隔离,多个应用可直接共享缓存。
这篇文章,聊聊本地缓存和分布式缓存,希望大家读完之后,在面对不同的业务场景时,能够做出合理的缓存选型。
1 本地缓存 JDK Map
JDK Map 经常用于缓存实现:
-
HashMap
HashMap 是一种基于哈希表的集合类,它提供了快速的插入、查找和删除操作。可以将键值对作为缓存项的存储方式,将键作为缓存项的唯一标识符,值作为缓存项的内容。
-
ConcurrentHashMap
ConcurrentHashMap 是线程安全的 HashMap,它在多线程环境下可以保证高效的并发读写操作。
-
LinkedHashMap
LinkedHashMap 是一种有序的 HashMap ,它保留了元素插入的顺序,可以按照插入顺序或者访问顺序进行遍历。
-
TreeMap
TreeMap 是一种基于红黑树的有序 Map,它可以按照键的顺序进行遍历。
笔者曾经负责艺龙红包系统,红包活动就是存储在 ConcurrentHashMap 中 ,通过定时任务刷新缓存 。