Guava1.3——Guava Cache进阶之同步/异步load

本文基于的guava版本是19.0

使用guava cache的时候,在cache中没有值或者值需要更新的时候,都需要去load,而这个load往往对应从数据库或者远程接口拿数据并缓存下来的操作。在高qps场景的服务中,这个load可能会导致调用链的阻塞,如果阻塞时间长,可能会影响服务,甚至可能拖垮服务,所以要了解哪些地方会阻塞,有没有什么方法能够尽量少的去阻塞。

一.同步load

1.load

load是第一次加载,加载之前cache中没有值。load永远都是同步的,不管是否使用异步进行包装,具体见下面第三部分。

对于同一个key,多次请求只会触发一次加载。比如,线程1访问key1,发现cache中不存在key1,然后触发key1的load。与此同时,在load加载完成之前,线程2,线程3...线程N都访问key1,这些访问不会再触发key1的加载,但是在key1的load加载完成之前,这些请求都会被hang在那里等待。调用链如下:

get:4952, LocalCache$LocalLoadingCache

getOrLoad:3967, LocalCache

get:3963, LocalCache

get:2046, LocalCache$Segment

lockedGetOrLoad:2140, LocalCache$Segment

waitForLoadingValue:2153, LocalCache$Segment

waitForValue:3571, LocalCache$LoadingValueReference

getUninterruptibly:168, Uninterruptibles->这里用fu

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值