1 Star 0 Fork 245

smallAnt / AutoLoadCache

forked from qiujiayu / AutoLoadCache 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
suggest.md 1.48 KB
一键复制 编辑 原始数据 按行查看 历史
qiujiayu 提交于 2018-12-12 23:06 . 调整说明文档代码

最佳实战

“空”处理

非常多人都有这样的误区,认为数据层返回数据如果是“空”时(这里的空指的是:null或集合里为空)就不进行缓存了,这样才能实现数据的及时更新。对于这个情况,还是要分情况处理的。

  1. 数据为“空”是人为造成的,不是真的没有数据

    非常典型的例子就是,异常处理不当造成的:直接使用try,catch,然后直接就返回null,或者一个空的集合。这样的做法非常不合理,使用者根本无法知道,是真的没有数据,还是因为有异常造成的,我们更无法确定要不要缓存这类数据了。

    所以我们在实现数据层接口时,一定要合理使用异常处理。

  2. 数据“真的”为“空”时,建议缓存起来

    我们使用缓存的目的之一,就是防止缓存失效后直接穿透到数据层,造成系统负载过高。所以如果获取这个数据并发突然上来了,很容易造成系统瘫痪。如果只是尽快更新缓存中的数据,达到更好的“实时”性,可以减小缓存时间来实现。

    在AutoLoadCache 已经支持这种处理机制,只要在@Cache中,使用expireExpression,可以动态设置缓存时长,如:

    @Cache(key = "...", expireExpression = "#empty(#retVal) ? 60: 120")

    而且数据为“空”,它是有它实际意义的,就是告诉我们现在没有数据, 不要忽略这点。

Java
1
https://gitee.com/smallAnt99/AutoLoadCache.git
git@gitee.com:smallAnt99/AutoLoadCache.git
smallAnt99
AutoLoadCache
AutoLoadCache
master

搜索帮助