当前位置:首页 > 技术学院 > 技术前线
[导读]在高性能服务架构设计中,缓存是不可或缺的环节。在实际项目中,我们通常会将一些热点数据存储在Redis或Memcached等缓存中间件中,只有在缓存访问未命中时才查询数据库。

设计强悍的本地缓存需综合考虑数据结构、淘汰策略、更新机制及监控功能,以下是关键设计要点:

核心设计原则

‌数据结构选择‌:优先使用ConcurrentHashMap等线程安全的数据结构,避免并发访问时的性能瓶颈。 ‌1‌淘汰策略‌:推荐使用LRU(最近最少使用)或FIFO(先进先出)策略,结合容量限制确保内存高效利用。 ‌

‌更新策略‌:采用Write-Through(写时穿透)或Write-Behind(写后延迟)策略,平衡数据一致性和写入性能。 ‌

性能优化

‌过期策略‌:支持基于创建时间或访问时间的动态过期机制,例如设置5分钟未访问则自动失效。 ‌

‌多级缓存架构‌:结合分布式缓存(如Redis)作为后备,提升命中率并减少数据库压力。 ‌

监控与维护

‌动态调整‌:通过缓存命中率、写入延迟等指标动态调整容量和策略。 ‌

‌异常处理‌:设置缓存失效回退机制,避免因缓存故障导致服务中断。 ‌

典型应用场景

‌高频访问静态数据‌:如系统配置、字典表等,命中率可达90%以上。 ‌

‌实时性要求低的数据‌:如商品分类列表,可设置较长的过期时间(如1小时)。 ‌

工具选择

‌Java框架‌:Guava、Caffeine提供丰富的API和监控功能,适合复杂业务场景。 ‌

‌内存管理‌:通过maximumSize限制内存占用,避免OOM异常。 ‌

缓存是一种常见的技术,目标是提高系统的性能和可伸缩性。 缓存将经常访问的数据暂时复制到靠近应用程序的快速存储。 当快速数据存储比其原始数据存储更靠近应用程序时,缓存可以通过更快地提供数据,大幅改善客户端应用程序的响应时间。

当客户端实例重复读取同一数据时,缓存是最有效的方式,尤其是在原始数据存储存在以下情况时:

原始数据存储保持相对静态。

受限于激烈的资源争用。

它距离很远,网络延迟可能会导致对存储的访问速度变慢。

假设 Tailwind Traders 正在向产品演示应用程序添加一项新功能,以增加其零售网站的客户流量。 事件功能在移动应用顶部添加了一个横幅,以宣布特价优惠和有限的产品折扣。 新优惠在整点发布,每种优惠的剩余产品可用性在每个订单得到处理后更新。 第一位响应新优惠的客户将获得双倍折扣! 建议客户经常查看其移动应用,了解优惠和产品可用性的相关更新。 若要实现这项新功能,你需要设计一个可支持内存中快速读取和写入的缓存解决方案。

1. 确定缓存需求

分析业务场景:明确哪些数据需要缓存。通常,访问频繁、变化频率低的数据适合缓存,如商品分类列表、系统配置参数等。而实时性要求极高、频繁变动的数据(如股票价格、即时聊天消息)可能不适合长时间缓存。

设定性能目标:确定缓存机制要达到的性能指标,例如缓存命中率要达到多少(一般建议 80%以上),缓存数据的读取和写入延迟控制在什么范围内等。

2. 选择缓存技术

内存缓存:

Redis:是最常用的内存缓存之一,支持多种数据结构(如字符串、哈希、列表、集合等),具有高性能、可持久化、分布式等特点。适用于各种规模的应用,能满足不同业务场景下的数据缓存需求。

Memcached:也是一款流行的内存缓存系统,专注于简单的键值存储,在处理高并发读写时性能出色。常用于缓存数据库查询结果、网页片段等。

分布式缓存:

