场景:

在做查询数据的时候,遇到了需要设置数据在redis中第二天过期的问题,但是redis又没有对应的API,就只好自己来解决了

思路:

计算出第二天凌晨与当前时间的时间差,将该时间差设置为redis的过期时间,就可以达到我们想要的效果

代码:

/*** 计算第二天凌晨与当前时间的时间差秒数* @param* @return java.lang.Long* @author shy* @date 2021/3/12 18:10*/public static Long getNowToNextDaySeconds() {Calendar cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_YEAR, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.MILLISECOND, 0);return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;}

拿到了时间差,剩下的基本上就没什么问题了。

附上Redis工具类:


/*** 操作redis* @author shy* @date 2020/12/10 10:01*/
@Service
public class RedisService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 判断String类型key是否存在** @param key* @return * @author shy* @date 2018年11月13日 下午1:40:37*/public boolean hasStringKey(String key) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}return stringRedisTemplate.opsForValue().getOperations().hasKey(key);}/*** 判断String类型key是否存在** @param key* @return * @author shy* @date 2018年11月13日 下午1:43:51*/public boolean nonStringKey(String key) {return !hasStringKey(key);}/*** 设置String类型key,String类型value,过期时间timeout,TimeUnit** @param key* @param value* @param timeout* @param timeUnit* @author shy* @date 2018年12月10日13:53:38*/public void setStringKey(String key, String value, Long timeout, TimeUnit timeUnit) {if (StringUtils.isBlank(key) || Objects.isNull(timeout)) {throw new EmptyParameterException();}stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);}public void setStringKey(String key, String value) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}stringRedisTemplate.opsForValue().set(key, value);}/*** 获取String类型value** @param key* @return* @author shy* @date 2018年11月12日 下午7:09:31*/public String getStringValue(String key) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}return stringRedisTemplate.opsForValue().get(key);}/***  获取Key的过期时间** @param key* @return* @author shy* @date 2019年4月25日17:28:36*/public Long getExpire(String key) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}return stringRedisTemplate.getExpire(key);}/*** 设置Key的过期时间** @param key* @return* @author shy* @date 2019年4月25日17:28:36*/public Boolean setExpire(String key,Long timeout, TimeUnit timeUnit) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}return stringRedisTemplate.expire(key, timeout, timeUnit);}/*** value自增+n* @param key* @return* @author shy* @date 2019年4月8日15:54:30*/public Long setIncrementValue(String key) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}return stringRedisTemplate.opsForValue().increment(key, 1L);}/*** 设置String类型key,Object类型value,过期时间timeout** @param key* @param value* @param timeout* @author shy* @date 2018年12月10日13:54:07*/public void setObjectKey(String key, Object value, Long timeout,TimeUnit time) {if (StringUtils.isBlank(key) || Objects.isNull(timeout)) {throw new EmptyParameterException();}redisTemplate.opsForValue().set(key, value, timeout, time);}public void setObjectKey(String key, Object value) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}redisTemplate.opsForValue().set(key, value);}/*** 获取Object类型value** @param key* @param clazz* @return * @author shy* @date 2019年11月6日10:01:30*/@SuppressWarnings("unchecked")public <T> T getObjectValue(String key, Class<T> clazz) {if (StringUtils.isBlank(key)) {return null;}return (T) redisTemplate.opsForValue().get(key);}/*** 移除单个String类型key** @param key * @author shy* @date 2018年11月13日 上午10:42:01*/public void removeSingleStringKey(String key) {if (StringUtils.isBlank(key)) {throw new EmptyParameterException();}stringRedisTemplate.opsForValue().getOperations().delete(key);}/*** 移除Collection<String>类型keys** @param keys * @author shy* @date 2018年11月13日 下午3:15:16*/public void removeMultiStringKey(Collection<String> keys) {if (CollectionUtils.isNotEmpty(keys)) {stringRedisTemplate.opsForValue().getOperations().delete(keys);}}/*** redis key 模糊查询* @author shy* @date 2021年1月4日 上午11:21:45* @param key* @return*/public Set<String> queryStringKeys(String key) {return redisTemplate.keys(key + "*");}}

Java操作redis设置第二天凌晨过期相关推荐

  1. 如何用java操作Redis缓存设置过期时间

    如何用java操作Redis缓存设置过期时间?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获. 在应用中我们会需要使用red ...

  2. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

  3. 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用

    java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...

  4. Redis 笔记之 Java 操作 Redis(Jedis)

    Java 操作 Redis 环境准备 引入依赖 创建 jedis 对象 操作 Key 相关 API 操作 String 相关 API 操作 List 相关 API 操作 Set 的相关 API 操作 ...

  5. Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅)

    Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅) 1. 配置环境 在SpringBoot2.0版本以后,原来使用的jedis被替换成为了let ...

  6. JAVA操作REDIS执行原子操作

    JAVA操作REDIS执行原子操作 JAVA操作REDIS执行原子操作 为什么要使用原子操作 JAVA操作REDIS执行原子操作 为什么要使用原子操作 众所周知,redis 作为数据库的前置库,给数据 ...

  7. 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有

    文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...

  8. java操作redis简单示例

    java操作redis简单示例     初学redis,在java语言和环境下完成redis的入门学习.              首先,官网下载源码,编译,安装,修改配置文件redis.conf中的 ...

  9. Java操作Redis存储HashMap对象类型数据

    背景描述 关于JAVA去操作Redis时,如何存储一个对象的数据,这是大家非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用.存储一个对象是非常常见的 ...

最新文章

  1. 深度学习Dropout技术分析
  2. Android开源中国客户端学习 (自定义View)左右滑动控件ScrollLayout
  3. Geoserver中TileLayers中切割离线瓦片预览时地图模糊不清
  4. POJ 2084 Catalan数+高精度
  5. Linux字符驱动程序的基本结构与函数
  6. 苹果CMS的V10版本后台登录一直提示验证码错误的解决方案
  7. http的请求体body的几种数据格式
  8. SpringBoot2 整合JTA组件,多数据源事务管理
  9. 批处理延迟sleep应用
  10. Spring MVC学习总结(10)——Spring MVC使用Cors跨域
  11. sublime text3的一些小技巧记录(配gif图)
  12. Navicat for MySQL 64位官方中文版
  13. 回调函数的概念及使用
  14. cuda和cudnn下载地址
  15. 科学计算机怎么计算电工学向量,电工学常用单位计算与换算公式大全
  16. Docker搭建内部知识库(Wiki)
  17. python 条件循环赋值_python学习(五) 条件、循环和其他语句
  18. 用R语言软件估计光谱密度
  19. forward和include的区别详解
  20. 美国四大科技巨头:苹果、微软、Facebook、谷歌的爱恨情仇

热门文章

  1. Java的基础重要吗?Java入门应该学习那些?
  2. 连接PC的打印机打印时乱码
  3. 【愚公系列】2022年08月 微信小程序-左划删除效果实现
  4. C# winform中的打印文件的实现方式
  5. Elasticsearch7.* + SpringBoot2.*根据中文和拼音分页去重搜索
  6. java.lang.NoClassDefFoundError: com/sun/star/lang/DisposedException
  7. 一个关于windows服务管理的工具的源码
  8. 佳能G4810彩色喷墨打印机更换墨盒
  9. Linux软件raid删除
  10. 表格样式的层叠顺序与优先级