首先讲下什么是Redisson:Redisson是一个在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以上的,官方发布的版本,不然会出现莫名其妙的错误