在前面的文章《Springboot中使用的redisUtils工具类》我们介绍了常用的redis相关的工具类。但是那个类还不是很齐全,因此这里我们直接写一个比较全的,适合生产环境使用的rediscache utils工具类。完整代码如下:
package com.demo.utils.redis;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
/**
* Redis Cache
*/
@Component
public class RedisCache {
@Resource
private RedisTemplate<String, Object> redisTemplate;
/**
* 默认过期时长为24小时,单位:秒
*/
public final static long DEFAULT_EXPIRE = 60 * 60 * 24L;
/**
* 过期时长为1小时,单位:秒
*/
public final static long HOUR_ONE_EXPIRE = 60 * 60 * 1L;
/**
* 过期时长为6小时,单位:秒
*/
public final static long HOUR_SIX_EXPIRE = 60 * 60 * 6L;
/**
* 不设置过期时长
*/
public final static long NOT_EXPIRE = -1L;
public void set(String key, Object value, long expire) {
redisTemplate.opsForValue().set(key, value);
if (expire != NOT_EXPIRE) {
expire(key, expire);
}
}
public void set(String key, Object value) {
set(key, value, DEFAULT_EXPIRE);
}
public Object get(String key, long expire) {
Object value = redisTemplate.opsForValue().get(key);
if (expire != NOT_EXPIRE) {
expire(key, expire);
}
return value;
}
public Object get(String key) {
return get(key, NOT_EXPIRE);
}
public Long increment(String key) {
return redisTemplate.opsForValue().increment(key);
}
public Boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
public void delete(String key) {
redisTemplate.delete(key);
}
public void delete(Collection<String> keys) {
redisTemplate.delete(keys);
}
public Object hGet(String key, String field) {
return redisTemplate.opsForHash().get(key, field);
}
public Map<String, Object> hGetAll(String key) {
HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();
return hashOperations.entries(key);
}
public void hMSet(String key, Map<String, Object> map) {
hMSet(key, map, DEFAULT_EXPIRE);
}
public void hMSet(String key, Map<String, Object> map, long expire) {
redisTemplate.opsForHash().putAll(key, map);
if (expire != NOT_EXPIRE) {
expire(key, expire);
}
}
public void hSet(String key, String field, Object value) {
hSet(key, field, value, DEFAULT_EXPIRE);
}
public void hSet(String key, String field, Object value, long expire) {
redisTemplate.opsForHash().put(key, field, value);
if (expire != NOT_EXPIRE) {
expire(key, expire);
}
}
public void expire(String key, long expire) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
public void hDel(String key, Object... fields) {
redisTemplate.opsForHash().delete(key, fields);
}
public void leftPush(String key, Object value) {
leftPush(key, value, DEFAULT_EXPIRE);
}
public void leftPush(String key, Object value, long expire) {
redisTemplate.opsForList().leftPush(key, value);
if (expire != NOT_EXPIRE) {
expire(key, expire);
}
}
public Object rightPop(String key) {
return redisTemplate.opsForList().rightPop(key);
}
/**
* 发布订阅
* @param topic
* @param message
*/
public void convertAndSend(String topic, String message) {
redisTemplate.convertAndSend(topic, message);
}
}在这里我们集成了redis的4种数据结构,分别是:
string数据结构 hash数据结构 list数据结构 set数据结构
同时还有涉及到:
过期 删除 队列 订阅 自增
这些功能。在使用的时候直接开箱即用即可。
备注:
1、在这里特别要提一句,在实际工作中,我们经常会多个项目共用一个redis,因此对于redis里面的key这些,一定要避免出现多个项目共享一个redis key,因此这里一般我们都会做一个rediskey的文件,通过配置来统一进行管理相关的key,例如下面的rediskey代码:
package com.demo.utils.redis;
/**
* Redis Key管理
*
* @author 阿沐 babamu@126.com
*/
public class RedisKeys {
/**
* 验证码Key
*/
public static String getCaptchaKey(String key) {
return "sys:captcha:" + key;
}
/**
* accessToken Key
*/
public static String getAccessTokenKey(String key) {
return "sys:access:" + key;
}
/**
* projectId Key
*/
public static String getProjectIdKey(String key) {
return "sys:project:id:" + key;
}
/**
* projectId Key
*/
public static String getProjectKey(Long key) {
return "sys:project:" + key;
}
}在使用的时候,我们的使用示例如下:
@Autowired
private RedisCache redisCache;
@RequestMapping("/get")
public String get() {
String token = (String) redisCache.get(RedisKeys.getAccessTokenKey("token"));
return token;
}最后按照惯例,附上本案例的源码,登录后即可下载。









还没有评论,来说两句吧...