我对于缓存的一些思考(二)

55 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

本文主要想接着本系列上一篇文章,继续讨论一下缓存相关的概念及具体实现。

上篇文章提到了局部性原理,这里主要包括时间局部性和空间局部性,时间局部性指的是由于程序指令中存在着大量的循环,所以执行完一段代码之后,这段代码在不久后就可能再次被执行;空间局部性指的是由于程序的数据结构大部分是顺序存放的,所以某段数据访问完之后,与它临近存放的数据就很有可能再次被访问。局部性原理是缓存提效的理论基础。 image.png 从上面这张图中可以看出来,访问一次磁盘的时间大概会比访问一次内存的时间慢将近10w倍,如果热点数据全都访问到内存、不访问硬盘,那将是10w倍左右的性能提升! 上篇文章中也提到了缓存是一种设计里面,在计算机世界中几乎无处不在。我现在正在写文章使用的浏览器,它需要对域名进行解析,这依赖DNS,而每个DNS服务器都会有自己的缓存;我现在访问的网站,里面有很多图片等静态资源,浏览器会将这些静态资源缓存下来……这里我想拿Redis当个典型,来说明一下缓存可以有哪些参数。首先是缓存的过期时间,对应到Redis指令中就是可以用expirepexpire设置,前者最小单位是秒,后者是毫秒,另外可以使用ttlpttl指令查询键剩余的过期时间。这里还有一种概念,叫做“软删除”和“硬删除”。可以简单这样理解,硬删除就是真正将该键删除,而软删除就是仍保留该键,在回源时如果出现错误,还可以用老结果进行兜底,不至于报错,但是数据时效性会变差些。