redis客户端redisson实战
1.前言
Redisson是一个基于java编程框架netty进行扩展了的redis,想了解Redisson源码首先你必须熟悉netty网络编程框架。html
Redisson目前分开源版本和商业版(Redisson PRO),因此选择的时候请谨慎。(Map)和集(Set)数据分片功能仅限于Redisson PRO版本才有,另外Redis部署工具和集群管理工具功能仅限于Redisson PRO版本才有。关于商业版和开源版本的区别和商业版收费标准详见官网(https://redisson.pro/) java
2.maven项目集成redisson
根据本身JDK环境,JDK 1.8+以上请选择3.5.4版本,JDK 1.6+以上请选择2.10.4版本 node
org.redisson
redisson
3.5.4
org.redisson
redisson
2.10.4
3.利用redisson API操做各类redis部署的服务端
redis的部署方式有单节点部署、哨兵方式部署、集群方式部署3种方式,这3中方式都使用的是原生的redis;linux
基于单节点部署为了保证数据的备份,通常会添加一个节点做为slave来备份master节点上的数据,这里就衍生出了主从部署方式;git
云服务商像阿里云、微软云和亚马逊云都基于原生redis作了高可用部署,为了能链接云服务商的redis服务,这里redisson也提供了API操做方式。github
下面以向redis服务端进行操做set key value为例进行说明如何使用redisson的APIredis
3.1 单节点部署方式(standalone)
(1)纯java操做spring
//建立配置
Config config = new Config();
//指定编码,默认编码为org.redisson.codec.JsonJacksonCodec
//以前使用的spring-data-redis,用的客户端jedis,编码为org.springframework.data.redis.serializer.StringRedisSerializer
//改用redisson后为了之间数据能兼容,这里修改编码为org.redisson.client.codec.StringCodec
config.setCodec(new org.redisson.client.codec.StringCodec());
//指定使用单节点部署方式
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
//config.setPassword("password")//设置密码
config.setConnectionPoolSize(500)//设置对于master节点的链接池中链接数最大为500
config.setIdleConnectionTimeout(10000)//若是当前链接池里的链接数量超过了最小空闲链接数,而同时有链接空闲时间超过了该数值,那么这些链接将会自动被关闭,并从链接池里去掉。时间单位是毫秒。
config.setConnectTimeout(30000)//同任何节点创建链接时的等待超时。时间单位是毫秒。
config.setTimeout(3000)//等待节点回复命令的时间。该时间从命令发送成功时开始计时。
config.setPingTimeout(30000)
config.setReconnectionTimeout(3000)//当与某个节点的链接断开时,等待与其从新创建链接的时间间隔。时间单位是毫秒。
//建立客户端(发现建立RedissonClient很是耗时,基本在2秒-4秒左右)
RedissonClient redisson = Redisson.create(config);
//首先获取redis中的key-value对象,key不存在不要紧
RBucket keyObject = redisson.getBucket("key");
//若是key存在,就设置key的值为新值value
//若是key不存在,就设置key的值为value
keyObject.set("value");
//最后关闭RedissonClient
redisson.shutdown();
(2)spring集成操做
pom.xml编程
org.redisson
redisson
2.10.4
org.springframework
spring-core
4.2.8.RELEASE
org.springframework
spring-beans
4.2.8.RELEASE
org.springframework
spring-context
4.2.8.RELEASE
spring-redisson.xmljson
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">
name="aliasName1,aliasName2"
codec-ref="stringCodec">
connection-pool-size="500"
idle-connection-timeout="10000"
connect-timeout="10000"
timeout="3000"
ping-timeout="30000"
reconnection-timeout="30000"
database="0"/>
SpringRedissonTest.java
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringRedissonTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-redisson.xml");
RedissonClient redisson = (RedissonClient) applicationContext.getBean("standalone");
// 首先获取redis中的key-value对象,key不存在不要紧
RBucket keyObject = redisson.getBucket("key");
// 若是key存在,就设置key的值为新值value
// 若是key不存在,就设置key的值为value
keyObject.set("value");
}
}
3.2 哨兵部署方式(sentinel)
(1)纯java操做
//建立配置
Config config = new Config();
//指定编码,默认编码为org.redisson.codec.JsonJacksonCodec
//以前使用的spring-data-redis,用的客户端jedis,编码为org.springframework.data.redis.serializer.StringRedisSerializer
//改用redisson后为了之间数据能兼容,这里修改编码为org.redisson.client.codec.StringCodec
config.setCodec(new org.redisson.client.codec.StringCodec());
//指定使用哨兵部署方式
config.useSentinelServers()
//设置sentinel.conf配置里的sentinel别名
//好比sentinel.conf里配置为sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么这里就配置my-sentinel-name
.setMasterName("my-sentinel-name")
//这里设置sentinel节点的服务IP和端口,sentinel是采用Paxos拜占庭协议,通常sentinel至少3个节点
//记住这里不是配置redis节点的服务端口和IP,sentinel会本身把请求转发给后面monitor的redis节点
.addSentinelAddress("redis://127.0.0.1:26379")
.addSentinelAddress("redis://127.0.0.1:26389")
.addSentinelAddress("redis://127.0.0.1:26399");
//config.setPassword("password")//设置密码
config.setMasterConnectionPoolSize(500)//设置对于master节点的链接池中链接数最大为500
config.setSlaveConnectionPoolSize(500)//设置对于slave节点的链接池中链接数最大为500
config.setIdleConnectionTimeout(10000)//若是当前链接池里的链接数量超过了最小空闲链接数,而同时有链接空闲时间超过了该数值,那么这些链接将会自动被关闭,并从链接池里去掉。时间单位是毫秒。
config.setConnectTimeout(30000)//同任何节点创建链接时的等待超时。时间单位是毫秒。
config.setTimeout(3000)//等待节点回复命令的时间。该时间从命令发送成功时开始计时。
config.setPingTimeout(30000)
config.setReconnectionTimeout(3000)//当与某个节点的链接断开时,等待与其从新创建链接的时间间隔。时间单位是毫秒。
//建立客户端(发现这一很是耗时,基本在2秒-4秒左右)
RedissonClient redisson = Redisson.create(config);
//首先获取redis中的key-value对象,key不存在不要紧
RBucket keyObject = redisson.getBucket("key");
//若是key存在,就设置key的值为新值value
//若是key不存在,就设置key的值为value
keyObject.set("value");
//最后关闭RedissonClient
redisson.shutdown();
(2)spring集成操做
pom.xml
org.redisson
redisson
2.10.4
org.springframework
spring-core
4.2.8.RELEASE
org.springframework
spring-beans
4.2.8.RELEASE
org.springframework
spring-context
4.2.8.RELEASE
spring-redisson.xml
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">
slaveConnectionPoolSize="500"
masterConnectionPoolSize="500"
idle-connection-timeout="10000"
connect-timeout="10000"
timeout="3000"
ping-timeout="1000"
reconnection-timeout="3000"
database="0">
SpringRedissonTest.java
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringRedissonTest {
public static void main(Strin