分布式系统中的缓存——笔记整理
应女朋友之邀,重新开始写起博客
此篇记录近期阅读的关于分布式缓存的一些好文章
分布式之缓存击穿
如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。
文中主要详述了缓存击穿这个问题,提出了三套解决方案,
- 互斥锁 即,在根据key获得的value值为空时,先锁上,再从数据库加载,加载完毕,释放锁。若其他线程发现获取锁失败,则睡眠50ms后重试。。。(感觉这种做法对缓存击穿没啥改善啊,还容易造成死锁hang住整个线程,感觉应该+上缓存下null的状态可能更好)
- 异步构建缓存 (没看懂要干啥)
- 布隆过滤器 听名字挺屌,看起来是维护一个bit数组,然后通过一个特定的hash函数?hash集合的key,从而能够迅速判断一个元素是否在一个集合中。(不支持删值操作。。。)
分布式之数据库和缓存双写一致性方案解析
写的不错,主要论述了在更新缓存方面,是应该先更新缓存呢,还是先更新数据库呢?
他讨论三种更新策略:
- 先更新数据库,再更新缓存
- 先删除缓存,再更新数据库
- 先更新数据库,再删除缓存
没有完美方案,但是第三种方案综合情况考虑是最好的。即:
失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。
命中:应用程序从cache中取数据,取到后返回。
更新:先把数据存到数据库中,成功后,再让缓存失效。
面对缓存,有哪些问题需要思考?
再谈缓存的穿透、数据一致性和最终一致性问题
讲的不错,内容很多。涉及到了缓存问题的方方面面。然后主要是介绍了AutoLoadCache是怎么一一解决每个问题的。