当前位置: 首页 > news >正文

淘宝客网站一般用什么做的漫画网站建设教程视频

淘宝客网站一般用什么做的,漫画网站建设教程视频,wordpress适合下载收费的主题,高端网站建设 aspx前言我们常用缓存提升数据查询速度#xff0c;由于缓存容量有限#xff0c;当缓存容量到达上限#xff0c;就需要删除部分数据挪出空间#xff0c;这样新数据才可以添加进来。缓存数据不能随机删除#xff0c;一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有…前言我们常用缓存提升数据查询速度由于缓存容量有限当缓存容量到达上限就需要删除部分数据挪出空间这样新数据才可以添加进来。缓存数据不能随机删除一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有 LRU,LFU,FIFO,这篇文章我们聊聊 LRU 算法。LRU 简介LRU 是 Least Recently Used 的缩写这种算法认为最近使用的数据是热门数据下一次很大概率将会再次被使用。而最近很少被使用的数据很大概率下一次不再用到。当缓存容量的满时候优先淘汰最近很少使用的数据。假设现在缓存内部数据如图所示这里我们将列表第一个节点称为头结点最后一个节点为尾结点。当调用缓存获取 key1 的数据LRU 算法需要将 1 这个节点移动到头结点其余节点不变如图所示。然后我们插入一个 key8 节点此时缓存容量到达上限所以加入之前需要先删除数据。由于每次查询都会将数据移动到头结点未被查询的数据就将会下沉到尾部节点尾部的数据就可以认为是最少被访问的数据所以删除尾结点的数据。然后我们直接将数据添加到头结点。这里总结一下 LRU 算法具体步骤新数据直接插入到列表头部缓存数据被命中将数据移动到列表头部缓存已满的时候移除列表尾部数据。LRU 算法实现上面例子中可以看到LRU 算法需要添加头节点删除尾结点。而链表添加节点/删除节点时间复杂度 O(1)非常适合当做存储缓存数据容器。但是不能使用普通的单向链表单向链表有几点劣势:每次获取任意节点数据都需要从头结点遍历下去这就导致获取节点复杂度为 O(N)。移动中间节点到头结点我们需要知道中间节点前一个节点的信息单向链表就不得不再次遍历获取信息。针对以上问题可以结合其他数据结构解决。使用散列表存储节点获取节点的复杂度将会降低为 O(1)。节点移动问题可以在节点中再增加前驱指针记录上一个节点信息这样链表就从单向链表变成了双向链表。综上使用双向链表加散列表结合体数据结构如图所示:在双向链表中特意增加两个『哨兵』节点不用来存储任何数据。使用哨兵节点增加/删除节点的时候就可以不用考虑边界节点不存在情况简化编程难度降低代码复杂度。LRU 算法实现代码如下为了简化 key val 都认为 int 类型。public class LRUCache {Entry head, tail;int capacity;int size;Map cache;public LRUCache(int capacity) {this.capacity capacity;// 初始化链表initLinkedList();size 0;cache new HashMap(capacity 2);}/*** 如果节点不存在返回 -1.如果存在将节点移动到头结点并返回节点的数据。** param key* return*/public int get(int key) {Entry node cache.get(key);if (node null) {return -1;}// 存在移动节点moveToHead(node);return node.value;}/*** 将节点加入到头结点如果容量已满将会删除尾结点** param key* param value*/public void put(int key, int value) {Entry node cache.get(key);if (node ! null) {node.value value;moveToHead(node);return;}// 不存在。先加进去再移除尾结点// 此时容量已满 删除尾结点if (size capacity) {Entry lastNode tail.pre;deleteNode(lastNode);cache.remove(lastNode.key);size--;}// 加入头结点Entry newNode new Entry();newNode.key key;newNode.value value;addNode(newNode);cache.put(key, newNode);size;}private void moveToHead(Entry node) {// 首先删除原来节点的关系deleteNode(node);addNode(node);}private void addNode(Entry node) {head.next.pre node;node.next head.next;node.pre head;head.next node;}private void deleteNode(Entry node) {node.pre.next node.next;node.next.pre node.pre;}public static class Entry {public Entry pre;public Entry next;public int key;public int value;public Entry(int key, int value) {this.key key;this.value value;}public Entry() {}}private void initLinkedList() {head new Entry();tail new Entry();head.next tail;tail.pre head;}public static void main(String[] args) {LRUCache cache new LRUCache(2);cache.put(1, 1);cache.put(2, 2);System.out.println(cache.get(1));cache.put(3, 3);System.out.println(cache.get(2));}}LRU 算法分析缓存命中率是缓存系统的非常重要指标如果缓存系统的缓存命中率过低将会导致查询回流到数据库导致数据库的压力升高。结合以上分析 LRU 算法优缺点。LRU 算法优势在于算法实现难度不大对于对于热点数据 LRU 效率会很好。LRU 算法劣势在于对于偶发的批量操作比如说批量查询历史数据就有可能使缓存中热门数据被这些历史数据替换造成缓存污染导致缓存命中率下降减慢了正常数据查询。LRU 算法改进方案以下方案来源与 MySQL InnoDB LRU 改进算法将链表拆分成两部分分为热数据区与冷数据区如图所示。改进之后算法流程将会变成下面一样:访问数据如果位于热数据区与之前 LRU 算法一样移动到热数据区的头结点。插入数据时若缓存已满淘汰尾结点的数据。然后将数据插入冷数据区的头结点。处于冷数据区的数据每次被访问需要做如下判断若该数据已在缓存中超过指定时间比如说 1 s则移动到热数据区的头结点。若该数据存在在时间小于指定的时间则位置保持不变。对于偶发的批量查询数据仅仅只会落入冷数据区然后很快就会被淘汰出去。热门数据区的数据将不会受到影响这样就解决了 LRU 算法缓存命中率下降的问题。其他改进方法还有 LRU-K2Q,LIRS 算法感兴趣同学可以自行查阅。欢迎关注我的公众号程序通事获得日常干货推送。如果您对我的专题内容感兴趣也可以关注我的博客studyidea.cn关于找一找教程网本站文章仅代表作者观点不代表本站立场所有文章非营利性免费分享。本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章希望广大程序员努力学习让我们用科技改变世界。[聊聊缓存淘汰算法-LRU 实现原理]http://www.zyiz.net/tech/detail-93930.html
http://www.zqtcl.cn/news/268806/

