@Component
public class RedisUtils {
/**
* 默认过期时长,单位:秒
*/
public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
/**
* 不设置过期时长
*/
public final static long NOT_EXPIRE = -1;
private final static Gson GSON = new Gson();
private final RedisTemplate<String, Object> redisTemplate;
private final ValueOperations<String, String> valueOperations;
private final HashOperations<String, String, Object> hashOperations;
private final ListOperations<String, Object> listOperations;
private final SetOperations<String, Object> setOperations;
private final ZSetOperations<String, Object> zSetOperations;
@Autowired
public RedisUtils(RedisTemplate<String, Object> redisTemplate, ValueOperations<String, String> valueOperations, HashOperations<String, String, Object> hashOperations, ListOperations<String, Object> listOperations, SetOperations<String, Object> setOperations, ZSetOperations<String, Object> zSetOperations) {
this.redisTemplate = redisTemplate;
this.valueOperations = valueOperations;
this.hashOperations = hashOperations;
this.listOperations = listOperations;
this.setOperations = setOperations;
this.zSetOperations = zSetOperations;
}
public void set(String key, Object value, long expire) {
valueOperations.set(key, toJson(value));
if (expire != NOT_EXPIRE) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
}
public void hset(String key,String hashKey,Object value){
hashOperations.put(key,hashKey,value);
}
public String hget(String key,Object hashKey){
return hashOperations.get(key,hashKey).toString();
}
public void set(String key, Object value) {
set(key, value, DEFAULT_EXPIRE);
}
public <T> T get(String key, Class<T> clazz, long expire) {
String value = valueOperations.get(key);
if (expire != NOT_EXPIRE) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
return fromJson(value, clazz);
}
public <T> T get(String key, Class<T> clazz) {
return get(key, clazz, NOT_EXPIRE);
}
public String get(String key, long expire) {
String value = valueOperations.get(key);
if (expire != NOT_EXPIRE) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
return value;
}
public String get(String key) {
return get(key, NOT_EXPIRE);
}
public void delete(String key) {
redisTemplate.delete(key);
}
/**
* Object转成JSON数据
*/
private String toJson(Object object) {
if (object instanceof Integer || object instanceof Long || object instanceof Float ||
object instanceof Double || object instanceof Boolean || object instanceof String) {
return String.valueOf(object);
}
return GSON.toJson(object);
}
/**
* JSON数据,转成Object
*/
private <T> T fromJson(String json, Class<T> clazz) {
return GSON.fromJson(json, clazz);
}
public void expire(String key, long timeout, TimeUnit timeUnit) {
redisTemplate.expire(key, timeout, timeUnit);
}
/**
* 匹配查询redis中的key
*
* @param rex
* @return
*/
public Set<String> keys(String rex) {
Set<String> result = null;
result = redisTemplate.keys(rex);
return result;
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
public class RedisKeys {
public static String getSysConfigKey(String key) {
return "sys:config:" + key;
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
public interface RedisOperatorService {
Boolean exists(String key) ;
String set(String key, String value) ;
String get(String key) ;
Long ttl(String key) ;
String setex(String key, int seconds, String value);
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Service
@Transactional(rollbackFor = Exception.class)
public class RedisOperatorImpl implements RedisOperatorService {
protected static final Logger LOG = LoggerFactory
.getLogger(RedisOperatorService.class);
@Resource(name="JedisPool")
private JedisPool jedisPool;
public void returnResource(Jedis jedis) {
jedis.close();
}
public void returnResource(Jedis jedis, boolean broken) {
jedis.close();
}
@Override
public Boolean exists(String key) {
Boolean result = false;
Jedis jedis = jedisPool.getResource();
if (jedis == null) {
return result;
}
boolean broken = false;
try {
result = jedis.exists(key);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
broken = true;
} finally {
returnResource(jedis, broken);
}
return result;
}
@Override
public String set(String key, String value) {
String result = null;
Jedis jedis = jedisPool.getResource();
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 {
returnResource(jedis, broken);
}
return result;
}
@Override
public String get(String key) {
String result = null;
Jedis jedis = jedisPool.getResource();
if (jedis == null) {
return result;
}
boolean broken = false;
try {
result = jedis.get(key);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
broken = true;
} finally {
returnResource(jedis, broken);
}
return result;
}
@Override
public Long ttl(String key) {
Long result = null;
Jedis jedis = jedisPool.getResource();
if (jedis == null) {
return result;
}
boolean broken = false;
try {
result = jedis.ttl(key);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
broken = true;
} finally {
returnResource(jedis, broken);
}
return result;
}
@Override
public String setex(String key, int seconds, String value) {
String result = null;
Jedis jedis = jedisPool.getResource();
if (jedis == null) {
return result;
}
boolean broken = false;
try {
result = jedis.setex(key, seconds, value);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
broken = true;
} finally {
returnResource(jedis, broken);
}
return result;
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
@Component
public class SysConfigRedis {
private final RedisUtils redisUtils;
@Autowired
public SysConfigRedis(RedisUtils redisUtils) {
this.redisUtils = redisUtils;
}
public void saveOrUpdate(SysConfigEntity config) {
if (config == null) {
return;
}
String key = RedisKeys.getSysConfigKey(config.getParamKey());
redisUtils.set(key, config);
}
public void delete(String configKey) {
String key = RedisKeys.getSysConfigKey(configKey);
redisUtils.delete(key);
}
public SysConfigEntity get(String configKey) {
String key = RedisKeys.getSysConfigKey(configKey);
return redisUtils.get(key, SysConfigEntity.class);
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
@Configuration
public class JedisPoolBean {
@Bean(name = "JedisPool")
public JedisPool getJedisPoll() {
return new JedisPool();
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
@Configuration
public class RedisConfig {
private final RedisConnectionFactory factory;
@Autowired
public RedisConfig(RedisConnectionFactory factory) {
this.factory = factory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
@Bean
public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForHash();
}
@Bean
public ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {
return redisTemplate.opsForValue();
}
@Bean
public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForList();
}
@Bean
public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForSet();
}
@Bean
public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
return redisTemplate.opsForZSet();
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
项目代码如下