这里共享资源的定义,就是多个用户可能同时访问到的资源。比如功能首页的列表,活动页面等等。
方案1:后台脚本刷新
通过后台脚本将后台配置的内容定时刷新到cache中,接口直接读对应键内容。
特点:1. server主动更新Cache
2. 所有用户读到的内容都是一致的。
3. 如果后台没有设置有效期。前端接口可以100%读到数据
适用场景: 对对象信息的处理,如商品信息,应用信息等。供其他服务适用
方案2:定时失效更新
一个用户读数据,缓存不存在时,访问db然后cache(固定有效期),最后返回给用户。之后在这段
有效期内所有用户访问该数据会直接返回cache内容。等cache失效会重新读库并cache
特点: 1. Cache随用户访问更新
2. 可能引发cache穿透。大量访问压向后台db,频繁更新无用的Cache
3. 为了处理穿透,部分用户访问的内容可能不同
适用场景: 列表资源,涉及分页等处理。
如何处理穿透?
1. cache失效时,多个用户访问只许一个访问db(加锁)。别的用户访问到锁则不进行数据库访问
2. cache失效,那些访问到锁又不查库。给用户返回空数据? 不行! 怎么处理? 假失效!
如何假失效? key 对应的数据 =》 (DB内容 + expire过期截止时间) 。 expire大于当前
时间说明失效,去访问DB,发现有锁,说明别人已经在更新缓存。自己则返回本该失效的内容。