Apache Ignite:提供分布式内存计算和数据存储功能,支持集群环境下的缓存管理,具备强大的容错性和可扩展性,适合大规模分布式系统。

Couchbase:是一个分布式文档数据库,同时也可作为高性能缓存使用,支持多数据中心部署,能满足复杂的企业级应用需求。

3. 设计缓存结构

键值设计:

键的设计:确保缓存键的唯一性和可读性。键名应能清晰反映缓存数据的内容,例如以 “category_list_${language}_${version}” 表示特定语言和版本的商品分类列表缓存键。同时,要避免键名过长,以免占用过多内存和影响查询效率。

值的设计:根据数据类型和业务需求选择合适的值结构。对于简单数据,直接使用字符串存储即可;对于复杂对象,可以序列化为 JSON 或二进制格式(如 Protocol Buffers)后存储,以节省内存空间。

缓存分区:

按功能分区:将不同业务功能的数据缓存到不同区域,如用户相关缓存、商品相关缓存等,便于管理和维护。

按数据热度分区:把热门数据和冷门数据分开缓存。热门数据可以放在高性能的缓存区域或设置较短的过期时间以保证数据新鲜度;冷门数据则可以存储在相对较慢但成本较低的存储介质中,或者设置较长的过期时间。

4. 缓存策略

缓存过期策略:

绝对过期时间:为缓存数据设置固定的过期时间,到期后缓存自动失效。例如,对于一些时效性较强的新闻资讯缓存,可设置 1 小时的过期时间。

滑动过期时间:每次访问缓存数据时,自动延长其过期时间。适用于经常被访问的数据,如热门商品详情缓存,只要有用户访问,就保持缓存的有效性。

缓存更新策略:

写后更新:在数据发生变化后,立即更新缓存。这种方式简单直接,但可能会导致短时间内缓存数据与实际数据不一致。例如,在更新商品价格后,马上更新对应的商品价格缓存。

读写锁策略:在读取缓存时加读锁,允许多个线程同时读取;在更新缓存时加写锁,独占缓存资源,确保数据一致性。这种策略适用于读多写少的场景。

缓存淘汰策略:

LRU(最近最少使用):当缓存达到最大容量时,淘汰最近最少使用的缓存数据。许多缓存库(如 Redis)都支持 LRU 淘汰策略,它能保证经常使用的数据始终留在缓存中。

LFU(最不经常使用):淘汰使用频率最低的缓存数据。与 LRU 不同,LFU 更关注数据的使用频率,而非最近使用时间。

5. 缓存一致性

双写模式:在更新数据库的同时更新缓存,确保两者数据一致。但要注意操作顺序和可能出现的并发问题,例如先更新缓存再更新数据库时,如果数据库更新失败,可能导致数据不一致。

失效模式:更新数据库时,使关缓存失效,下次读取时重新从数据库加载数据并更新缓存。这种方式相对简单,但可能会在缓存失效期间出现短暂的数据不一致。

在高性能服务架构设计中,缓存是不可或缺的环节。在实际项目中,我们通常会将一些热点数据存储在Redis或Memcached等缓存中间件中,只有在缓存访问未命中时才查询数据库。

在提高访问速度的同时,还可以减轻数据库的压力。

为什么要使用本地缓存?

随着不断的发展,这个架构也得到了完善。在某些场景下,仅仅使用Redis类的远程缓存可能还不够。需要进一步与本地缓存配合使用,比如Guava或者Caffeine,从而再次提高程序的响应速度和服务性能。

由此,形成了以本地缓存作为一级缓存、远程缓存作为二级缓存的二级缓存架构。

总结:

本地缓存基于本地环境的内存,访问速度非常快。对于一些变化频率不高、实时性要求不高的数据,可以放在本地缓存中,以提高访问速度。

使用本地缓存可以减少与Redis类的远程缓存的数据交互,减少网络I/O开销,减少这个过程中网络通信的耗时。

本地存储的基本功能

它可以存储、读取和写入。

原子操作(线程安全),例如ConcurrentHashMap。

