如何使用jedis连接调用redis
下文笔者讲述Java代码中使用jedis连接redis的方法分享,如下所示
实现思路: 1.设置redis.properties文件 2.spring-redis.xml配置bean 3.编写相应的java代码
redis.properties文件
# Redis settings redis.host=ip redis.port=6379 redis.pass=password #客户端超时时间单位是毫秒 默认是2000 redis.timeout=10000 redis.dbIndex=1 redis.dbIndex2=2 redis.CachingTime=900 #最大空闲数 redis.maxIdle=300 #最小空闲数 redis.minIdle=1 #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal #redis.maxActive=600 #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性 redis.maxTotal=1000 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 redis.maxWaitMillis=3000 #连接的最小空闲时间 默认1800000毫秒(30分钟) redis.minEvictableIdleTimeMillis=300000 #每次释放连接的最大数目,默认3 redis.numTestsPerEvictionRun=1024 #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1 redis.timeBetweenEvictionRunsMillis=30000 #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 redis.testOnBorrow=true #返回性校验 redis.testOnReturn=true #在空闲时检查有效性, 默认false redis.testWhileIdle=true
spring-redis.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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <!-- 使用redis缓存 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}" /> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="minIdle" value="${redis.minIdle}" /> <property name="maxWaitMillis" value="${redis.maxWaitMillis}"/> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> <property name="testOnReturn" value="${redis.testOnReturn}"/> </bean> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="poolConfig" ref="jedisPoolConfig" /> <constructor-arg name="host" value="${redis.host}" /> <constructor-arg name="port" value="${redis.port}" type="int" /> <constructor-arg name="timeout" value="${redis.timeout}" type="int" /> <constructor-arg name="password" value="${redis.pass}" /> <constructor-arg name="database" value="${redis.dbIndex2}" type="int" /> </bean> <!-- end使用redis缓存 --> </beans>
spring-redis.xml导入到spring文件
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:properties/*.properties</value> <value>classpath:application.properties</value> </list> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="properties" ref="configProperties" /> </bean> <import resource="classpath:spring/spring-*.xml" /> </beans>
java代码
import redis.clients.jedis.Jedis; public interface JedisDataSource { Jedis getRedisClient(); void returnResource(Jedis jedis); void returnResource(Jedis jedis, boolean broken); } (1)推荐大家使用统一的类来管理Jedis实例的生成和回收,参考代码如下:JedisDataSourceImpl.class import com.java265.boss.infos.service.JedisDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @Repository("jedisDS") public class JedisDataSourceImpl implements JedisDataSource { private static final Logger logger = LoggerFactory.getLogger(JedisDataSourceImpl.class); @Autowired private JedisPool jedisPool; @Override public Jedis getRedisClient() { Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis; } catch (Exception e) { logger.error("[JedisDS] getRedisClent error:" + e.getMessage()); if (null != jedis) jedis.close(); } return null; } @Override public void returnResource(Jedis jedis) { jedis.close(); } @Override public void returnResource(Jedis jedis, boolean broken) { jedis.close(); } }
Jedis操作类 RedisClientTemplate.class
import com.java265.boss.infos.service.JedisDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import redis.clients.jedis.Jedis; @Repository("redisClientTemplate") public class RedisClientTemplate { private static final Logger log = LoggerFactory.getLogger(RedisClientTemplate.class); @Autowired private JedisDataSource redisDataSource; public void disconnect() { Jedis jedis = redisDataSource.getRedisClient(); jedis.disconnect(); } /** * 设置单个值 * * @param key * @param value * @return */ public String set(String key, String value) { String result = null; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.set(key, value); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } /** * 获取单个值 * * @param key * @return */ public String get(String key) { String result = null; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.get(key); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public Boolean exists(String key) { Boolean result = false; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.exists(key); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public String type(String key) { String result = null; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.type(key); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } /** * 在某段时间后失效 * * @param key * @param seconds * @return */ public Long expire(String key, int seconds) { Long result = null; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.expire(key, seconds); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } /** * 在某个时间点失效 * * @param key * @param unixTime * @return */ public Long expireAt(String key, long unixTime) { Long result = null; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.expireAt(key, unixTime); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public Long ttl(String key) { Long result = null; Jedis jedis = redisDataSource.getRedisClient(); if (jedis == null) { return result; } boolean broken = false; try { result = jedis.ttl(key); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public boolean setbit(String key, long offset, boolean value) { Jedis jedis = redisDataSource.getRedisClient(); boolean result = false; if (jedis == null) { return result; } boolean broken = false; try { result = jedis.setbit(key, offset, value); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public boolean getbit(String key, long offset) { Jedis jedis = redisDataSource.getRedisClient(); boolean result = false; if (jedis == null) { return result; } boolean broken = false; try { result = jedis.getbit(key, offset); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public long setRange(String key, long offset, String value) { Jedis jedis = redisDataSource.getRedisClient(); long result = 0; if (jedis == null) { return result; } boolean broken = false; try { result = jedis.setrange(key, offset, value); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } public String getRange(String key, long startOffset, long endOffset) { Jedis jedis = redisDataSource.getRedisClient(); String result = null; if (jedis == null) { return result; } boolean broken = false; try { result = jedis.getrange(key, startOffset, endOffset); } catch (Exception e) { log.error(e.getMessage(), e); broken = true; } finally { redisDataSource.returnResource(jedis, broken); } return result; } } //业务代码中直接使用 RedisClientTemplate.class即可直接操作redis
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。