1、首先是需要引入的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.redis</groupId>
  <artifactId>spring-redis</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>spring-redis</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>1.7</maven.compiler.source>
      <maven.compiler.target>1.7</maven.compiler.target>
      <spring.version>4.3.17.RELEASE</spring.version>
  </properties>

  <dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
      </dependency>

      <!-- 日志 -->
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.25</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.25</version>
      </dependency>

      <!-- redis -->
      <dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-redis</artifactId>
          <version>1.7.2.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.9.0</version>
      </dependency>

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
      </dependency>

      <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.8.5</version>
      </dependency>

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.45</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.8.8</version>
      </dependency>

      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.7</version>
      </dependency>

  </dependencies>

  <build>
      <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.5.1</version>
                  <configuration>
                      <source>1.7</source>
                      <target>1.7</target>
                  </configuration>
              </plugin>
              <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
              </plugin>
              <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
              <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
              </plugin>
              <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
              </plugin>
              <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
              </plugin>
          </plugins>
      </pluginManagement>
  </build>
</project>
2、redis哨兵集群参数配置:redis-ms.properties



#Matser
redis.masterName=mymaster
redis.masterHost=127.0.0.1
redis.masterPort=6385

#sentinel1 的IP和端口
redis.sentinel.host1=127.0.0.1
redis.sentinel.port1=26379
#sentinel1 的IP和端口
redis.sentinel.host2=127.0.0.1
redis.sentinel.port2=26479
#sentinel1 的IP和端口
redis.sentinel.host3=127.0.0.1
redis.sentinel.port3=26579

redis.expiration=3000  
#最大空闲数
redis.maxIdle=300 
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
redis.maxActive=600  
#最大建立连接等待时间
redis.maxWait=1000  
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
#客户端超时时间单位是毫秒 默认是2000
redis.timeout=10000  
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
redis.maxTotal=1000  
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000  
#连接的最小空闲时间 默认1800000毫秒(30分钟)
redis.minEvictableIdleTimeMillis=300000  
#每次释放连接的最大数目,默认3
redis.numTestsPerEvictionRun=1024  
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
redis.timeBetweenEvictionRunsMillis=30000  
#在空闲时检查有效性, 默认false
redis.testWhileIdle=true

3、redis哨兵集群配置:redis-ms.xml



<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
   <description>redis哨兵</description>

   <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
   <context:component-scan base-package="com.custom">
      <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
   </context:component-scan>

   <!-- 加载properties文件 -->
   <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
         <list>
            <value>classpath*:/redis-ms.properties</value>
         </list>
      </property>
   </bean>

   <!-- 配置JedisPoolConfig实例 -->
   <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
      <!--最大空闲数-->
      <property name="maxIdle" value="${redis.maxIdle}" />
      <!--连接池的最大数据库连接数  -->
      <property name="maxTotal" value="${redis.maxActive}" />
      <!--最大建立连接等待时间-->
      <property name="maxWaitMillis" value="${redis.maxWait}" />
      <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个-->
      <property name="testOnBorrow" value="${redis.testOnBorrow}" />
      <!--逐出连接的最小空闲时间 默认1800000毫秒(30分钟)-->
      <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}" />
      <!--每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3-->
      <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}" />
      <!--逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1-->
      <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}" />
   </bean>

   <!-- redis集群配置 哨兵模式 -->
   <bean id="redisSentinelConfiguration" 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.masterName}"/>
            <!-- 配置注master节点 -->
            <!--<constructor-arg name="host" value="${redis.masterHost}"/>
            <constructor-arg name="port" value="${redis.masterPort}"/>-->
         </bean>
      </property>
      <!-- sentinel哨兵监控, 这里是指定Sentinel的IP和端口,不是Master和Slave的 -->
      <property name="sentinels">
         <set>
            <bean name="sentinelNode1" class="org.springframework.data.redis.connection.RedisNode">
               <constructor-arg name="host" value="${redis.sentinel.host1}"></constructor-arg>
               <constructor-arg name="port" value="${redis.sentinel.port1}"></constructor-arg>
            </bean>
            <bean name="sentinelNode2" class="org.springframework.data.redis.connection.RedisNode">
               <constructor-arg name="host" value="${redis.sentinel.host2}"></constructor-arg>
               <constructor-arg name="port" value="${redis.sentinel.port2}"></constructor-arg>
            </bean>
            <bean name="sentinelNode3" class="org.springframework.data.redis.connection.RedisNode">
               <constructor-arg name="host" value="${redis.sentinel.host3}"></constructor-arg>
               <constructor-arg name="port" value="${redis.sentinel.port3}"></constructor-arg>
            </bean>
         </set>
      </property>
   </bean>

   <!--<bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
      <constructor-arg name="propertySource" ref="propertySource"/>
   </bean>
   <bean name="propertySource" class="org.springframework.core.io.support.ResourcePropertySource">
      <constructor-arg name="location" value="classpath:spring-redis-sentinel.properties" />
   </bean>-->

   <bean id="jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
      <constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg>
      <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>
      <!--<property name="password" value="123456"></property>-->
   </bean>


   <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
      <property name="connectionFactory" ref="jeidsConnectionFactory"/>
      <property name="keySerializer" >
         <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
      </property>
      <property name="valueSerializer" >
         <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
      </property>
      <property name="hashKeySerializer">
         <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
      </property>
      <property name="hashValueSerializer">
         <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
      </property>
      <!--开启事务  -->
      <property name="enableTransactionSupport" value="true"></property>
   </bean>
</beans>



4、将redis集群配置文件加入到applicationContext中:applicationContext-basic.xml

<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
   <description>Spring公共配置 </description>

   <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
   <context:component-scan base-package="com.custom">
      <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
   </context:component-scan>


   <!-- redis哨兵配置 -->
   <import resource="classpath*:redis-ms.xml" />

</beans>