SpringBoot2整合redisson

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zsj777/article/details/80807742
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 <T> RBucket<T> getRBucket(RedissonClient redissonClient,String objectName){    
        RBucket<T> bucket=redissonClient.getBucket(objectName);    
        return bucket;    
    }    
        
    /**  
     * 获取Map对象  
     * @param redisson  
     * @param objectName  
     * @return  
     */    
    public static <K,V> RMap<K, V> getRMap(RedissonClient redissonClient,String objectName){    
        RMap<K, V> map=redissonClient.getMap(objectName);    
        return map;    
    }    
        
    /**  
     * 获取有序集合  
     * @param redisson  
     * @param objectName  
     * @return  
     */    
    public static <V> RSortedSet<V> getRSortedSet(RedissonClient redissonClient,String objectName){    
        RSortedSet<V> sortedSet=redissonClient.getSortedSet(objectName);    
        return sortedSet;    
    }    
        
    /**  
     * 获取集合  
     * @param redisson  
     * @param objectName  
     * @return  
     */    
    public static <V> RSet<V> getRSet(RedissonClient redissonClient,String objectName){    
        RSet<V> rSet=redissonClient.getSet(objectName);    
        return rSet;    
    }    
        
    /**  
     * 获取列表  
     * @param redisson  
     * @param objectName  
     * @return  
     */    
    public static <V> RList<V> getRList(RedissonClient redissonClient,String objectName){    
        RList<V> rList=redissonClient.getList(objectName);    
        return rList;    
    }    
        
    /**  
     * 获取队列  
     * @param redisson  
     * @param objectName  
     * @return  
     */    
    public static <V> RQueue<V> getRQueue(RedissonClient redissonClient,String objectName){    
        RQueue<V> rQueue=redissonClient.getQueue(objectName);    
        return rQueue;    
    }    
        
    /**  
     * 获取双端队列  
     * @param redisson  
     * @param objectName  
     * @return  
     */    
    public static <V> RDeque<V> getRDeque(RedissonClient redissonClient,String objectName){    
        RDeque<V> 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 <M> RTopic<M> getRTopic(RedissonClient redissonClient,String objectName){    
         RTopic<M> 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<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
    @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<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
    @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缓存实例的配置方式。
 ———————————————— 
版权声明:本文为CSDN博主「NemoHero」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zsj777/article/details/80807742

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值