适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(一)理解缓存基本概念
什么是缓存?
缓存是将高频访问的数据暂存到内存中,是加速数据访问的存储,降低延迟,提高吞吐率的利器
缓存详细介绍
先不要被 HTTP、CDN、Nginx、分布式缓存这些名词吓到,这些我放在后面再说。首先,它们本质上都在做同一件事:把“访问慢但经常用的数据”提前放到“访问快的地方”。
更通俗的说,假设你经常查一本字典:
没有缓存时:每次要查单词,都去书架上找整本字典。
有缓存时:你把最近经常查的单词写在桌面小纸条上,下次直接看纸条
| 现实例子 | 程序中的含义 |
| 书架上的字典 | 数据库/磁盘 |
| 桌面上的小纸条 | 缓存 |
| 查到数据 | cache hit缓存命中 |
| 未查到数据 | cache miss缓存未命中 |
| 桌面的空间不够了 | 缓存满了 |
| 丢掉不用的或者过期的小纸条 | 缓存淘汰策略 |
接下来我会将表格中的例子一一解释清楚;
1.缓存最基础的三个动作
put(key,value):放入缓存 get(key);读取缓存 delete(key);删除缓存
最简单的例子:
get(key): put(key,value):
1. 判断 key 是否在缓存中 1.如果key已经存在
2. 如果在: 更新value,更新访问记录;
返回 value 2.如果key不存在
更新访问记录 判断缓存是否已满
3. 如果不在: 3.缓存满了,根据淘汰策略删除旧数据
返回空 缓存没满,直接插入新数据
2.缓存中的主要概念
缓存命中(cache hit):用户请求 user:1001 缓存有 user:1001 返回;
缓存未命中(cache miss):用户请求 缓存没有 去数据库查询 查询后放入缓存 返回;
命中率越高,缓存效果就越好,因为响应速度快;
缓存淘汰策略:缓存淘汰策略非常重要,决定了桌面纸条满了如何清理,非常影响工作效率,常见的策略有以下四种,后面也会更新不同策略的具体细节。
a.FIFO先进先出:先进先出,这是最简单、最公平的一种算法,它认为一个数据最早进入缓存,在将来该数据被访问的可能性最小。其原理是最早进入缓存的数据应该最早被淘汰掉,即当缓存空间被占满时,最先进入的数据会被最早被淘汰。
b.LRU最近最少使用:它的设计原则借鉴了时间局部性原理,该算法认为如果数据最近被访问过,那么将来被访问的几率也更高,反之亦然。其原理是将数据按照其被访问的时间形成一个有序序列,最久未被使用的数据应该最早被淘汰掉,即当缓存空间被占满时,缓存内最长时间未被使用的数据将被淘汰掉。
c.LFU最少使用频率: 它的设计原则使用了概率思想,该算法认为如果一个对象的被访问频率很低,那么再次被访问的概率也越低。其原理是缓存空间中被访问次数最少的数据应该最早被淘汰掉,即当缓存空间被占满时,缓存内被访问频率最少的数据将被置换走。
d.TTL定时清理:每个缓存数据设置一个有效期,TTL 不是严格意义上的淘汰策略,但实际缓存系统里非常常见
基础缓存模块: 存储模块 查询模块 淘汰策略模块 过期时间模块 并发安全模块
常见的存储介质:CPU缓存,内存,SSD/硬盘,数据库,详情如下;

下一期将进入实操环节
适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(二)实现最简单缓存
适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(三)加容量限制
适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(四)实现淘汰策略
适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(五)加入过期时间 TTL
适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(六)考虑并发安全
适合小白的嵌入式软件项目(C++)详解-----卡码缓存系统(特别篇)代码必备数据结构知识
更多推荐

所有评论(0)