- 14.2. Spring Cache整合
- 14.2.1. Spring Cache - 本地缓存和数据分片
- 14.2.2. Spring Cache - JSON和YAML配置文件格式:
14.2. Spring Cache整合
Redisson提供了将Redis无缝整合到Spring框架的能力。Redisson依照Spring Cache标准提供了基于Redis的Spring缓存实现。 每个缓存(Cache)实例都提供了了两个重要的可配置参数:过期时间(ttl)和最长空闲时间(maxIdleTime),如果这两个参数都未指定或值为0,那么实例管理的数据将永久保存。配置范例:
@Configuration@ComponentScan@EnableCachingpublic static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson() throws IOException {Config config = new Config();config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) {Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();// 创建一个名称为"testMap"的缓存,过期时间ttl为24分钟,同时最长空闲时maxIdleTime为12分钟。config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));return new RedissonSpringCacheManager(redissonClient, config);}}
Spring Cache也可以通过JSON或YAML配置文件来配置:
@Configuration@ComponentScan@EnableCachingpublic static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson(@Value("classpath:/redisson.json") Resource configFile) throws IOException {Config config = Config.fromJSON(configFile.getInputStream());return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) throws IOException {return new RedissonSpringCacheManager(redissonClient, "classpath:/cache-config.json");}}
14.2.1. Spring Cache - 本地缓存和数据分片
Redisson提供了几种不同的Spring Cache Manager,按功能可以分为以下两大类:
本地缓存(Local Cache) 类 — 本地缓存(Local Cache)也叫就近缓存(Near Cache)。这类Spring Cache的使用主要用于在特定的场景下,映射缓存(MapCache)上的高度频繁的读取操作,使网络通信都被视为瓶颈的情况。Redisson与Redis通信的同时,还将部分数据保存在本地内存里。这样的设计的好处是它能将读取速度提高最多 45倍 。
数据分片(Sharding) 类 — 数据分片(Sharding)类仅适用于Redis集群环境下,因此带有数据分片(Sharding)功能的Spring Cache也叫集群分布式Spring缓存。它利用分库的原理,将单一一个缓存结构切分为若干个小的缓存,并均匀的分布在集群中的各个槽里。这样的设计能使Spring缓存突破Redis自身的容量限制,让其容量随集群的扩大而增长。在扩容的同时,还能够使读写性能和元素淘汰处理能力随之成线性增长。
以下列表是Redisson提供的所有Spring Cache Manager的名称及其特性:
| 类名 | 本地缓存功能 Local Cache | 数据分片功能 Sharding |
|---|---|---|
| RedissonSpringCacheManager | No | No |
| RedissonClusteredSpringLocalCachedCacheManager仅限于Redisson PRO版本 | Yes | No |
| RedissonClusteredSpringCacheManager仅限于Redisson PRO版本 | No | Yes |
| RedissonSpringClusteredLocalCachedCacheManager仅限于Redisson PRO版本 | Yes | Yes |
在初始化org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager对象和org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager对象的时候可以通过LocalCachedMapOptions对象来配置选项。
LocalCachedMapOptions options = LocalCachedMapOptions.defaults()// 淘汰机制有LFU, LRU和NONE这几种算法策略可供选择.evictionPolicy(EvictionPolicy.LFU).cacheSize(1000)// 如果该值是`真(true)`时,在该实例执行更新和删除操作的同时,将向其他所有的相同实例发// 送针对该元素的淘汰消息。其他相同实例在收到该消息以后,会同时删除自身的缓存。下次读取// 该元素时会从Redis服务器获取。.invalidateEntryOnChange(false)// 每个Map本地缓存里元素的有效时间,默认毫秒为单位.timeToLive(10000)// 或者.timeToLive(10, TimeUnit.SECONDS)// 每个Map本地缓存里元素的最长闲置时间,默认毫秒为单位.maxIdle(10000)// 或者.maxIdle(10, TimeUnit.SECONDS);
Redisson为每个Spring缓存实例都提供了两个很重要的参数:ttl和maxIdleTime,当两个参数设为0或为指定值时,缓存数据将永久保留。
完整的使用范例如下:
@Configuration@ComponentScan@EnableCachingpublic static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson() throws IOException {Config config = new Config();config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) {Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();LocalCachedMapOptions options = LocalCachedMapOptions.defaults().evictionPolicy(EvictionPolicy.LFU).cacheSize(1000);// 创建一个名称为"testMap"的缓存,过期时间ttl为24分钟,同时最长空闲时maxIdleTime为12分钟。config.put("testMap", new LocalCachedCacheConfig(24*60*1000, 12*60*1000, options));return new RedissonSpringLocalCachedCacheManager(redissonClient, config);}}
也可以通过JSON或YAML配置文件来设置相关缓存参数:
@Configuration@ComponentScan@EnableCachingpublic static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson(@Value("classpath:/redisson.yaml") Resource configFile) throws IOException {Config config = Config.fromYAML(configFile.getInputStream());return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) throws IOException {return new RedissonSpringLocalCachedCacheManager(redissonClient, "classpath:/cache-config.yaml");}}
14.2.2. Spring Cache - JSON和YAML配置文件格式:
JSON:
{"testMap": {"ttl": 1440000,"maxIdleTime": 720000,"localCacheOptions": {"invalidationPolicy": "ON_CHANGE","evictionPolicy": "NONE","cacheSize": 0,"timeToLiveInMillis": 0,"maxIdleInMillis": 0}}}
YAML:
---testMap:ttl: 1440000maxIdleTime: 720000localCacheOptions:invalidationPolicy: "ON_CHANGE"evictionPolicy: "NONE"cacheSize: 0timeToLiveInMillis: 0maxIdleInMillis: 0
以上内容是名叫testMap的Spring缓存实例的配置方式。
需要注意的是:localCacheOptions配置实例仅适用于org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager类和org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager类。
