redisson整合spring

本文介绍Redisson——一款基于Redis的Java驻内存数据网格,并详细讲解如何将其整合到Spring环境中。通过面向对象的方式操作Redis,提供了多种集合类,确保线程安全的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先讲下什么是RedissonRedisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。(摘自redisson的wiki:wiki地址

redisson提供的api均以面向对象的操作方式,将key-value封装成我们熟悉的集合或者对象,我们可以通过封装的api更方便的操作数据。同时它提供了多个实现了java.util.corrurnent接口的集合类,让我们能在线程安全的环境下操作数据。

其中redis的官网也将它纳入推荐使用的工具中,可见redisson已经逐渐上位。



废话不多说,现在开始讲下怎么整合redisson到spring:

首先引入redisson的包:(如果你还在用手动加jar包的方式,那建议你赶紧学一下maven,用上后会让你有种便秘一星期后突然通便的清爽)

<dependency> 
	<groupId>org.redisson</groupId>
	<artifactId>redisson</artifactId>
	<version>2.8.2</version> 
</dependency>  

接下来新建redisson.xml文件:(可参考wiki:redisson配置教程

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:redisson="http://redisson.org/schema/redisson"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://redisson.org/schema/redisson
       http://redisson.org/schema/redisson/redisson.xsd">
   <!--
    	单台redis机器配置  
    <redisson:client id="redissonClient">
        <redisson:single-server address="192.168.2.100:7000" connection-pool-size="30"/>
    </redisson:client>
     -->
     <!-- redis集群配置 -->
     <redisson:client id="redissonClient" >
     	
        <redisson:cluster-servers scan-interval="10000">   <!-- //scan-interval:集群状态扫描间隔时间,单位是毫秒 -->
        	<redisson:node-address value="192.168.2.100:7000"></redisson:node-address>
        	<redisson:node-address value="192.168.2.100:7001"></redisson:node-address>
        	<redisson:node-address value="192.168.2.100:7002"></redisson:node-address>
        	<redisson:node-address value="192.168.2.100:7003"></redisson:node-address>
        	<redisson:node-address value="192.168.2.100:7004"></redisson:node-address>
        	<redisson:node-address value="192.168.2.100:7005"></redisson:node-address>
        </redisson:cluster-servers>
        
    </redisson:client>
</beans>

然后在Application.xml中引入redisson.xml:<import resource="classpath:/spring/redisson.xml" />     (路径记得自己改哦~)

至此我们redisson的环境就配置好了。接下来就是怎么操作它来操作redis:

首先新建一个工具类RedissonUtils:

package com.basic.common.utils.redis;

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;

import com.basic.common.utils.generator.CollectionObjectConvert;
@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;  
    }  
      
    /** 
     * 此方法不可用在Redisson 1.2 中  
     * 在1.2.2版本中 可用 
     * @param redisson 
     * @param objectName 
     * @return 
     */  
    /** 
    public <V> RBlockingQueue<V> getRBlockingQueue(Redisson redisson,String objectName){ 
        RBlockingQueue rb=redisson.getBlockingQueue(objectName); 
        return rb; 
    }*/  
      
    /** 
     * 获取锁 
     * @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;  
    }  
    
    
}

然后我们需要在调用RedissonUtils的类中依赖进RedissonClient 

@Autowired  

private RedissonClient redisson;

只后便可以对redis进行操作啦

RMap<String, Object> map = RedissonUtils.getRMap(redisson,key);

map.put("key","value");     调用到这个语句的同时就已经对redis中的数据进行了修改。 


注意!redis最好是3.0以上的,官方发布的版本,不然会出现莫名其妙的错误

### 关于 RedissonSpring Cache 的集成 Redisson 是一个用于 Java 平台的高级分布式工具包,它实现了许多常用的接口并提供了丰富的功能。通过 Redisson 可以更方便地管理和操作 Redis 数据库[^4]。 #### 集成 RedissonSpring Cache 为了将 Redisson 整合Spring Cache 中,可以通过以下方式进行设置: 1. **引入依赖** 在项目的 `pom.xml` 文件中添加 RedissonSpring Cache 所需的相关依赖项。 ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-cache</artifactId> <version>3.17.0</version> </dependency> <!-- 如果使用的是 spring-boot-starter-data-redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. **配置 Redisson 客户端** 创建 RedissonClient 实例并通过 YAML 或者 JSON 配置文件初始化连接参数。 ```java @Bean(destroyMethod = "shutdown") public RedissonClient redisson() throws IOException { Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); return Redisson.create(config); } ``` 3. **启用缓存支持** 使用 `@EnableCaching` 注解开启 Spring Cache 功能,并指定自定义的 RedisCacheManager。 ```java import org.redisson.spring.cache.RedissonSpringCacheManager; import org.springframework.context.annotation.Bean; @Configuration @EnableCaching public class CacheConfig { private final RedissonClient redissonClient; public CacheConfig(RedissonClient redissonClient) { this.redissonClient = redissonClient; } @Bean public RedissonSpringCacheManager cacheManager() { return new RedissonSpringCacheManager(redissonClient); } } ``` 这样就可以利用 Redisson 提供的功能来增强 Spring Cache 行为[^5]。 --- ### RedissonSpring Cache 对比分析 | 特性 | Redisson | Spring Cache | |-------------------------|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | **核心定位** | 分布式对象存储解决方案 | 缓存抽象框架 | | **易用程度** | 更加灵活强大,提供多种数据结构的支持 | 较简单直观,专注于声明式缓存管理 | | **性能表现** | 支持锁机制、发布订阅等功能 | 主要针对读写优化 | | **扩展能力** | 内建众多特性如消息队列、计数器 | 能够与其他第三方组件配合 | 尽管两者都可以用来处理基于内存的数据访问需求,但是它们的设计目标有所不同。如果仅考虑简单的键值对存储场景,则可能倾向于采用 Spring Cache;而当涉及到更多复杂的业务逻辑时(比如分布式锁),则推荐选用 Redisson[^6]。 --- ### 示例代码展示 下面是一个结合了 RedissonSpring Cache 的例子: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable(value = "users", key = "#id", unless = "#result == null") public User getUserById(Long id){ System.out.println("Fetching from database..."); return userRepository.findById(id).orElse(null); } } ``` 此片段展示了如何借助注解形式快速实现用户信息查询过程中的结果缓存效果[^7]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦田小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值