https://dzone.com/articles/java-distributed-caching-in-redisJava分布式应用为什么要用缓存?在提高应用程序速度和性能方面,每一毫秒都很重要。根据谷歌的一项研究,如果网站未在3秒或更短时间内加载,则53%的手机用户会离开该网站。缓存是加速分布式应用程序的重要技术之一。信息存储到CPU越近,访问它的速度就越快。从CPU缓存中加载数据比从RAM中加载数据快得多,比从硬盘或网络中加载数据快得多。为了存储频繁访问的数据,分布式应用程序需要跨多台机器维护缓存。分布式缓存是降低延迟、提高分布式应用程序的并发性和可扩展性的重要策略。Redis是一种流行的开源内存数据存储,可用作数据库、缓存或消息代理。因为它从内存而不是磁盘加载数据,Redis比许多传统数据库解决方案更快。然而,让Redis分布式缓存正常工作对开发者来说是一个巨大的挑战。例如,必须小心处理本地缓存失效,即替换或删除缓存条目。每次更新或删除存储在计算机本地缓存中的信息时,都必须更新分布式缓存系统中所有计算机上内存中的缓存。好消息是,Redisson等Redis框架可以帮助构建您的应用程序所需的分布式缓存。下一节将讨论Redisson中分布式缓存的三个重要实现:Maps、SpringCache和JCache。1、Redisson分布式缓存Redisson是一个基于Redis的框架,用Java实现了一个Redis包装器(wrapper)和接口。Redisson包括许多常见的Java类,例如分布式对象、分布式服务、分布式锁和同步器以及分布式集合。正如下面将要描述的,这些接口中的一些既支持分布式缓存又支持本地缓存。2.MapMap是Java中最有用的集合之一。Redisson提供了一个JavaMap实现,称为RMap,支持本地缓存。如果您希望执行多个读取操作或网络往返,您应该使用支持本地缓存的RMap。通过在本地存储Map数据,RMap比不启用本地缓存快45倍。一般分布式缓存使用RMapCache,本地缓存使用RLocalCachedMap。Redis引擎本身可以进行缓存,而无需在客户端执行代码。然而,虽然本地缓存可以显着提高读取速度,但它需要由开发人员维护并且可能需要一些开发工作。Redisson为开发者提供了RLocalCachedMap对象,方便实现本地缓存。以下代码显示了如何初始化RMapCache对象:RMapCachemap=redisson.getMapCache("anyMap");map.put("key1",newSomeObject(),10,TimeUnit.MINUTES,10,TimeUnit。秒);上面的代码将字符串“key1”放入RMapCache并将其与SomeObject()相关联。然后它指定了两个参数,TTL设置为10分钟,最大空闲时间为10秒。当不再需要时,应该销毁RMapCache对象:map.destroy();Redisson关闭后不需要销毁。3.SpringCacheSpring是一个用于构建企业级Web应用的Java框架,同时也提供缓存支持。Redisson包含了Spring的缓存功能,提供了两个对象:RedissonSpringCacheManager和RedissonSpringLocalCachedCacheManager。RedissonSpringLocalCachedCacheManager支持本地缓存。这是RedissonSpringLocalCachedCacheManager对象的示例配置:@Configuration@ComponentScan@EnableCachingpublicstaticclassApplication{@Bean(destroyMethod="shutdown")RedissonClientredisson()throwsIOException{Configconfig=newConfig();config.useClusterServers().addNodeAddress("117.0.0.0""127.0.0.1:7001");returnRedisson.create(config);}@BeanCacheManagercacheManager(RedissonClientredissonClient){Mapconfig=newHashMap();//新建“testMap”缓存:ttl=24分钟,maxIdleTime=12分钟config.put("testMap",newCacheConfig(24*60*1000,12*60*1000));returnnewRedissonSpringCacheManager(redissonClient,config);}}另外,你也可以通过读取JSON或者YAML文件来配置RedissonSpringCacheManager。与RMaps一样,每个RedissonSpringCacheManager实例都有两个重要参数:ttl(生存时间)和maxIdleTime。如果这些参数设置为0或未定义,则数据将在缓存中保留最长时间。4.JCacheJCache是一个Java缓存API,允许开发人员从缓存中临时存储、检索、更新和删除对象。Redisson为Redis提供了JCacheAPI的实现。下面是在Redisson中使用默认配置调用JCacheAPI的例子:=经理。createCache("namedCache",config);此外,可以使用自定义配置文件、RedissonConfig对象或RedissonRedissonClient对象来配置JCache。例如,以下代码使用自定义Redisson配置来调用JCache:;CacheManagermanager=Caching.getCachingProvider().getCacheManager();Cachecache=manager.createCache("namedCache",config);Redisson的JCache实现已经通过了JCacheTCK的所有测试。你也可以自己验证一下。