spring整合Redisson
添加依赖
<!--Redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.10.3</version>
</dependency>
<!-- redis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
注意:如果启动报错:Caused by: java.lang.NoSuchMethodError: io.netty.util.NetUtil.isIpV6AddressesPreferred()Z
需要排除其他依赖的相关netty依赖。
例如:
如何知道其他依赖有没有包含netty相关依赖?
在当前项目pom.xml同级文件夹下面打开cmd窗口,执行:mvn dependency:tree
命令会输出项目所有依赖和层级。
spring配置
1、 spring 头部增加命名空间
新增: xmlns:redisson=“http://redisson.org/schema/redisson”
http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd
2、 定义RedissonClient的bean
在applicationContext.xml文件中添加对应redis模式的配置(单机,哨兵和集群模式)
单机
<!-- REDIS单机配置 -->
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.hostName}" />
<property name="password" value="${redis.password}" />
<property name="port" value="${redis.port}" />
<property name="database" value="${redis.database}" />
</bean>
<redisson:client id="redissonClient">
<redisson:single-server password="${redis.password}" address="redis://127.0.0.1:6379"/>
</redisson:client>
哨兵
<!-- REDIS集群配置 -->
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg ref="sentinelConfig" />
<property name="password" value="${redis.password}" />
</bean>
<!--集群配置-->
<bean id="sentinelConfig" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<constructor-arg name="propertySource" ref="redisConfig" />
</bean>
<!--定义redis配置-->
<bean id="redisConfig" class="org.springframework.core.io.support.ResourcePropertySource">
<constructor-arg name="location" value="emall.properties" /><!--使用配置文件中的redis配置-->
</bean>
<redisson:client id="redissonClient">
<!--master-name为redis的主节点名称-->
<redisson:sentinel-servers master-name="${spring.redis.sentinel.master}" password="${redis.password}">
<!-- 可以配置多个 -->
<redisson:sentinel-address value="redis://192.168.121.130:26379"/>
<redisson:sentinel-address value="redis://192.168.121.131:26380"/>
<redisson:sentinel-address value="redis://192.168.121.132:26381"/>
</redisson:sentinel-servers>
</redisson:client>
集群
<!-- Redis 连接池配置 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="minIdle" value="${redis.minIdle}"/>
<property name="maxIdle" value="${redis.maxIdle}"/>
<property name="maxTotal" value="${redis.maxTotal}"/>
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
<property name="testWhileIdle" value="${redis.testWhileIdle}"/>
<property name="testOnReturn" value="${redis.testOnReturn}"/>
<property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"/>
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
<property name="timeBetweenEvictionRunsMillis" value="30000"/>
</bean>
<!-- jedisCluster 配置 -->
<!-- 自定义的工厂类,实现了FactoryBean<JedisCluster>接口 -->
<bean id="jedisCluster" class="com.xxxxx.JedisClusterFactory">
<!-- address: 集群配置 -->
<property name="address" value="${redisColony.host}"/>
<!-- timeout: 连接超时时间 -->
<property name="timeout" value="100000"/>
<!-- maxRedirections: 最大重定向 -->
<property name="maxRedirections" value="5"/>
<!-- 连接池 -->
<property name="genericObjectPoolConfig" ref="poolConfig"/>
</bean>
<!--redisson的实例 -->
<redisson:client id="redissonClient">
<redisson:cluster-servers>
<!-- 节点地址同redis集群的节点 -->
<redisson:node-address value="${redisColony.host1}"/>
<redisson:node-address value="${redisColony.host2}"/>
<redisson:node-address value="${redisColony.host3}"/>
<redisson:node-address value="${redisColony.host4}"/>
<redisson:node-address value="${redisColony.host5}"/>
<redisson:node-address value="${redisColony.host6}"/>
</redisson:cluster-servers>
</redisson:client>
redis配置参数
application.properties文件中定义redis配置参数
#spring session
spring.redis.sentinel.master=redis_6379
# 哨兵节点
spring.redis.sentinel.nodes=192.168.121.130:26379,192.168.121.131:26380,192.168.121.132:26381
redis.password=redis
redis.database=0
redis.hostName=127.0.0.1
redis.port=6379
# sentinel:哨兵 single:单机
#redis.model=sentinel
redis.model=single
redis.maxTotal=200
redis.maxIdle=25
redis.minIdle=0
redis.maxWaitMillis=10000
redis.testOnBorrow=false
redis.testOnReturn=false