缓存思想

[toc]

图来自:https://xie.infoq.cn/article/49947a60376964f1c16369a8b

思想不是落地方案

这里探讨的缓存是缓存思想,广义的缓存模式,不是在某个技术点或者是框架中的应用。但是一般框架和技术点也会根据广义的缓存模式来做缓存设计,所以每种模式又都有很多现实实现;

缓存的一些分类

缓存从广义上分类:
1.cache-aside(缓存在一边)
在缓存找到数据,称之为缓存命中,没找到数据为缓存未命中;
2.read-through-cache (通过缓存读取数据)
3.write-through-cache (通过缓存写数据)
4.write-around (直写数据)
5.write-back (多次写入缓存再一次写目标库)

缓存分类详情

1.cache-aside(缓存在一边)
在缓存找到数据,称之为缓存命中,没找到数据为缓存未命中;
缓存中找到数据,直接返回;缓存中未找到会到库中查询,并将查询到数据存到缓存中;
技:http缓存处理,webview缓存处理,图片缓存处理,token鉴权很多方面都在使用缓存命中策略;

cache-aside

2.read-through-cache (通过缓存读取数据)
数据每次都到缓存中获取,缓存中未匹配时从库中拿数据,给到缓存然后再从缓存返回;
技:nexus的私有库逻辑(每次是到缓存中拿,缓存中没有会自动到网上同步)

read-through-cache

3.write-through-cache (通过缓存写数据)
数据的写入都先写到缓存区,缓存区再同步给库中;
技:mmkv的存取策略(用户端只关注写入缓存中,会由操作系统将数据同步到文件中;)

write-through-cache
read-through-cache 缓存读和write-through-cache缓存写配合起来做可以很方便的解决缓存不一致的问题
read-through-cache + write-through-cache

4.write-around (直写数据)
数据的写入,每次都是直接操作库,不做缓存;
技:系统中直接读取、操作文件

write-around

一般缓存命中cache-aside的读策略,适合和write-around直写数据库策略来配合;
如果配合write-through-cache缓存写入的话,会产生问题;
在读未命中缓存的时候,同时进行缓存写的话会产生覆盖缓存中数据的问题;

cache-aside +write-around

5.write-back (多次写入缓存再一次写目标库)
write-through-cache的改良款,主要针对于多次小规模的写操作先多次写入缓存区;再通过合适时机写入到库中;
技:mysql数据的写操作;

write-back