关于缓存命中率的理解Cache Hit Ratio

今天看了书,关于缓存的一些看法,直到看到这个字眼,这是啥,查了资料后才发现这个Cache Hit Ratio

Cache Hit Ratio (缓冲命中率)
假设你将一段数据缓存至内存中
第一查询数据时:
由于你是在从数据库中查询的数据
缓存命中率为了0,还没有进入缓存
关闭此数据库链接后

第二次再查询相同的数据时,假如你将数据缓存进内存中
第二次将会直接从内存中去取这条相同的数据
缓存将命中
所以此时的缓存命中率为0.5

第三次查询相同的数据,则命中率为0.66666

以此类推…

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: # 定义一个FIFO缓存 cache = {}# 记录当前缓存中页面的数量 cache_size = 0# 记录访问的总页面数 total_pages = 0# 记录缓存命中的次数 hits = 0# 当访问新页面时 def access_page(page): # 更新访问总页面数 global total_pages total_pages += 1 # 如果页面在缓存中 if page in cache: # 更新缓存中命中次数 global hits hits += 1 # 返回 return # 如果缓存满了,则删除最早加入缓存的页面 if (cache_size == len(cache)): del cache[list(cache.keys())[0]] # 将新页面加入缓存 cache[page] = True cache_size += 1# 计算缓存命中率 def get_hit_ratio(): return hits / total_pages ### 回答2: 使用FIFO(First In First Out)策略计算缓存命中率的Python代码如下: ```python class Cache: def __init__(self, capacity): self.capacity = capacity self.cache = [] def add(self, item): if item not in self.cache: if len(self.cache) >= self.capacity: self.cache.pop(0) self.cache.append(item) def hit_rate(self): if len(self.cache) == 0: return 0.0 else: return len(self.cache) / self.capacity * 100 # 测试代码 cache = Cache(5) # 假设缓存容量为5 # 实际访问序列为A, B, C, D, E, F, A, B, C # 计算缓存命中率 access_sequence = ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] for item in access_sequence: cache.add(item) print("当前访问序列:", access_sequence) print("当前缓存:", cache.cache) print("当前命中率:", cache.hit_rate()) # 代码输出: # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['A'] # 当前命中率: 20.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['A', 'B'] # 当前命中率: 40.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['A', 'B', 'C'] # 当前命中率: 60.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['A', 'B', 'C', 'D'] # 当前命中率: 80.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['A', 'B', 'C', 'D', 'E'] # 当前命中率: 100.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['B', 'C', 'D', 'E', 'F'] # 当前命中率: 100.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['C', 'D', 'E', 'F', 'A'] # 当前命中率: 100.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['D', 'E', 'F', 'A', 'B'] # 当前命中率: 100.0 # 当前访问序列: ['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C'] # 当前缓存: ['E', 'F', 'A', 'B', 'C'] # 当前命中率: 100.0 ``` 上述代码中,`Cache`类表示一个缓存对象,通过`add`方法向缓存中添加元素,并根据FIFO策略淘汰旧的元素。`hit_rate`方法用于计算当前的缓存命中率。在测试代码中,我们使用访问序列: `['A', 'B', 'C', 'D', 'E', 'F', 'A', 'B', 'C']`进行测试,并输出每次操作后的缓存命中率
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值