lru
简介
LRU cache 容器
组件接口
类
node_set
节点
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
key | mixed | nil | 可选 | 键 |
value | mixed | nil | 可选 | 值 |
prev | node_set | nil | 可选 | 前驱节点 |
next | node_set | nil | 可选 | 后继节点 |
成员方法
函数原型 | 函数作用 |
---|
LRUcache
LRU缓存
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
lru_map | map | nil | 可选 | LRU缓存映射 |
lru_used | int | 0 | 可选 | 当前已使用的缓存数量 |
lru_capacity | int | 0 | 可选 | 缓存容量 |
head | node_set | nil | 可选 | 头节点 |
tail | node_set | nil | 可选 | 尾节点 |
成员方法
函数原型 | 函数作用 |
---|---|
mixed Set(mixed key, mixed value) | 设置lru缓存的key-value, 若长度超过预设长度,最近最少使用的key-value会被淘汰 |
mixed Get(mixed key) | 通过key获 取在lru缓存中的value,该操作会更新key-value的淘汰顺序 |
void resize(int capacity_length) | 重设lru缓存的大小 |
样例
import pkg.lru.LRU_cache;
//To use lru cache class_map, need load static LRU_cache.gs
load_static(LRU_cache);
//New a lru cache and set length to 3.
LRUcache lru_cache = LRUcache.new(3);
//Put key-value.
//('S' is capital)
lru_cache.Set("key", "value");
lru_cache.Set("key1", "value1");
lru_cache.Set("key2", "value2");
//Lengths of key_value pairs will be longer than length 3.
lru_cache.Set("key3", "value3");
//The least recently used pair "key": "value" is eliminated, so we get nil here.
//('G' is capital)
write(lru_cache.Get("key"), "\n");
//Resize lru_cache length to 5.
lru_cache.resize(5);
//Lru_cache now can save 5 key-calue paris.
lru_cache.Set("key", "value");
lru_cache.Set("key4", "value4");
write(lru_cache.Get("key"), "\n");
write(lru_cache.Get("key1"), "\n");
write(lru_cache.Get("key2"), "\n");
write(lru_cache.Get("key3"), "\n");
write(lru_cache.Get("key4"), "\n");
//Actually there is a node_list in lru_cache.
write(lru_cache);
//Resize from 5 to 1, 4 key-value pairs will be poped out, only "key4":"value4" is still saved
lru_cache.resize(1);
write(lru_cache.Get("key4"), "\n");