可以设置缓存的最大限制。

超过最大限制有相应的淘汰策略,如LRU、LFU。

统计监控。

方案选择

1.使用ConcurrentHashMap。

缓存的本质是KV存储在内存中的数据结构,对应JDK中的线程安全ConcurrentHashMap,但是要实现缓存,需要考虑消除、最大限制、消除缓存过期时间等功能。

优点ConcurrentHashMap是实现简单,不需要引入第三方包,所以比较适合一些简单的业务场景。

缺点是如果需要更多的功能,需要定制开发,成本会比较高,稳定性和可靠性难以保证。

对于更复杂的场景,建议使用相对稳定的开源工具。

2. 使用Guava缓存

Guava是Google团队开源的一个Java核心增强库。它包括集合、并发原语、缓存、IO、反射和其他工具箱。性能和稳定性有保证,应用广泛。

Guava Cache 支持许多功能:

支持最大容量限制。

支持两种过期删除策略。

支持简单的统计功能。 它是基于LRU算法实现的。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

特朗普集团近日取消了其新推出的T1智能手机“将在美国制造”的宣传标语,此举源于外界对这款手机能否以当前定价在美国本土生产的质疑。

关键字: 特朗普 苹果 AI

美国总统特朗普在公开场合表示,他已要求苹果公司CEO蒂姆·库克停止在印度建厂,矛头直指该公司生产多元化的计划。

关键字: 特朗普 苹果 AI

4月10日消息,据媒体报道,美国总统特朗普宣布,美国对部分贸易伙伴暂停90天执行新关税政策,同时对中国的关税提高到125%,该消息公布后苹果股价飙升了15%。这次反弹使苹果市值增加了4000多亿美元,目前苹果市值接近3万...

关键字: 特朗普 AI 人工智能 特斯拉

3月25日消息,据报道,当地时间3月20日,美国总统特朗普在社交媒体平台“真实社交”上发文写道:“那些被抓到破坏特斯拉的人,将有很大可能被判入狱长达20年,这包括资助(破坏特斯拉汽车)者,我们正在寻找你。”

关键字: 特朗普 AI 人工智能 特斯拉

1月22日消息,刚刚,新任美国总统特朗普放出重磅消息,将全力支持美国AI发展。

关键字: 特朗普 AI 人工智能

特朗普先生有两件事一定会载入史册,一个是筑墙,一个是挖坑。在美墨边境筑墙的口号确保边境安全,降低因非法移民引起的犯罪率过高问题;在中美科技产业之间挖坑的口号也是安全,美国企业不得使用对美国国家安全构成威胁的电信设备,总统...

关键字: 特朗普 孤立主义 科技产业

据路透社1月17日消息显示,知情人士透露,特朗普已通知英特尔、铠侠在内的几家华为供应商,将要撤销其对华为的出货的部分许可证,同时将拒绝其他数十个向华为供货的申请。据透露,共有4家公司的8份许可被撤销。另外,相关公司收到撤...

关键字: 华为 芯片 特朗普

曾在2018年时被美国总统特朗普称作“世界第八奇迹”的富士康集团在美国威斯康星州投资建设的LCD显示屏工厂项目,如今却因为富士康将项目大幅缩水并拒绝签订新的合同而陷入了僵局。这也导致富士康无法从当地政府那里获得约40亿美...

关键字: 特朗普 富士康

今年5月,因自己发布的推文被贴上“无确凿依据”标签而与推特发生激烈争执后,美国总统特朗普签署了一项行政令,下令要求重审《通信规范法》第230条。

关键字: 谷歌 facebook 特朗普

众所周知,寄往白宫的所有邮件在到达白宫之前都会在他地进行分类和筛选。9月19日,根据美国相关执法官员的通报,本周早些时候,执法人员截获了一个寄给特朗普总统的包裹,该包裹内包含蓖麻毒蛋白。

关键字: 美国 白宫 特朗普
关闭