如何使用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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


