1、出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题?
CPU的三级缓存(CPU-->L1-->L2-->L3-->内存-->磁盘),解决了CPU、内存以及磁盘之间的运算速度的性能问题
包括:本地缓存、第三方缓存、HTTP的缓存等等
缓存的目标就是:减少对数据库(或耗时组件)的访问,提高访问的速度
利用分布式缓存解决请求的无状态性、单机本地内存都有限
2、优势和劣势分别是什么,或者说,trade-off是什么?
性能提升
数据同步问题(牺牲强一致性)
缓存穿透(一直访问一个数据库不存在的数据--布隆过滤器)
缓存击穿(热点key在某一时刻过期--热点数据不过期或互斥锁)
缓存雪崩(在某一时刻,多个key失效--key失效的随机性,高可用)
3、适用的场景?
Cache-Aside
读场景:先从缓存中获取数据,如果没有命中,则到数据库中获取,并将数据放入缓存供下次读取使用。
写场景:先将数据写入数据库,写成功之后将缓存失效。(为什么不是写完数据库后更新缓存?两个并发的写操作导致脏数据)
Cache-As-SoR
Read-Through:从缓存获取数据,如果没命中,由缓存自己去从数据库获取数据
Write-Through:通过缓存写数据,同步数据库由缓存自己操作
Write-Behind:通过缓存写数据,同步数据库由缓存自己操作(异步执行)
4、技术的组成部分和关键点?
命中率
缓存有效期,过短导致频繁的更新,过长会浪费内存
缓存过期策略,LRU
5、底层原理和关键实现?
哈希表(key-value)
6、已有的实现和它之间的对比?
Memcached:数据结构比较单一
redis:数据结构丰富