1.配置文件 (redis.properties)
#redis的基本设置
redis.host=192.168.246.128
redis.post=6379
redis.timeout = 0
redis.maxIdle=300
2.整合redis
package com.zy.redis;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedisPool;
@Configuration
@ComponentScan("com.zy.redis")
@PropertySource("classpath:/redis.properties")
public class ConfigApp {
@Value("${redis.host}")
private String host;
@Value("${redis.maxIdle}")
private int maxIdle;
@Value("${redis.post}")
private int post;
@Value("${redis.timeout}")
private int timeout;
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigure(){
return new PropertySourcesPlaceholderConfigurer();
}
//JedisPoolConfig的配置
@Bean
public JedisPoolConfig jedisPoolConfig(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setTestOnBorrow(true);
jedisPoolConfig.setTestOnReturn(true);
jedisPoolConfig.setMaxWaitMillis(1000);
return jedisPoolConfig;
}
@Bean
public List<JedisShardInfo> jedisShardInfo(){
List<JedisShardInfo> jedisShardInfos = new ArrayList<JedisShardInfo>();
JedisShardInfo jedisShardInfo = new JedisShardInfo(
host,post,timeout );
jedisShardInfos.add(jedisShardInfo);
return jedisShardInfos;
}
//redis连接池的设置
@Bean
@Scope("singleton")
public ShardedJedisPool shardedJedisPool(){
ShardedJedisPool shardedJedisPool = new ShardedJedisPool(jedisPoolConfig(),jedisShardInfo());
return shardedJedisPool;
}
}
3.redis 公共方法的封装
package com.zy.redis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
@Service
public class RedisServiceImpl {
private static final Logger log = LoggerFactory.getLogger(RedisServiceImpl.class);
@Autowired
private ShardedJedisPool shardedJedisPool;
/**
* 获取ShardedJedis实例
* @return
*/
public ShardedJedis getRedisClient(){
try {
ShardedJedis shardJedis = shardedJedisPool.getResource();
return shardJedis;
} catch (Exception e) {
log.error("getRedisClent error", e);
}
return null;
}
public void returnResource(ShardedJedis shardedJedis) {
shardedJedisPool.returnResource(shardedJedis);
}
public void returnResource(ShardedJedis shardedJedis, boolean broken) {
if (broken) {
shardedJedisPool.returnBrokenResource(shardedJedis);
} else {
shardedJedisPool.returnResource(shardedJedis);
}
}
}
4.使用ShardedJedis封装相应的方法
package com.zy.redis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.ShardedJedis;
@Service
public class RedisClient {
private static final Logger log = LoggerFactory.getLogger(RedisClient.class);
@Autowired
private RedisServiceImpl redisService;
public void disconnect() {
ShardedJedis shardedJedis = redisService.getRedisClient();
shardedJedis.disconnect();
}
/**
* 设置值
*/
public String set(String key, String value) {
String result = null;
ShardedJedis shardedJedis = redisService.getRedisClient();
if (shardedJedis == null) {
return result;
}
boolean flag = false;
try {
result = shardedJedis.set(key, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
flag = true;
} finally {
redisService.returnResource(shardedJedis, flag);
}
return result;
}
/**
* 获取值
*/
public String get(String key){
String result = "";
ShardedJedis shardedJedis = redisService.getRedisClient();
if(shardedJedis==null){
return null;
}
Boolean flag = Boolean.FALSE;
try {
result = shardedJedis.get(key);
} catch (Exception e) {
log.error(e.getMessage(), e);
flag = true;
}finally {
redisService.returnResource(shardedJedis, flag);
}
return result;
}
/**
* 设置在某段时间内失效 time表示为多少秒
*/
public void exprire(String key,int time){
ShardedJedis shardedJedis = redisService.getRedisClient();
if(shardedJedis!=null){
Boolean flag = Boolean.FALSE;
try {
shardedJedis.expire(key, time);
} catch (Exception e) {
e.printStackTrace();
flag=Boolean.TRUE;
}finally{
redisService.returnResource(shardedJedis, flag);
}
}
}
}