1、配置方法
2、第三方框架整合
3、相关API文档
4、工具类
import java.util.Map;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RBucket;
import org.redisson.api.RCountDownLatch;
import org.redisson.api.RDeque;
import org.redisson.api.RList;
import org.redisson.api.RLock;
import org.redisson.api.RMap;
import org.redisson.api.RQueue;
import org.redisson.api.RSet;
import org.redisson.api.RSortedSet;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
@Service
public class RedissonUtils{
/**
* 获取字符串对象
* @param redisson
* @param t
* @param objectName
* @return
*/
public static RBucket getRBucket(RedissonClient redissonClient,String objectName){
RBucket bucket=redissonClient.getBucket(objectName);
return bucket;
}
/**
* 获取Map对象
* @param redisson
* @param objectName
* @return
*/
public static RMap getRMap(RedissonClient redissonClient,String objectName){
RMap map=redissonClient.getMap(objectName);
return map;
}
/**
* 获取有序集合
* @param redisson
* @param objectName
* @return
*/
public static RSortedSet getRSortedSet(RedissonClient redissonClient,String objectName){
RSortedSet sortedSet=redissonClient.getSortedSet(objectName);
return sortedSet;
}
/**
* 获取集合
* @param redisson
* @param objectName
* @return
*/
public static RSet getRSet(RedissonClient redissonClient,String objectName){
RSet rSet=redissonClient.getSet(objectName);
return rSet;
}
/**
* 获取列表
* @param redisson
* @param objectName
* @return
*/
public static RList getRList(RedissonClient redissonClient,String objectName){
RList rList=redissonClient.getList(objectName);
return rList;
}
/**
* 获取队列
* @param redisson
* @param objectName
* @return
*/
public static RQueue getRQueue(RedissonClient redissonClient,String objectName){
RQueue rQueue=redissonClient.getQueue(objectName);
return rQueue;
}
/**
* 获取双端队列
* @param redisson
* @param objectName
* @return
*/
public static RDeque getRDeque(RedissonClient redissonClient,String objectName){
RDeque rDeque=redissonClient.getDeque(objectName);
return rDeque;
}
/**
* 获取锁
* @param redisson
* @param objectName
* @return
*/
public static RLock getRLock(RedissonClient redissonClient,String objectName){
RLock rLock=redissonClient.getLock(objectName);
return rLock;
}
/**
* 获取原子数
* @param redisson
* @param objectName
* @return
*/
public static RAtomicLong getRAtomicLong(RedissonClient redissonClient,String objectName){
RAtomicLong rAtomicLong=redissonClient.getAtomicLong(objectName);
return rAtomicLong;
}
/**
* 获取记数锁
* @param redisson
* @param objectName
* @return
*/
public static RCountDownLatch getRCountDownLatch(RedissonClient redissonClient,String objectName){
RCountDownLatch rCountDownLatch=redissonClient.getCountDownLatch(objectName);
return rCountDownLatch;
}
/**
* 获取消息的Topic
* @param redisson
* @param objectName
* @return
*/
public static RTopic getRTopic(RedissonClient redissonClient,String objectName){
RTopic rTopic=redissonClient.getTopic(objectName);
return rTopic;
}
}
Spring Cache整合
Redisson提供了将Redis无缝整合到Spring框架的能力。Redisson依照Spring Cache标准提供了基于Redis的Spring缓存实现。 每个缓存(Cache)实例都提供了了两个重要的可配置参数:过期时间(ttl)
和最长空闲时间(maxIdleTime)
,如果这两个参数都未指定或值为0
,那么实例管理的数据将永久保存。 配置范例:
@Configuration
@ComponentScan
@EnableCaching
public 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);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Map config = new HashMap();
// 创建一个名称为"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
@EnableCaching
public 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);
}
@Bean
CacheManager 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
@EnableCaching
public 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);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Map config = new HashMap();
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
@EnableCaching
public 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);
}
@Bean
CacheManager 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: 1440000
maxIdleTime: 720000
localCacheOptions:
invalidationPolicy: "ON_CHANGE"
evictionPolicy: "NONE"
cacheSize: 0
timeToLiveInMillis: 0
maxIdleInMillis: 0
以上内容是名叫testMap
的Spring缓存实例的配置方式。
需要注意的是:localCacheOptions
配置实例仅适用于org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager
类和org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager
类。