1.什么是LRUCache ?

Least-Recently-Used 替换掉最近最少使用的对象(如 redis缓存策略)

缓存剔除策略,当缓存空间不够用的时候需要一种方法剔除key

常用的有 LRU(从使用的时间下手把时间长剔除掉) , LFU(从使用次数下手把次数最少剔除掉)等

LRU通过使用一个循环双端队列不断把最新访问的 Key 放到表头,就是把最新访问的放到最前(右边),把最远的访问保持在尾部(左边),把最远访问的key剔除就可以了

2.如何实现 LRUCache ?

 字典用来缓存,循环双端链表用来记录访问顺序

利用Python 内置库 dict +collections.OrderedDict(它可以记录key访问顺序) 实现

dict 用来当做 k/v 键值对的缓存

OrderedDict (有序字典)用来实现更新最近访问的 key

代码示例:

from collections import OrderedDictclass LRUCache():def __init__(self, capacity=128): # 参数capacity表示容量,允许128个key/value存在self.od = OrderedDict() self.capacity = capacity  def get(self, key): # 每次访问更新最新使用的 keyif key in self.od: val = self.od[key]  # 取出key对应value值# 把key放到最尾部,就是最近访问的放到最右边self.od.move_to_end(key) return valelse:return -1def put(self, key, value): # 更新key/value的值if key in self.od:del self.od[key] # 删除self.od[key] = value  # 从新赋值else: # insertself.od[key] = value# 判断当前容量是否已经满了if len(self.od) > self.capacity:self.od.popitem(last=False) # 把最早的key删除

什么是LRUCache 和 LRUCache 实现相关推荐

  1. LruCache之LruCache分析

    转LruCache之LruCache分析 LruCache 分析 LruCache 是 Android 的一个内部类,提供了基于内存实现的缓存 用法 //获取系统分配给每个应用程序的最大内存,每个应用 ...

  2. LruCache缓存处理及异步加载图片类的封装

    Android中的缓存处理及异步加载图片类的封装   一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端 ...

  3. [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<Strin ...

  4. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )

    文章目录 一.Bitmap 内存缓存策略 二.LruCache 内存缓存 三.LruCache 常用操作 四.LruCache 工具类 五.源码及资源下载 官方参考 : Google 官方提供的 内存 ...

  5. 【Android 应用开发】LruCache 简介

    文章目录 LruCache 应用场景 LruCache 算法原理 LruCache 实现 LruCache 参考 LruCache 应用场景 1. 缓存需求 : 处理大量数据时 , 为了提升性能 , ...

  6. android缓存之Lrucache 和LinkedHashMap

    两者的区别 网上有很多人使用软引用加载图片的多 ,但是现在已经不再推荐使用这种方式了, (1)因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用 ...

  7. LruCache缓存bitmap(一)

    Lrucache是把图片缓存到内置sd卡,设置缓存容量为系统分配容量的八分之一,单位byte,超过缓存容量gc会自动回收不长使用的缓存.觉得lrucache就先map一样,放入键值对就行了,比较方便, ...

  8. 安卓开发笔记——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)...

    在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价--流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理 ...

  9. LruCache在美团DSP系统中的应用演进

    背景 DSP系统是互联网广告需求方平台,用于承接媒体流量,投放广告.业务特点是并发度高,平均响应低(百毫秒). 为了能够有效提高DSP系统的性能,美团平台引入了一种带有清退机制的缓存结构LruCach ...

最新文章

  1. 递归神经网络不可思议的有效性
  2. JavaWeb学习总结(二):Tomcat服务器学习和使用(一)
  3. 怎么修改登录服务器的权限,远程登录服务器权限怎么设置
  4. WannaCry 勒索病毒用户处置指南
  5. c语言开根号不用math,c语言sqrt求平方根 该函数头文件:math.h;
  6. 计算机考研复试汇总(所有科目)
  7. mysql 批量插入 优化_mysql 批量插入优化之rewriteBatchedStatements
  8. YYC松鼠短视频系统v3.5版本--稳定版本---优化性能以及各处接口返回以及部分ui页面细节
  9. c#物联网_毕业季我与你招聘信息中移物联网
  10. stunserver 的几个公网地址及其问题
  11. 【教程】扫描识别工具Dynamic Web TWAIN使用教程:条码读取器(下)
  12. C++班车管理系统课程设计
  13. bittorrent端口_如何在Linux防火墙中启用BitTorrent端口?
  14. 蛮力法(Brute Force)
  15. 计算机毕业设计ssm+vue基本微信小程序的快递柜管理系统 uniapp 小程序
  16. 打造企业级硬盘中坚力量,22TB大容量HDD功不可没
  17. 通达信除权除息(tdx gbbq)导出为文本文件
  18. Python基础灬函数(定义,参数)
  19. 如何设置Bios启动项
  20. 文字超出 ...显示

热门文章

  1. 阿里云磁盘异常爆满的原因及解决方法
  2. 双曲铝单板是怎么生产的?
  3. 【NLP】NLP领域的国内外专家(Greedy_AI)
  4. graphQL入门分享
  5. ML:从工程化思维分析—机器学习团队十大角色的简介(背景/职责/产出物):产品经理、项目经理、业务咨询顾问、数据科学家、ML研究员、数据工程师、ML工程师、DevOps/软件开发/交付工程师
  6. linux修改时间写入cmos,解析Linux操作系统修改时间
  7. 2.28loadrunner
  8. 在线 PPT 制作工具:Gossip,聚焦内容内在逻辑
  9. UNP学习第十一章总结, 百度的www.a.shifen.com域名,getaddrinfo小发现
  10. form表单的onsubmit() return问题