两种连接方式:(写了一半,未测试)
spring xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 加载配置文件 --> <!-- <context:property-placeholder location="classpath:redis-config/*.properties" /> --> <!-- jedis客户端单机版 id是我们随便起的名字,后面全限定名要复制对,这种方式不能配置密码,如果有密码,用下面的jedisPool配置 然后还有个属性 poolConfig可以配也开不配置,不配置时会有默认配置--> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="127.0.0.1"></constructor-arg> <constructor-arg name="port" value="6379"></constructor-arg> </bean> <!-- 如果要配置连接密码需要用下面这种单机配置 --> <!-- <bean id="jedisPool" class="redis.clients.jedis.JedisPool" > <constructor-arg name="host" value="${redis.host}"></constructor-arg> <constructor-arg name="port" value="${redis.port}"></constructor-arg> <constructor-arg name="password" value="${redis.password}"></constructor-arg> <constructor-arg name="timeout" value="${redis.timeout}"></constructor-arg> <constructor-arg name="database" value="${redis.database}"></constructor-arg> <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg> </bean> --> <!-- 单机和集群都可能用到的配置 --> <!-- <bean class="redis.clients.jedis.JedisPoolConfig" id="jedisPoolConfig"> <property name="maxIdle" value="${maxIdle}" /> <property name="maxTotal" value="${maxActive}" /> <property name="maxWaitMillis" value="${maxWait}" /> <property name="testOnBorrow" value="${testOnBorrow}" /> <property name="blockWhenExhausted" value="${blockWhenExhausted}" /> </bean> --> <!-- 单机redisClient实现类 --> <bean id="jedisClientSingle" class="com.tydic.jtcrm.redis.util.JedisClientSingle"> <property name="jedisPool" ref="jedisPool" /> </bean> <!-- 集群相关 --> <!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> 多节点配置 <constructor-arg name="jedisClusterNode"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.host}"></constructor-arg> <constructor-arg index="1" value="${redis.port}"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7002"></constructor-arg> </bean> </set> </constructor-arg> 其他参数配置 <constructor-arg name="connectionTimeout" value="2000"/> <constructor-arg name="soTimeout" value="2000"/> <constructor-arg name="maxAttempts" value="3"/> <constructor-arg name="password" value="${redis.password}"/> 连接池配置,可以和带密码的单机版公用一个 <constructor-arg name="poolConfig" ref="jedisPoolConfig"/> </bean> --> <!-- 集群redisClient实现类 --> <!-- <bean id="jedisClientCluster" class="com.tydic.jtcrm.redis.util.JedisClientCluster"> <property name="jedisCluster" ref="jedisCluster" /> </bean> --> <!-- 配置我们自定义的jedisClient实现类 --> <!-- <bean id="jedisClient" class="com.tydic.jtcrm.redis.service.JedisClient"> </bean> --> </beans>
代码:
单机版,使用jedispool:
package com.tydic.jtcrm.redis.util; import java.util.List; import java.util.Set; import javax.annotation.Resource; import com.tydic.xxcrm.redis.service.JedisClient; import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class JedisClientSingle implements JedisClient{ //单机版需要注入在 application-jedis.xml中配置的bean private JedisPool jedisPool; /** * 必须有set方法,否则无法属性注入 */ public void setJedisPool(JedisPool jedisPool) { this.jedisPool = jedisPool; } public String get(String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.get(key); jedis.close(); return result; } public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String result = jedis.set(key, value); jedis.close(); return result; } public Boolean exists(String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.exists(key); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return false; } public String hget(String hkey, String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(hkey, key); jedis.close(); return result; } public Long hset(String hkey, String key, String value) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hset(hkey, key, value); jedis.close(); return result; } public Long incr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } public Long expire(String key, int second) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, second); jedis.close(); return result; } public Long ttl(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.ttl(key); jedis.close(); return result; } public Long del(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.del(key); jedis.close(); return result; } public Long hdel(String hkey, String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hdel(hkey,key); jedis.close(); return result; } /**************************** redis 列表List start***************************/ /** * 将一个值插入到列表头部,value可以重复,返回列表的长度 * @param key * @param value String * @return 返回List的长度 */ public Long lpush(String key, String value){ Jedis jedis = jedisPool.getResource(); Long length = jedis.lpush(key, value); jedis.close(); return length; } /** * 将多个值插入到列表头部,value可以重复 * @param key * @param values String[] * @return 返回List的数量size */ public Long lpush(String key, String[] values){ Jedis jedis = jedisPool.getResource(); Long size = jedis.lpush(key, values); jedis.close(); //System.out.println(result); return size; } /** * 获取List列表 * @param key * @param start Long,开始索引 * @param end Long, 结束索引 * @return List<String> */ public List<String> lrange(String key, int start, int end){ Jedis jedis = jedisPool.getResource(); List<String> list = jedis.lrange(key, start, end); jedis.close(); return list; } /** * 通过索引获取列表中的元素 * @param key * @param index,索引,0表示最新的一个元素 * @return String */ public String lindex(String key, Long index){ Jedis jedis = jedisPool.getResource(); String str = jedis.lindex(key, index); jedis.close(); return str; } /** * 获取列表长度,key为空时返回0 * @param key * @return Long */ public Long llen(String key){ Jedis jedis = jedisPool.getResource(); Long length = jedis.llen(key); jedis.close(); return length; } /** * 在列表的元素前或者后插入元素,返回List的长度 * @param key * @param where LIST_POSITION * @param pivot 以该元素作为参照物,是在它之前,还是之后(pivot:枢轴;中心点,中枢;[物]支点,支枢;[体]回转运动。) * @param value * @return Long */ public Long linsert(String key, LIST_POSITION where, String pivot, String value){ Jedis jedis = jedisPool.getResource(); Long length = jedis.linsert(key, where, pivot, value); jedis.close(); return length; } /** * 将一个或多个值插入到已存在的列表头部,当成功时,返回List的长度;当不成功(即key不存在时,返回0) * @param key * @param value String * @return Long */ public Long lpushx(String key, String value){ Jedis jedis = jedisPool.getResource(); Long length = jedis.lpushx(key, value); jedis.close(); return length; } /** * 将一个或多个值插入到已存在的列表头部,当成功时,返回List的长度;当不成功(即key不存在时,返回0) * @param key * @param values String[] * @return Long */ public Long lpushx(String key, String[] values){ Jedis jedis = jedisPool.getResource(); Long length = jedis.lpushx(key, values); jedis.close(); return length; } /** * 移除列表元素,返回移除的元素数量 * @param key * @param count,标识,表示动作或者查找方向 * <li>当count=0时,移除所有匹配的元素;</li> * <li>当count为负数时,移除方向是从尾到头;</li> * <li>当count为正数时,移除方向是从头到尾;</li> * @param value 匹配的元素 * @return Long */ public Long lrem(String key, Long count, String value){ Jedis jedis = jedisPool.getResource(); Long length = jedis.lrem(key, count, value); jedis.close(); return length; } /** * 通过索引设置列表元素的值,当超出索引时会抛错。成功设置返回true * @param key * @param index 索引 * @param value * @return Boolean */ public Boolean lset(String key, Long index, String value){ Jedis jedis = jedisPool.getResource(); String statusCode = jedis.lset(key, index, value); jedis.close(); if("OK".equalsIgnoreCase(statusCode)){ return true; }else{ return false; } } /** * 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 * @param key * @param start * <li>可以为负数(-1是列表的最后一个元素,-2是列表倒数第二的元素。)</li> * <li>如果start大于end,则返回一个空的列表,即列表被清空</li> * @param end * <li>可以为负数(-1是列表的最后一个元素,-2是列表倒数第二的元素。)</li> * <li>可以超出索引,不影响结果</li> * @return Boolean */ public Boolean ltrim(String key, Long start, Long end){ Jedis jedis = jedisPool.getResource(); String statusCode = jedis.ltrim(key, start, end); jedis.close(); if("OK".equalsIgnoreCase(statusCode)){ return true; }else{ return false; } } /** * 移出并获取列表的第一个元素,当列表不存在或者为空时,返回Null * @param key * @return String */ public String lpop(String key){ Jedis jedis = jedisPool.getResource(); String value = jedis.lpop(key); jedis.close(); return value; } /** * 移除并获取列表最后一个元素,当列表不存在或者为空时,返回Null * @param key * @return String */ public String rpop(String key){ Jedis jedis = jedisPool.getResource(); String value = jedis.rpop(key); jedis.close(); return value; } /** * 在列表中的尾部添加一个个值,返回列表的长度 * @param key * @param value * @return Long */ public Long rpush(String key, String value){ Jedis jedis = jedisPool.getResource(); Long length = jedis.rpush(key, value); jedis.close(); return length; } /** * 在列表中的尾部添加多个值,返回列表的长度 * @param key * @param values * @return Long */ public Long rpush(String key, String[] values){ Jedis jedis = jedisPool.getResource(); Long length = jedis.rpush(key, values); jedis.close(); return length; } /** * 仅当列表存在时,才会向列表中的尾部添加一个值,返回列表的长度 * @param key * @param value * @return Long */ public Long rpushx(String key, String value){ Jedis jedis = jedisPool.getResource(); Long length = jedis.rpushx(key, value); jedis.close(); return length; } /** * 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 * @param sourceKey 源列表的key,当源key不存在时,结果返回Null * @param targetKey 目标列表的key,当目标key不存在时,会自动创建新的 * @return String */ public String rpopLpush(String sourceKey, String targetKey){ Jedis jedis = jedisPool.getResource(); String value = jedis.rpoplpush(sourceKey, targetKey); jedis.close(); return value; } /** * 移出并获取列表的【第一个元素】, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 * @param timeout 单位为秒 * @param keys * <li>当有多个key时,只要某个key值的列表有内容,即马上返回,不再阻塞。</li> * <li>当所有key都没有内容或不存在时,则会阻塞,直到有值返回或者超时。</li> * <li>当超期时间到达时,keys列表仍然没有内容,则返回Null</li> * @return List<String> */ public List<String> blpop(int timeout, String... keys){ Jedis jedis = jedisPool.getResource(); List<String> values = jedis.blpop(timeout, keys); jedis.close(); return values; } /** * 移出并获取列表的【最后一个元素】, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 * @param timeout 单位为秒 * @param keys * <li>当有多个key时,只要某个key值的列表有内容,即马上返回,不再阻塞。</li> * <li>当所有key都没有内容或不存在时,则会阻塞,直到有值返回或者超时。</li> * <li>当超期时间到达时,keys列表仍然没有内容,则返回Null</li> * @return List<String> */ public List<String> brpop(int timeout, String... keys){ Jedis jedis = jedisPool.getResource(); List<String> values = jedis.brpop(timeout, keys); jedis.close(); return values; } /** * 从列表中弹出列表最后一个值,将弹出的元素插入到另外一个列表中并返回它; * 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 * @param sourceKey 源列表的key,当源key不存在时,则会进行阻塞 * @param targetKey 目标列表的key,当目标key不存在时,会自动创建新的 * @param timeout 单位为秒 * @return String */ public String brpopLpush(String sourceKey, String targetKey, int timeout){ Jedis jedis = jedisPool.getResource(); String value = jedis.brpoplpush(sourceKey, targetKey, timeout); jedis.close(); return value; } /**************************** redis 列表List end***************************/ /**************************** redis 集合Set start***************************/ /**Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。**/ /** * 向集合添加一个或多个成员,返回添加成功的数量 * @param key * @param members * @return Long */ public Long sadd(String key, String... members){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.sadd(key, members); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 获取集合的成员数 * @param key * @return */ public Long scard(String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.scard(key); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 返回集合中的所有成员 * @param key * @return Set<String> */ public Set<String> smembers(String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.smembers(key); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 判断 member 元素是否是集合 key 的成员,在集合中返回True * @param key * @param member * @return Boolean */ public Boolean sIsMember(String key, String member){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.sismember(key, member); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 返回给定所有集合的差集(获取第一个key中与其它key不相同的值,当只有一个key时,就返回这个key的所有值) * @param keys * @return Set<String> */ public Set<String> sdiff(String... keys){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.sdiff(keys); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 返回给定所有集合的差集并存储在 targetKey中,类似sdiff,只是该方法把返回的差集保存到targetKey中 * <li>当有差集时,返回true</li> * <li>当没有差集时,返回false</li> * @param targetKey * @param keys * @return */ public Boolean sdiffStore(String targetKey, String... keys){ Jedis jedis = null; try { jedis = jedisPool.getResource(); Long statusCode = jedis.sdiffstore(targetKey, keys); if(1L == statusCode){ return true; } }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return false; } /** * 返回给定所有集合的交集(获取第一个key中与其它key相同的值,要求所有key都要有相同的值,如果没有相同,返回Null。当只有一个key时,就返回这个key的所有值) * @param keys * @return Set<String> */ public Set<String> sinter(String... keys){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.sinter(keys); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 返回给定所有集合的交集并存储在 targetKey中,类似sinter * @param targetKey * @param keys * @return Boolean */ public Boolean sinterStore(String targetKey, String... keys){ Jedis jedis = null; try { jedis = jedisPool.getResource(); Long statusCode = jedis.sinterstore(targetKey, keys); if(1L == statusCode){ return true; } }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return false; } /** * 将 member 元素从 sourceKey 集合移动到 targetKey 集合 * <li>成功返回true</li> * <li>当member不存在于sourceKey时,返回false</li> * <li>当sourceKey不存在时,也返回false</li> * @param sourceKey * @param targetKey * @param member * @return Boolean */ public Boolean smove(String sourceKey, String targetKey, String member){ Jedis jedis = null; try { jedis = jedisPool.getResource(); Long value = jedis.smove(sourceKey, targetKey, member); if(value > 0){ return true; } }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return false; } /** * 移除并返回集合中的一个随机元素 * <li>当set为空或者不存在时,返回Null</li> * @param key * @return String */ public String spop(String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.spop(key); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 返回集合中一个或多个随机数 * <li>当count大于set的长度时,set所有值返回,不会抛错。</li> * <li>当count等于0时,返回[]</li> * <li>当count小于0时,也能返回。如-1返回一个,-2返回两个</li> * @param key * @param count * @return List<String> */ public List<String> srandMember(String key, int count){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.srandmember(key, count); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 移除集合中一个或多个成员 * @param key * @param members * @return */ public Boolean srem(String key, String... members){ Jedis jedis = null; try { jedis = jedisPool.getResource(); //Integer reply, specifically: 1 if the new element was removed //0 if the new element was not a member of the set Long value = jedis.srem(key, members); if(value > 0){ return true; } }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return false; } /** * 返回所有给定集合的并集,相同的只会返回一个 * @param keys * @return */ public Set<String> sunion(String... keys){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.sunion(keys); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return null; } /** * 所有给定集合的并集存储在targetKey集合中 * <li>注:合并时,只会把keys中的集合返回,不包括targetKey本身</li> * <li>如果targetKey本身是有值的,合并后原来的值是没有的,因为把keys的集合重新赋值给targetKey</li> * <li>要想保留targetKey本身的值,keys要包含原来的targetKey</li> * @param targetKey * @param keys * @return */ public Boolean sunionStore(String targetKey, String... keys){ Jedis jedis = null; try { jedis = jedisPool.getResource(); //返回合并后的长度 Long statusCode = jedis.sunionstore(targetKey, keys); if(statusCode > 0){ return true; } }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis != null){ jedis.close(); } } return false; } /**************************** redis 集合Set end***************************/ }
集群版,使用jedisCluster:
package com.txxxc.jtcrm.redis.util; import java.util.List; import com.tydic.jtcrm.redis.service.JedisClient; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; public class JedisClientCluster implements JedisClient { private JedisCluster jedisCluster; public JedisCluster getJedisCluster() { return jedisCluster; } public void setJedisCluster(JedisCluster jedisCluster) { this.jedisCluster = jedisCluster; } @Override public String set(String key, String value) { return jedisCluster.set(key, value); } @Override public String get(String key) { return jedisCluster.get(key); } @Override public Boolean exists(String key) { return jedisCluster.exists(key); } @Override public Long expire(String key, int seconds) { return jedisCluster.expire(key, seconds); } // @Override public Long ttl(String key) { return jedisCluster.ttl(key); } // @Override public Long incr(String key) { return jedisCluster.incr(key); } // @Override public Long hset(String key, String field, String value) { return jedisCluster.hset(key, field, value); } // @Override public String hget(String key, String field) { return jedisCluster.hget(key, field); } // @Override public Long hdel(String key, String field) { return jedisCluster.hdel(key, field); } // @Override public Boolean hexists(String key, String field) { return jedisCluster.hexists(key, field); } // @Override public List<String> hvals(String key) { return jedisCluster.hvals(key); } @Override public Long del(String key) { return jedisCluster.del(key); } @Override public Long rpush(String key, String value){ Long length = jedisCluster.rpush(key, value); return length; } @Override public String lpop(String key){ return jedisCluster.lpop(key); } @Override public Long llen(String key){ return jedisCluster.llen(key); } @Override public List<String> lrange(String key, int start, int end){ List<String> list = jedisCluster.lrange(key, start, end); return list; } // @Override public Long lrem(String key, Long count, String value){ Long length = jedisCluster.lrem(key, count, value); return length; } }
接口:
package com.txxxc.jtcrm.redis.service; import java.util.List; public interface JedisClient { //获取值 String get(String key); //设置值 String set(String key,String value); /*//获取hash类型的值 String hget(String hkey,String key); //设置hash类型的值 Long hset(String hkey,String key,String value); //使某个值自增1 Long incr(String key);*/ //设置某个值的有效期,单位是秒 Long expire(String key,int second); //获取某个值的有效期(返回-1为永久有效,返回-2为已经失效,返回其他正整数为剩余有效期毫秒值) // Long ttl(String key); //删除缓存数据 Long del(String key); //删除hash类型数据 // Long hdel(String hkey,String key); Boolean exists(String key); Long rpush(String key, String value); String lpop(String key); Long llen(String key); List<String> lrange(String key, int start, int end); // Long lrem(String key, Long count, String value); }
测试:
package com.txxxc.xxcrm.redis; import java.util.ArrayList; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.ctg.ixxxc.cache.pool.CtgJedisPool; import com.ctg.ixxxc.cache.pool.CtgJedisPoolConfig; import com.ctg.ixxxc.cache.pool.CtgJedisPoolException; import com.ctg.ixxxc.cache.pool.ProxyJedis; import com.txxxc.xxcrm.redis.util.JedisClientSingle; import com.txxxc.xxcrm.redis.util.JedisClientSingle2; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * @Package com.tydic.jtcrm.redis * @ClassName RedisTest.java * @author libin * @date 2019年4月13日 上午10:01:01 * @version V1.0 */ public class RedisTest { public static void main1(String[] args) { //创建一个jedis对象 Jedis jedis = new Jedis("127.0.0.1", 6379); //调用jedis对象的方法,方法名和redis命令一致 jedis.set("key1", "jedistest1"); String s1 = jedis.get("key1"); System.out.println(s1); // Set<String> keys = jedis.keys("*"); // System.out.println(keys); //关闭jedis连接 jedis.close(); } public static void main2(String[] args) { //创建连接池对象 JedisPool jedisPool = new JedisPool("127.0.0.1", 6379); //从连接池中获取一个jedis对象 Jedis jedis = jedisPool.getResource(); jedis.set("key2", "jedisPool2"); String string = jedis.get("key2"); System.out.println(string); //关闭jedis对象 jedis.close(); //关闭连接池 jedisPool.close(); } public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:redis-config/applicationContext-jedis.xml"); JedisClientSingle j = (JedisClientSingle) applicationContext.getBean(JedisClientSingle.class); j.set("b", "6u"); String s = j.get("b"); System.out.println(s); } public static void main3(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:redis-config/applicationContext-jedis2.xml"); JedisClientSingle2 j = (JedisClientSingle2) applicationContext.getBean(JedisClientSingle2.class); j.set("b", "5k"); String s = j.get("b"); System.out.println("----------------------------------"+s); } public static void main4(String[] args) throws CtgJedisPoolException { JedisPoolConfig poolConfig = new JedisPoolConfig(); // 线程池配置 poolConfig.setMaxIdle(3); // 最大空闲连接数 poolConfig.setMaxTotal(10); // 最大连接数(空闲+使用中) poolConfig.setMinIdle(3); // 保持的最小空闲连接数 poolConfig.setMaxWaitMillis(3000); // 借出连接时最大的等待时间 List<HostAndPort> nodes = new ArrayList<HostAndPort>(); String[] hostArr = "172.16.1.249:10051".split(","); for (String host : hostArr) { String[] hostPort = host.split(":"); nodes.add(new HostAndPort(hostPort[0], Integer.parseInt(hostPort[1]))); } CtgJedisPoolConfig ctgJedisPoolConfig = new CtgJedisPoolConfig(nodes); ctgJedisPoolConfig.setDatabase(21) // 分组对应的桶位 .setPassword("cust_center_all#Tydic123") // “用户#密码” .setPoolConfig(poolConfig) // 线程池配置 .setPeriod(3000) // 后台监控执行周期,毫秒 .setMonitorTimeout(2000); // 后台监控ping命令超时时间,毫秒 CtgJedisPool ctgJedisPool = new CtgJedisPool(ctgJedisPoolConfig); ProxyJedis jedis = ctgJedisPool.getResource(); jedis.set("a", "7777777"); System.out.println("-----------: "+jedis.get("a")); if(jedis!=null){ jedis.close(); } } }