Java 框架之Redis 分布式缓存

Java 框架之Redis 分布式缓存

作者:唐尤华 2019-07-04 15:13:16

存储

存储软件

分布式

Redis 在提高应用程序速度和性能上,每一毫秒都很重要。根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有 53% 的手机用户会离开。

[[269630]]

https://dzone.com/articles/java-distributed-caching-in-redis

为什么要在 Java 分布式应用程序中使用缓存?

在提高应用程序速度和性能上,每一毫秒都很重要。根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有 53% 的手机用户会离开。

缓存是让分布式应用程序加速的重要技术之一。存储的信息越接近 CPU,访问速度就越快。从 CPU 缓存中加载数据比从 RAM 中加载要快得多,比从硬盘或网络上加载要快得多得多。

要存储经常访问的数据,分布式应用程序需要在多台机器中维护缓存。分布式缓存是降低分布式应用程序延迟、提高并发性和可伸缩性的一种重要策略。

Redis 是一种流行的开源内存数据存储,可用作数据库、缓存或消息代理。由于是从内存而非磁盘加载数据,Redis 比许多传统的数据库解决方案更快。

然而,对开发者来说让 Redis 分布式缓存正确工作是一个巨大挑战。例如,必须谨慎处理本地缓存失效,即替换或删除缓存条目。每次更新或删除存储计算机本地缓存中的信息时,必须更新分布式缓存系统所有计算机内存中的缓存。

好消息是,有一些类似 Redisson 这样的 Redis 框架,可以帮助构建应用程序所需的分布式缓存。下一节将讨论 Redisson 中分布式缓存的三个重要实现:Maps、Spring Cache 和 JCache。

1. Redisson 分布式缓存

Redisson 是一个基于 Redis 的框架,用 Java 实现了一个 Redis 包装器(wrapper)和接口。Redisson 包含许多常见的 Java 类,例如分布式对象、分布式服务、分布式锁和同步器,以及分布式集合。正如下面即将介绍的,其中一些接口同时支持分布式缓存和本地缓存。

2. Map

Map 是 Java 最有用的集合之一。Redisson 提供了一个名为 RMap 的 Java Map 实现,支持本地缓存。

如果希望执行多个读操作或网络环回(roundtrip),应使用支持本地缓存的 RMap。通过本地存储 Map 数据,RMap 比不启用本地缓存时快45倍。通用分布式缓存使用 RMapCache,本地缓存使用 RLocalCachedMap。

Redis 引擎自身能够执行缓存,不需要在客户端执行代码。然而,虽然本地缓存能显著提高读取速度,但需要由开发人员维护,并且可能需要一些开发工作。Redisson 为开发人员提供了 RLocalCachedMap 对象,让本地缓存实现起来更容易。

下面的代码展示了如何初始化 RMapCache 对象:

  1. RMapCache<String, SomeObject> map = redisson.getMapCache("anyMap"); 
  2. map.put("key1", new SomeObject(), 10, TimeUnit.MINUTES, 10, TimeUnit.SECONDS); 

上面的代码将字符串 “key1” 放到 RMapCache 中,并与 SomeObject() 关联。然后它指定了两个参数,TTL设为10分钟、***空闲时间10秒。

当不再需要时,应销毁 RMapCache 对象:

  1. map.destroy(); 

Redisson 关闭后不用再做销毁操作。

3. Spring Cache

Spring 是一个用于构建企业级 Web 应用程序的 Java 框架,也提供了缓存支持。

Redisson 包含了 Spring 缓存功能,提供两个对象:RedissonSpringCacheManager 和 RedissonSpringLocalCachedCacheManager。RedissonSpringLocalCachedCacheManager 支持本地缓存。

下面是一个

RedissonSpringLocalCachedCacheManager 对象的示例配置:

  1. @Configuration 
  2. @ComponentScan 
  3. @EnableCaching 
  4. public static class Application { 
  5.     @Bean(destroyMethod="shutdown"
  6.     RedissonClient redisson() throws IOException { 
  7.         Config config = new Config(); 
  8.         config.useClusterServers() 
  9.                 .addNodeAddress("127.0.0.1:7004""127.0.0.1:7001"); 
  10.         return Redisson.create(config); 
  11.     } 
  12.     @Bean 
  13.     CacheManager cacheManager(RedissonClient redissonClient) { 
  14.         Map<String, CacheConfig> config = new HashMap<String, CacheConfig>(); 
  15.         // 新建 "testMap" 缓存:ttl=24分钟,maxIdleTime=12分钟 
  16.         config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000)); 
  17.         return new RedissonSpringCacheManager(redissonClient, config); 
  18.     } 

此外,还可以读取 JSON 或 YAML 文件配置 RedissonSpringCacheManager。

与 RMaps 一样,

每个 RedissonSpringCacheManager 实例都有两个重要参数: ttl(生存时间)和 maxIdleTime。如果这些参数设为0或者没有定义,那么数据将***期地保留在缓存中。

4. JCache

JCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象。

Redisson 提供了 Redis 的 JCache API 实现。下面是在 Redisson 中使用默认配置调用 JCache API 的示例:

  1. MutableConfiguration<String, String> config = new MutableConfiguration<>(); 
  2. CacheManager manager = Caching.getCachingProvider().getCacheManager(); 
  3. Cache<String, String> cache = manager.createCache("namedCache", config); 

此外,还可以使用自定义配置文件、Redisson Config 对象或 Redisson RedissonClient 对象配置 JCache。例如,下面的代码使用自定义 Redisson 配置来调用 JCache:

  1. MutableConfiguration<String, String> jcacheConfig = new MutableConfiguration<>(); 
  2. Config redissonCfg = ... 
  3. Configuration<String, String> config = RedissonConfiguration.fromConfig(redissonCfg, jcacheConfig); 
  4. CacheManager manager = Caching.getCachingProvider().getCacheManager(); 
  5. Cache<String, String> cache = manager.createCache("namedCache", config); 

Redisson 的 JCache 实现已经通过 JCache TCK 的所有测试。你也可以自行验证。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/232891.html<

(0)
管理的头像管理
上一篇2025-04-20 09:12
下一篇 2025-04-20 09:13

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注