作者:唐尤华
来源:https://urlify.cn/FRvaAv
文章插图
为什么要在%20JAVA%20分布式应用程序中使用缓存?
在提高应用程序速度和性能上,每一毫秒都很重要 。根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有%2053%%20的手机用户会离开 。
缓存是让分布式应用程序加速的重要技术之一 。存储的信息越接近%20CPU,访问速度就越快 。从%20CPU%20缓存中加载数据比从%20RAM%20中加载要快得多,比从硬盘或网络上加载要快得多得多 。
要存储经常访问的数据,分布式应用程序需要在多台机器中维护缓存 。分布式缓存是降低分布式应用程序延迟、提高并发性和可伸缩性的一种重要策略 。
redis%20是一种流行的开源内存数据存储,可用作数据库、缓存或消息代理 。由于是从内存而非磁盘加载数据,Redis%20比许多传统的数据库解决方案更快 。
然而,对开发者来说让%20Redis%20分布式缓存正确工作是一个巨大挑战 。例如,必须谨慎处理本地缓存失效,即替换或删除缓存条目 。每次更新或删除存储计算机本地缓存中的信息时,必须更新分布式缓存系统所有计算机内存中的缓存 。
好消息是,有一些类似%20Redisson%20这样的%20Redis%20框架,可以帮助构建应用程序所需的分布式缓存 。下一节将讨论%20Redisson%20中分布式缓存的三个重要实现:Maps、Spring%20Cache%20和%20JCache 。
1.%20Redisson%20分布式缓存Redisson%20是一个基于%20Redis%20的框架,用%20Java%20实现了一个%20Redis%20包装器(wrApper)和接口 。Redisson%20包含许多常见的%20Java%20类,例如分布式对象、分布式服务、分布式锁和同步器,以及分布式集合 。正如下面即将介绍的,其中一些接口同时支持分布式缓存和本地缓存 。
2.%20MapMap%20是%20Java%20最有用的集合之一 。Redisson%20提供了一个名为%20RMap%20的%20Java%20Map%20实现,支持本地缓存 。
如果希望执行多个读操作或网络环回(roundtrip),应使用支持本地缓存的%20RMap 。通过本地存储%20Map%20数据,RMap%20比不启用本地缓存时快45倍 。通用分布式缓存使用%20RMapCache,本地缓存使用%20RLocalCachedMap 。
Redis%20引擎自身能够执行缓存,不需要在客户端执行代码 。然而,虽然本地缓存能显著提高读取速度,但需要由开发人员维护,并且可能需要一些开发工作 。Redisson%20为开发人员提供了%20RLocalCachedMap%20对象,让本地缓存实现起来更容易 。
下面的代码展示了如何初始化%20RMapCache%20对象:
RMapCache<String,SomeObject>map=redisson.getMapCache("anyMap");map.put("key1",newSomeObject(),10,TimeUnit.MINUTES,10,TimeUnit.SECONDS);
上面的代码将字符串%20"key1"%20放到%20RMapCache%20中,并与%20SomeObject()%20关联 。然后它指定了两个参数,TTL设为10分钟、最大空闲时间10秒 。当不再需要时,应销毁%20RMapCache%20对象:
map.destroy();
【最强 Java Redis 客户端】Redisson%20关闭后不用再做销毁操作 。3.%20Spring%20CacheSpring%20是一个用于构建企业级%20Web%20应用程序的%20Java%20框架,也提供了缓存支持 。
Redisson%20包含了%20Spring%20缓存功能,提供两个对象:RedissonSpringCacheManager%20和%20RedissonSpringLocalCachedCacheManager 。RedissonSpringLocalCachedCacheManager%20支持本地缓存 。
下面是一个%20RedissonSpringLocalCachedCacheManager%20对象的示例配置:
文章插图
此外,还可以读取 JSON 或 YAML 文件配置 RedissonSpringCacheManager 。
与 RMaps 一样,每个 RedissonSpringCacheManager 实例都有两个重要参数: ttl(生存时间)和 maxIdleTime 。如果这些参数设为0或者没有定义,那么数据将无限期地保留在缓存中 。
4. JCacheJCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象 。
Redisson 提供了 Redis 的 JCache API 实现 。下面是在 Redisson 中使用默认配置调用 JCache API 的示例:
MutableConfiguration<String,String>config=newMutableConfiguration<>();CacheManagermanager=Caching.getCachingProvider().getCacheManager();Cache<String,String>cache=manager.createCache("namedCache",config);
此外,还可以使用自定义配置文件、Redisson Config 对象或 Redisson RedissonClient 对象配置 JCache 。例如,下面的代码使用自定义 Redisson 配置来调用 JCache:
推荐阅读
- 汽车上实用性最强的几大配置,买车时最好花钱加装
- Java 字符串常量池介绍,String Pool 的实现
- JavaScript防抖与节流,你知道多少?
- 清晰明了的JavaScript版动态规划
- 五分钟带你掌握web前端开发九个JavaScript小技巧
- Java解决Ajax跨域解决方案
- JavaScript异常错误处理指南
- 记住这四点,彻底搞懂Redis到底快在哪里
- 如何排查java进程cpu100%的问题
- 最强排肾毒素的食物