足迹 LRU算法

文章介绍了LRU(LeastRecentlyUsed)缓存淘汰算法,该算法基于最近被访问的数据更可能再次被访问的假设。文中通过一个Vue.jsVuex模块的例子展示了如何使用LRU策略来管理数据,当存储满时,会淘汰最久未被访问的元素。代码示例包括了一个简单的LRU类实现,以及在Vuex中处理数据的mutations方法。
摘要由CSDN通过智能技术生成

 缓存算法(页面置换算法)之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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值