赞
踩
用户那边提出了一个关于缓存失效设置的一个需求,要求可以设置整点失效,比如,在每天00:00:00的时候,缓存失效,场景是有些数据是t+1的。
历史系统本来也支持缓存,但是缓存用的是相对时间:当用户获取的时候,先从缓存中取,如果取不到就从数据库取,再放进内存,使用的如下:
- //只缓存一小时,一小时后redis会自动把该key删除,
- redisTemplate.opsForValue().set(key, value,1, TimeUnit.HOURS);
这种设计,针对t+1的数据缓存,无法达到想要效果。
因为redis未提供设置具体时间失效的方法,一开始设计的时候考虑,把值设置进去,不设置失效时间,记录下key和需要失效的时间点,搞个定时任务,定时去扫,到了失效时间就从redis里删除。但后面发现这样太麻烦了,最后想到的方案是:在set的时候,就算出用户设置的时间和当前时间差,把失效时间设置进入就好了。比如,用户设置了天类型缓存,要求每天00:00:00缓存失效,当前时间是23:00:00,两个时间差一小时,那我设置一小时失效时间就好了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。