缓存算法(页面置换算法)之LRU算法:
它基于这样一个假设:最近被访问的数据更有可能在未来被再次访问,而最久未被访问的数据可能在未来不会被再次访问。因此,LRU算法选择最久未被使用的数据进行淘汰,以便为新数据腾出空间。
LRU算法的基本思想是维护一个有序的数据访问历史记录,当访问一个数据时,该数据将被移到历史记录的最前面,而最后一个数据将被淘汰。这样,最不常被访问的数据会逐渐被淘汰,而最常被访问的数据会保留在缓存中。
使用代码:
// 房产vuex模块
const state = {
// 当前房子详情
curHouse: uni.getStorageSync('house') || {},
historyList: [] // 足迹列表
}
const mutations = {
// 同步储存数据
SET_HOUSE(state, data) {
// 数据存vuex
state.curHouse = data
// 数据存本地
uni.setStorageSync('house', data)
// 判断数组里面是否有这个数据
// 获取数组id组成新数组
const ids = state.historyList.map(v => v.id)
// 获取当前元素id 在数组中的索引位置
const index = ids.indexOf(data.id)
// 如果索引不为-1 代表当前元素在数组里面有值
if (index !== -1) {
// 把以前存的数据删除
state.historyList.splice(index, 1)
}
// 新数据存在historyList 最上面
state.historyList.unshift(data)
}
}
const actions = {}
export default {
namespaced: true,
state,
mutations,
actions
}
举例:LRU类
// LRU 最少最近使用算法
class LRU {
constructor() {
this.list = []
}
add(data) {
// 判断是否有该元素
const index = this.list.indexOf(data)
// 如果当前元素在数组的索引不是-1 说明有这个元素
if (index !== -1) {
this.list.splice(index, 1)
}
// 添加元素
this.list.unshift(data)
}
}
const l1 = new LRU()
l1.add(1)
l1.add(2)
l1.add(3)
l1.add(1)
console.log('l1 :>> ', l1)