一、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 import到总的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>
具体springMvc的相关xml文件可以查看博客:待写
三、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.bmw.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();
}
}
- (2)编写具体的Jedis操作类(片断):RedisClientTemplate.class
import com.bmw.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;
}
}
- (3)好了,接下来在你的业务代码里加载RedisClientTemplate.class就可以了。