在前面的文章《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; }
最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...