分享

小白科普:缓存

 若思天下 2021-03-18

一、什么是缓存?

缓存,英文名为Cache,指在目标数据节点上将传输过来的节点数据进行暂存。每个节点的数据如何存储应该是可配置和可控制的,比如,设置数据目标位置的IP地址及目录,数据存储的方法,数据的保留时间、自动清理等。

缓存的类型分很多种,在不同的场景有着不同的意义,采用的技术手段也不一样。

例如,CPU缓存,分为L1 Cache(一级缓存)和L2 Cache(二级缓存);Linux操作系统的文件缓存;浏览器缓存,也称为客户端缓存,可以是对静态页面中的元素进行缓存,也可以是动态页面对静态页面的缓存,比如点击浏览器中的“后退”,页面就是从浏览器缓存中调出并立即显示出来。

二、缓存的作用和原理?

数据库连接资源很“昂贵”(I/O,TCP连接),基本都使用连接池,但是连接池的数量有限,如果用户过多,会造成交易等待,那么客户端在接受到系统数据时呈现页面所需的时间会延迟,影响用户体验;其次是在关系型数据库中进行读写操作需要加锁, 所以在多用户、大并发的场景下是不可取的。

这一问题的解决方法,就是缓存。

缓存的数据放在内存中,当CPU要读取一个数据时,首先将内存地址传递给一级数据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,如果没有则从二级或三级缓存中继续查找,找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度在内存中读取并送给CPU处理,同时将数据所在的数据块加载到缓存中,那么以后就可以从缓存中读取数据,节省了CPU直接读取内存的时间。

图片

图片来源:《码农翻身》

从上图我们可以看到,CPU读取速度是最快的,其次是缓存,如果CPU读取需要1秒,那么内存就要6分钟,网络更是非常慢,要19年。所以将数据存储在缓存中,不仅能降低应用服务器对数据库的访问频率,减轻数据库压力,而且还能提高系统性能,缩短访问时间。

小知识点

数据库连接:

1.应用程序的数据访问层请求DataSource来获取一个数据库连接;

2.DataSource使用数据库驱动来打开一个数据库连接;

3.创建数据库连接,同时打开了一个TCP socket;

4.应用程序进行数据库的读写;

5.连接已经不再需要了,因此关闭它;

6.关闭socket。

三、缓存里放什么格式的数据?

◇语言专有(java ,序列化,反序列化)

把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程称为对象的反序列化。

◇语言独立(protobuf)

protobuf是Google开发一种数据描述格式,能够将结构化数据序列化,可用于数据存储,通信协议等方面。

◇XML ? JSON?

XML和JSON都是一种数据传输格式,对平台没有限制,按规则格式解析即可。

◇字符串?(key,value)

Key和Value代表键和值,如果说Key对应客户,那么Value就对应客户号。

◇基本的数据结构

如Map,就是以方式组织成的数据结构,可以理解成一张表。

四、缓存空间满了这么办?

◇缓存服务器在启动时,会设置缓存大小

◇LRU(least recently used)算法

◇清除最近最少使用的缓存数据

五、缓存机制举例?

◇查询

图片

如通过账号ac查账户基本信息表acinfo,每当要查数据时,操作流程是:

1.先从缓存中查记录(ac→acinfo);

2.若缓存中有记录,则返回结果并结束;

3.若缓存中无记录,则查数据库并将信息保存到缓存中,再返回。

◇插入

图片

分为两种,一是先写数据库再淘汰缓存,二是先淘汰缓存再写数据库。

但在并发的场景下,都有可能会出现数据库与缓存中数据不一致的情况。比如用户A发起交易查数据库,得到一个旧值,用户B发起交易将新值写入数据库,并且删除缓存,用户A将从数据库中查到的旧值写入缓存,那么就会出现数据不一致。

在核心系统中,通常按应用模块、交易、事务的维度作为开始和结束。以交易的维度为例,常见的操作流程是:

1.通过Key找Map;

2.往Map写入记录;

3.写入数据库并结束。

写缓存又分为直写(write-through)和回写(write-back)。直写是指数据写到下一级缓存或直接到内存中,如果对应的段被缓存了则会更新缓存中的内容;回写是指不会立即把写操作传递到下一级,而是仅修改本级缓存中的数据,最后一次性的写入到内存中,而不是对同一块地址反复写,可以提高效率。

◇删除

删除没什么特别的,通过Key找到Map删除记录,同时删除数据库中的记录。

关于缓存的话题很大,比如应用程序如何访问缓存?如何实现分布式存储?一个缓存服务器的内存满足不了系统的要求怎么办?用什么算法让数据相对“平均”的存储?数据库与缓存双写一致性方案等等,如果你感兴趣,可以查查相关资料。

图片

在过几天就要过大年咯~

在这里,提前祝大家 新年快乐!图片图片

开开心心,恭喜发财,一帆风顺!图片图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多