请问ehcache或者Caffeine怎么设置某一个key的过期时间???

Sylow 发布于 2021/09/08 17:56
阅读 7K+
收藏 0

【直播预告】SQL 审核真的能审出数据库的所有问题吗?”

如题,我现在搜的一批又一批的资料教程,都是统一配置。没办法针对到具体某个key

我想像Redis一样实现,某个key的过期时间

加载中
0
kakai
kakai

Caffeine,

Cache<String, RoomInfo> localCache = Caffeine.newBuilder() //本地缓存
            .maximumSize(1024)
            .expireAfterAccess(30, TimeUnit.MINUTES)
            .build();

Cache泛型的第二个参数是缓存类型限定,在限定类型下expireAfterAccess表示每次put后都更新过期时间

Sylow
Sylow
回复 @kakai : 主要是这块有这样的需求,每条数据过期时间不同,还不能用redis
kakai
kakai
回复 @Sylow : 好像不行,不过在类型限定下,相同类型数据的缓存时间不应该相同吗?而且每条数据更新写入后过期时间同步更新,也就是说随着每条数据的更新时机不同过期时间也是不同的。
Sylow
Sylow
那每个缓存的过期时间 都不一样,这个能搞不??这种统一配置的方式看过了:sob:
0
爱De资格

redis可以,其他缓存基本都没这功能

爱De资格
回复 @Sylow : 大概率得自己造
Sylow
Sylow
那就很尴尬了,不能用redis是硬性需求。需要做一个本地的缓存,不用额外安装的...
0
zhaobohao
zhaobohao

我理解 ,你用caffeine,不同的过期时间,就生成不同的cache不就行了??又占用不了多少内存。

Sylow
Sylow
:sob:可能要十几二十个 妈耶
0
jzdayz
jzdayz

曲线救国,建议在包装一下存入的value,弄个类,记录下存入时间,设置的过期时间,拿出来的时候判断是否过期。

jzdayz
jzdayz
回复 @Sylow : 参考hutool的cache实现,就是用CacheObj把对象包装起来的,可以put设置超时时间,如果你用的缓存不复杂,不需要持久化等功能,就用hutool里面的cache就行了。
Sylow
Sylow
改动量有点大,不过貌似也可行,过两天我试试
0
osc_69656298
osc_69656298

使用 `expireAfter` 可以实现,在 expireAfterCreate 里面添加判断。

0
l
liangcha_h
caffeine本身自己可以支持,看如下
cache.policy().expireVariably().ifPresent(e->{
    e.put("aaa", 1, 1, TimeUnit.SECONDS);
    e.put("bbb", 2, 3, TimeUnit.SECONDS);
});
0
最后的夏天
最后的夏天

用hutool的TimedCache

 

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部