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

自己做网站怎么优化义乌网站公司

自己做网站怎么优化,义乌网站公司,四川建设安全生产监督管理局网站,网站更改备案主体lua-lru缓存算法解析 主要功能和作用1. 缓存管理:2. 数据存储与访问:3. 迭代器:4. 容量管理: 具体实现细节使用场景使用示例 lua-lru 是 Lua 语言中的一个 LRU(Least Recently Used,最近最少使用&#xff0…

lua-lru缓存算法解析

  • 主要功能和作用
    • 1. 缓存管理:
    • 2. 数据存储与访问:
    • 3. 迭代器:
    • 4. 容量管理:
  • 具体实现细节
  • 使用场景
  • 使用示例

lua-lru 是 Lua 语言中的一个 LRU(Least Recently Used,最近最少使用)缓存实现,是一个基于哈希表和双向链表的数据结构,用于管理缓存中的数据项,并根据访问频率自动淘汰最不常用的数据项

-- lua-lru, LRU cache in Lua
-- Copyright (c) 2015 Boris Nagaev
-- See the LICENSE file for terms of use.local lru = {}function lru.new(max_size, max_bytes)assert(max_size >= 1, "max_size must be >= 1")assert(not max_bytes or max_bytes >= 1,"max_bytes must be >= 1")-- current sizelocal size = 0local bytes_used = 0-- map is a hash map from keys to tuples-- tuple: value, prev, next, key-- prev and next are pointers to tupleslocal map = {}-- indices of tuplelocal VALUE = 1local PREV = 2local NEXT = 3local KEY = 4local BYTES = 5-- newest and oldest are ends of double-linked listlocal newest = nil  -- firstlocal oldest = nil  -- lastlocal removed_tuple -- created in del(), removed in set()-- remove a tuple from linked listlocal function cut(tuple)local tuple_prev = tuple[PREV]local tuple_next = tuple[NEXT]tuple[PREV] = niltuple[NEXT] = nilif tuple_prev and tuple_next thentuple_prev[NEXT] = tuple_nexttuple_next[PREV] = tuple_prevelseif tuple_prev then-- tuple is the oldest elementtuple_prev[NEXT] = niloldest = tuple_prevelseif tuple_next then-- tuple is the newest elementtuple_next[PREV] = nilnewest = tuple_nextelse-- tuple is the only elementnewest = niloldest = nilendend-- insert a tuple to the newest endlocal function setNewest(tuple)if not newest thennewest = tupleoldest = tupleelsetuple[NEXT] = newestnewest[PREV] = tuplenewest = tupleendendlocal function del(key, tuple)map[key] = nilcut(tuple)size = size - 1bytes_used = bytes_used - (tuple[BYTES] or 0)removed_tuple = tupleend-- removes elemenets to provide enough memory-- returns last removed element or nillocal function makeFreeSpace(bytes)while size + 1 > max_size or(max_bytes and bytes_used + bytes > max_bytes)doassert(oldest, "not enough storage for cache")del(oldest[KEY], oldest)endendlocal function get(_, key)local tuple = map[key]if not tuple thenreturn nilendcut(tuple)setNewest(tuple)return tuple[VALUE]endlocal function set(_, key, value, bytes)local tuple = map[key]if tuple thendel(key, tuple)endif value ~= nil then-- the value is not removedbytes = max_bytes and (bytes or #value) or 0makeFreeSpace(bytes)local tuple1 = removed_tuple or {}map[key] = tuple1tuple1[VALUE] = valuetuple1[KEY] = keytuple1[BYTES] = max_bytes and bytessize = size + 1bytes_used = bytes_used + bytessetNewest(tuple1)elseassert(key ~= nil, "Key may not be nil")endremoved_tuple = nilendlocal function delete(_, key)return set(_, key, nil)endlocal function mynext(_, prev_key)local tupleif prev_key thentuple = map[prev_key][NEXT]elsetuple = newestendif tuple thenreturn tuple[KEY], tuple[VALUE]elsereturn nilendend-- returns iterator for keys and valueslocal function lru_pairs()return mynext, nil, nilendlocal mt = {__index = {get = get,set = set,delete = delete,pairs = lru_pairs,},__pairs = lru_pairs,}return setmetatable({}, mt)
endreturn lru

主要功能和作用

1. 缓存管理:

  • lua-lru 可创建一个最多可以存储 max_size 个数据项的缓存,并且可以选择限制缓存的总字节数 max_bytes
  • 当缓存达到最大容量时,会自动淘汰最久未使用的数据项,以腾出空间给新数据

2. 数据存储与访问:

  • set(key, value, bytes):将数据项存储到缓存中,如果缓存中已经存在相同的 key,则会替换旧数据,如果缓存达到最大容量或字节限制,会自动淘汰最久未使用的数据项
  • get(key):从缓存中获取数据项,如果数据项存在,将其移动到链表的最新位置(即标记为最近使用)
  • delete(key):从缓存中删除指定的数据项

3. 迭代器:

  • lru_pairs():返回一个迭代器,用于遍历缓存中的所有数据项,迭代器按最近使用到最久未使用的顺序遍历

4. 容量管理:

  • makeFreeSpace(bytes):当缓存即将超出容量限制时,自动删除最久未使用的数据项,直到有足够的空间或字节数

具体实现细节

  • 双向链表:用于维护数据项的访问顺序,最近访问的数据项放在链表的前端,最久未访问的数据项放在链表的后端
  • 哈希表:用于快速查找数据项,哈希表的键是缓存的键,值是一个包含数据、链表前后指针等信息的数据结构
  • 自动淘汰:当缓存达到最大容量或字节数限制时,通过删除链表尾部的数据项来释放空间

使用场景

  • 数据缓存:适用于需要缓存数据的场景,特别是在数据访问频率高但存储空间有限的情况下
  • 限流:可以用于实现限流机制,淘汰掉长时间未使用的数据项,确保缓存中保留的是最近活跃的数据
  • 性能优化:在一些需要频繁访问数据但数据量较大的场景中,通过 LRU 缓存可以显著提高访问性能

使用示例

local lru = require("lru")local cache = lru.new(3, 100) -- 创建一个最多存储3个数据项,最大100字节的缓存cache:set("key1", "value1", 10) -- 存储数据项,占用10字节
cache:set("key2", "value2", 20) -- 存储数据项,占用20字节
cache:set("key3", "value3", 30) -- 存储数据项,占用30字节print(cache:get("key1")) -- 输出 "value1"cache:set("key4", "value4", 40) -- 存储新数据项,占用40字节,淘汰 "key1" 因为它是最近最少使用的print(cache:get("key1")) -- 输出 nil,因为 "key1" 已经被淘汰for key, value in cache:pairs() doprint(key, value) -- 按最近使用到最久未使用的顺序遍历缓存
end
http://www.yayakq.cn/news/681677/

相关文章:

  • 免费最新如何建设网站教程视频十大网络公司排名
  • 郑州网站建设出名吗?wordpress 新窗口打开
  • 如何做企业网站小程序网站做app的软件
  • 如何创作个人网站长春关键词排名优化
  • 哪个网站可以免费看小说不收费建站模板有哪些
  • 阿里云网站的网页怎么做佛山市网站建设公司
  • 网站安全优化wordpress多语言站点
  • vs怎么添加做网站怎样直接输入网址打开网站
  • vue可以做pc端网站粉色大气妇科医院网站源码
  • 静态网站开发一体化课程城阳建网站
  • 网站开发5人小组分工二手交易网站开发
  • 钱包网站建设策划金华网站建设团队
  • 网站建设关键要做好哪些用ai做网站
  • 传到网站根目录网站建设的目标有哪些
  • 企业网站系统cms固安建设局网站
  • 湘潭网站建设 x磐石网络微信网站开发教程
  • 网站建设费用低的公司做网站开发需要学那些东西
  • 上海网站建设公司网站建设网站开发工作计划
  • 哪些做调查问卷的网站软件app网站建设
  • 网站建设的知识和技能化妆品网站建设流程图
  • 个人备案做公司网站wordpress xml生成
  • 立水桥网站建设wordpress 媒体库 文件夹
  • 科技感强的网站做海报免费素材网站有哪些
  • wap网站前景泉州市建设工程质量监督站网站
  • 网站建设diy徐州市制作网站的公司
  • 政务网站开发方案互联网推广运营是干什么的
  • dw网站建设怎么放在网上专业做网站建设的
  • 用dedecms做两个一样的网站广州网站制作实力乐云seo
  • 北京高端网站制作公司成都建设规划局网站首页
  • 账号交易网站数据库应该怎么做商城网站建设信息