laravel的cache如何设置一个值有生命周期,然后这期间我会更新这个值,如何使得生命周期不变的?
情况是这样的,我想对一个值设置一个生命周期
cache()->set(‘test’,’value’,30); //30秒后就消失
但是在30秒内我会更新这个值,如果我用
cache()->set(‘test’,’value1’);//那么生命周期就永久了
我想的是能既更新缓存值又不改变生命周期?
高认可度评论:
把时间存进去,计算剩余时间重新设置就行
试试
put()
可以先读取剩余的过期时间 然后设置值的时候 过期时间 设置这个剩余的过期时间就可以了
目前,没有好办法,因为 Cache 是标准包装,没有提供获取 key 的 ttl 的方法,所以你不能知道它还有多久过期。
但是有另外一个方法,就是你可以传一个实现了
\DateTimeInterface
接口的对象进去,比如,传一个 Carbon,那 Laravel 就会自动计算到期的时间。当然, 你也可以获取到底层的 Redis, 封装后手动控制查询,以下代码加入到 AppServiceProvider 的 boot 里面。
使用示例
这只是一个简单的封装,可能还有其他一些未处理的问题,比如使用 tags 时
获取缓存过期剩余时间秒的方法
采用 radis 缓存:
采用文件存储缓存:
在 AppServiceProvider.php 的 boot 方法中 添加:
使用:
把时间存进去,计算剩余时间重新设置就行