前提
准备Jar包依赖,注意版本不要随意更换,经测试,有的版本会报错
代码语言:javascript复制 <dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.6.RELEASE</version>
</dependency>
<!-- redis 依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
配置文件
redis.properties
代码语言:javascript复制#最大空闲数(默认:8)
redis.maxIdle=300
#当连接池资源耗尽时,调用者最大阻塞时间,超时将抛出异常.单位:毫秒,默认:-1,表示永不超时.
redis.maxWait=1000
#最大连接数(默认:8)
redis.maxTotal=500
#指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 (默认:false)
redis.testOnBorrow=true
redis.testOnReturn=true
redis.testWhileIdle=true
redis.blockWhenExhausted=false
redis.numTestsPerEvictionRun=1024
redis.timeBetweenEvictionRunsMillis=30000
redis.minEvictableIdleTimeMillis=1800000
redis.maxActive = 1024
redis.timeOut = 10000
#Sentinel
redis.sentinel.master = mymaster #这里是配置Redis哨兵sentinel.conf中的名字!一定要一样!
redis.sentinel.auth = 123456789 #同样是sentinel.conf中配置的密码,如果没设置可以不写
#Redis哨兵配置的所有服务器和端口号(sentinel.conf中的端口号,不是redis.conf中的!)
redis.sentinel.addr_1 = 192.168.100.1
redis.sentinel.port_1 = 26379
redis.sentinel.addr_2 = 192.168.100.2
redis.sentinel.port_2 = 26379
redis.sentinel.addr_3 = 192.168.100.3
redis.sentinel.port_3 = 26379
redis.xml
代码语言:javascript复制<?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"
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">
<!--扫描redis配置文件-->
<context:property-placeholder location="classpath:redis.properties"/>
<!--设置连接池-->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="{redis.maxIdle}"/>
<!-- 最大连接数 -->
<property name="maxTotal" value="{redis.maxTotal}"/>
<!-- 每次释放连接的最大数目 -->
<property name="numTestsPerEvictionRun" value="{redis.numTestsPerEvictionRun}"/>
<!-- 释放连接的扫描间隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="{redis.timeBetweenEvictionRunsMillis}"/>
<!-- 连接最小空闲时间 -->
<property name="minEvictableIdleTimeMillis" value="{redis.minEvictableIdleTimeMillis}"/>
<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
<property name="maxWaitMillis" value="{redis.maxWait}"/>
<!-- 在获取连接的时候检查有效性, 默认false -->
<property name="testOnBorrow" value="{redis.testOnBorrow}"/>
<property name="testOnReturn" value="{redis.testOnReturn}"/>
<!-- 在空闲时检查有效性, 默认false -->
<property name="testWhileIdle" value="{redis.testWhileIdle}"/>
<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="{redis.blockWhenExhausted}"/>
</bean>
<!-- Sentinel模式 -->
<bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<!--这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的-->
<property name="name" value="{redis.sentinel.master}"/>
</bean>
</property>
<!-- 指定Sentinel的IP和端口 -->
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="{redis.sentinel.addr_1}"/>
<constructor-arg name="port" value="{redis.sentinel.port_1}"/>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="{redis.sentinel.addr_2}"/>
<constructor-arg name="port" value="{redis.sentinel.port_2}"/>
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="{redis.sentinel.addr_3}"/>
<constructor-arg name="port" value="{redis.sentinel.port_3}"/>
</bean>
</set>
</property>
</bean>
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg name="sentinelConfig" ref="sentinelConfiguration"/>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
<!-- 如果没有设置密码,下面这行可以注释掉 -->
<property name="password" value="{redis.sentinel.auth}"/>
</bean>
<bean id="redisTemplate"
class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>
</beans>
Spring上下文配置文件
在SpringContext的上下文配置文件中导入以上两个配置文件,一般这个上下文配置文件名字都是类似:applicationContext.xml、springContext.xml等等等…这里就不放全部的内容,每个人的项目可能都不太一样,只放需要配置的
导入redis.properties
这个一般放在配置文件的较上面位置
代码语言:javascript复制 <!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- 系统配置参数 -->
<property name="locations">
<list>
<!-- redis配置参数 -->
<value>classpath:redis.properties</value>
</list>
</property>
</bean>
导入redis.xml
这个一般放在配置文件的最下面
代码语言:javascript复制 <!-- 引入redis配置 -->
<import resource="classpath:redis.xml"/>
之后启动项目验证就行了,至于JedisConnectionFactory是怎么实现通过Sentinel帮我们发现并且切换master主节点的,博主有时间再研究一下