1
Boyizmen 2018 年 1 月 10 日
java 里有个 WeakHashMap,key 不再被引用就会自动清理
|
2
archer2ee 2018 年 1 月 10 日 via iPhone
guavaa cache,自带过期失效。
|
3
chocotan 2018 年 1 月 10 日
|
4
MarcoQin 2018 年 1 月 10 日
进入缓存带上时间戳,取的时候每次都比较时间戳,若是超过 5 分钟就清楚并重新获取数据进行缓存
|
5
qianlv7 2018 年 1 月 10 日
LRU
|
8
justfly 2018 年 1 月 10 日
如果要求对空间要求比较高,那就定时(比如每秒)在另一个线程扫一遍,可以加一个辅助一个按时间顺序的 List,找到 5min 以外的就可以。
不要求太精确空间控制的话,或者限制单线程场景下,每次写入的时候做一下上面的扫描清除逻辑。 或者再复杂,参考 redis 的过期策略,取样、算比例、清理,可以读下 redis 的过期逻辑。 |
9
MarcoQin 2018 年 1 月 10 日
@admirez #6 一直没有被命中的情况我猜是请求频率太低导致的?那这样的话是否还需要缓存……
取的时候如果没有命中,那就再重新写入缓存……当然,这种方式适合临时做或少量的缓存。大量应用缓存的话,用定时任务做可能好一些,比如楼上说的那样 |
11
xcolder 2018 年 1 月 10 日
Guava Cache + 1
|
12
rockyou12 2018 年 1 月 10 日
lz 要不是有什么特别业务直接用 google guava 里的 cache 就行了,很简单的
|
13
yangg 2018 年 1 月 10 日
同求 node 或者 js 的
|
14
innoink 2018 年 1 月 10 日
LRU,双链表
|
15
noe132 2018 年 1 月 10 日 via Android
node 有 lru-cache。可以设置个定时任务清理过期的缓存
|
16
bazingaterry 2018 年 1 月 10 日 via iPhone 參考一下 Redis 的實現唄
|
17
honeycomb 2018 年 1 月 10 日 via Android
guava cache
eviction 机制比较优雅,而且要使用 weak/soft 引用也没问题,回调 /权重 /load 接口,错误处理 /性能统计,builder 等都预先准备好了。 |
18
HaoyangWei 2018 年 1 月 10 日
如果说自己造轮子的话,map+双向链表=>LRU map
使用时读取前检查时间,写入前检查时间并最多尝试淘汰 2 个元素 就好啦:) |
19
th00000 2018 年 1 月 10 日
可以参考热点缓存机制, 简单来说就是维护一个 1000 长度的队列, 每次用的时候就放到队列头, 每 5 分钟清除队列尾部的 200 条数据, 再从数据库中拿 200 条来补充. 以此来实现
|
20
argsno 2018 年 1 月 10 日
Redis 在读取数据的时候判断是否过期,以及定期删除过期的键
|
21
c4f36e5766583218 2019 年 3 月 30 日
Guava CacheBuilder
|