Jedis结合Spring连接Redis集群Clustor

2017-11-29· 903 次浏览
## 方案一:使用RedisTemplate连接单机 这个配置不能连接Clustor集群,只能连接单独的Redis服务器,RedisTemplate是Spring提供的功能,对于Redis数据操作进行了很好的封装,推荐使用: ``` <?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:p="http://www.springframework.org/schema/p"     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-4.0.xsd">       <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>       <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">         <property name="maxTotal" value="${redis.maxTotal}"/>         <property name="maxIdle" value="${redis.maxIdle}" />         <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />         <property name="testOnBorrow" value="${redis.testOnBorrow}" />         <property name="testOnReturn" value="${redis.testOnReturn}"></property>     </bean>       <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">         <constructor-arg index="0" ref="jedisPoolConfig" />         <property name="usePool" value="true"></property>         <property name="hostName" value="${redis.host}" />         <property name="port" value="${redis.port}" />     </bean>       <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">         <property name="connectionFactory" ref="jedisConnectionFactory"></property>         <property name="keySerializer">             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />         </property>         <property name="valueSerializer">             <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />         </property>     </bean>       <bean id="redisBase" abstract="true">         <property name="template" ref="redisTemplate" />     </bean>   </beans> ``` redis.properties ``` redis.host=127.0.0.1 redis.port=6379 redis.maxTotal=3000 redis.maxIdle=1000 redis.maxWaitMillis=1500 redis.testOnBorrow=true redis.testOnReturn=true ``` ## 方案二:使用JedisClustor连接集群 这种可以连接RedisClustor集群,使直接使用的Jedis库: ``` <?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:p="http://www.springframework.org/schema/p"     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-4.0.xsd">       <!-- 连接池配置 -->     <bean id="JedisPoolConfig4Clustor" class="redis.clients.jedis.JedisPoolConfig">         <!-- 最大连接数 -->         <property name="maxTotal" value="30" />         <!-- 最大空闲连接数 -->         <property name="maxIdle" value="10" />         <!-- 每次释放连接的最大数目 -->         <property name="numTestsPerEvictionRun" value="1024" />         <!-- 释放连接的扫描间隔(毫秒) -->         <property name="timeBetweenEvictionRunsMillis" value="30000" />         <!-- 连接最小空闲时间 -->         <property name="minEvictableIdleTimeMillis" value="1800000" />         <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->         <property name="softMinEvictableIdleTimeMillis" value="10000" />         <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->         <property name="maxWaitMillis" value="1500" />         <!-- 在获取连接的时候检查有效性, 默认false -->         <property name="testOnBorrow" value="true" />         <!-- 在空闲时检查有效性, 默认false -->         <property name="testWhileIdle" value="true" />         <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->         <property name="blockWhenExhausted" value="false" />     </bean>        <!-- redis集群 -->     <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">         <constructor-arg index="0">             <set>                 <bean class="redis.clients.jedis.HostAndPort">                     <constructor-arg index="0" value="192.168.31.201"></constructor-arg>                     <constructor-arg index="1" value="7000"></constructor-arg>                 </bean>                 <bean class="redis.clients.jedis.HostAndPort">                     <constructor-arg index="0" value="192.168.31.201"></constructor-arg>                     <constructor-arg index="1" value="7001"></constructor-arg>                 </bean>                 <bean class="redis.clients.jedis.HostAndPort">                     <constructor-arg index="0" value="192.168.31.201"></constructor-arg>                     <constructor-arg index="1" value="7002"></constructor-arg>                 </bean>                 <bean class="redis.clients.jedis.HostAndPort">                     <constructor-arg index="0" value="192.168.31.202"></constructor-arg>                     <constructor-arg index="1" value="7000"></constructor-arg>                 </bean>                 <bean class="redis.clients.jedis.HostAndPort">                     <constructor-arg index="0" value="192.168.31.202"></constructor-arg>                     <constructor-arg index="1" value="7001"></constructor-arg>                 </bean>                 <bean class="redis.clients.jedis.HostAndPort">                     <constructor-arg index="0" value="192.168.31.202"></constructor-arg>                     <constructor-arg index="1" value="7002"></constructor-arg>                 </bean>             </set>         </constructor-arg>         <constructor-arg index="1" ref="JedisPoolConfig4Clustor"></constructor-arg>     </bean>         </beans> ``` ## 方案三:使用Jedis连接单机 不能连接集群,只能连接独立的Redis服务器,Jedis库: ``` <?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:mvc="http://www.springframework.org/schema/mvc"     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-3.2.xsd         http://www.springframework.org/schema/mvc         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.2.xsd         http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">    <!-- 连接池配置 -->     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">        <!-- 最大连接数 -->        <property name="maxTotal" value="30" />        <!-- 最大空闲连接数 -->        <property name="maxIdle" value="10" />        <!-- 每次释放连接的最大数目 -->        <property name="numTestsPerEvictionRun" value="1024" />        <!-- 释放连接的扫描间隔(毫秒) -->        <property name="timeBetweenEvictionRunsMillis" value="30000" />        <!-- 连接最小空闲时间 -->        <property name="minEvictableIdleTimeMillis" value="1800000" />        <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->        <property name="softMinEvictableIdleTimeMillis" value="10000" />        <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->        <property name="maxWaitMillis" value="1500" />        <!-- 在获取连接的时候检查有效性, 默认false -->        <property name="testOnBorrow" value="true" />        <!-- 在空闲时检查有效性, 默认false -->        <property name="testWhileIdle" value="true" />        <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->        <property name="blockWhenExhausted" value="false" />     </bean>           <!-- redis单机 通过连接池 -->     <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close">        <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>        <constructor-arg name="host" value="192.168.25.145"/>        <constructor-arg name="port" value="6379"/>     </bean> ```