相关文章:

  • 北京建设信源咨询有限公司网站快对小程序入口
  • 湖北人工智能建站系统软件城乡建设官网
  • 广东模板建站平台设计网站
  • 晋江市住房和城乡建设网站二进制可以做网站是吗
  • 企业网站优化的方式网站开发 -(广告)
  • 素材解析网站搭建wordpress 提问
  • 域名解析网站安卓android系统下载
  • 相亲网站做推广的照片是谁广告优化师前景
  • 营销导向的网站建设的主要流程陕煤建设集团网站
  • 电商网站销售数据分析网页美工设计实训报告
  • 百度新网站收录wordpress免刷新插件
  • 如何做好网站外链c#+开发网站开发
  • 展示型网站报价网站目录创建下载链接
  • cloudflare做侵权网站建设网站需要什么知识
  • 软装设计公司名称怎样给网站做优化
  • 如何判断网站是用什么程序做的云南网站建设公司
  • 清远市建设局官方网站软件开发工程师发展前景
  • 韩国做hh网站图片转链接生成器在线
  • 有凡客模版怎么建设网站百度网盘在线观看资源
  • 网站关键字统计龙岩龙硿洞
  • 成都哪个网站建设比较好建设工程交易服务中心
  • 怎么做好网站推广小笨鸟跨境电商平台
  • 建立一个网站需要多少钱?制作ppt模板的软件
  • 百度 手机网站 友好性青岛谷歌优化
  • 免费的200m网站空间谷歌建站哪家好
  • 哪些平台可以建立网站2345浏览器网页版入口中文版
  • 网站设计与网页制作培训页面设计实训报告
  • 网站建设团队精神深圳福田最新消息今天
  • 网站制作主要公司哪个软件购物便宜又好
  • 如何取一个大气的名字的做网站263企业邮箱登录登录入口电脑版