精华内容
下载资源
问答
  • 本篇文章主要介绍了ThinkPHP实现静态缓存和动态缓存示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • php动态缓存类.zip

    2019-07-11 11:06:47
    一个PHP缓存类,设置详细内容见代码里面,此版本为utf-8编码,如果网站采用其它编码请自行...动态缓存和静态缓存的根本差别在于其是自动的,用户访问页面过程就是生成缓存、浏览缓存、更新缓存的过程,无需人工操作干预。
  • thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkphp缓存方法,对thinkphp缓存方法感兴趣的朋友一起学习吧
  • GPU的静态和动态缓存协调
  • thinkphp--静态缓存和动态缓存

    千次阅读 2016-12-09 16:35:16
    2、动态缓存:仅对数据库中的数据进行了缓存,即“通过动态缓存,  不需要再读取数据库了,直接通过缓存文件来调取相应数据”,动态花村的实现方式“文件缓存”(默认方式) 3、下面主要简绍下ThinkPHP的S()函数  ...

    1、静态缓存:生成静态页面--缓存整个页面。

    2、动态缓存:仅对数据库中的数据进行了缓存,即“通过动态缓存,

          不需要再读取数据库了,直接通过缓存文件来调取相应数据”,动态花村的实现方式“文件缓存”(默认方式)

    3、下面主要简绍下ThinkPHP的S()函数

           ① 主要作用:从数据库中获得的数据缓存到文件中

           ② 缓存文件默认保存到“Runtime/Temp”文件夹中

           ③ S('缓存名称' , '缓存数据' , '缓存时间')

           ④ 存数据:S('index_list' , $list , 10),是从数据库中读取的数据

           ⑤ 读数据:S(‘index_list’),直接从缓存文件读取,不在经过数据库

    实例:      

    if(!$cache){  //$cache 中是缓存的标示(每个查询都对应一个缓存 即 不同的查询有不同的缓存)
            $cache=$video->where($map)->order($order)->limit($limit)->select();
            foreach($cache as $key=>$value){
                $userlist=$user->where("id=".$value['user_id'])->find();
                $cache[$key]["nickname"]=$userlist['nickname'];
            }
            S($cachename,$cache,3600); //设置缓存的生存时间 
    }




    展开全文
  • DirectX11 动态缓存

    千次阅读 2015-07-21 22:30:16
    动态缓存1. 为什么需要动态缓存? 例如我们要在同一副精灵纹理中创建一套精灵动画,我们需要经常更改缓存中的顶点位置信息。动态缓存对于我们需要修改一块缓存中的内容的这种情况来说是很合适的。 不推荐多次创建和...

    动态缓存

    1. 为什么需要动态缓存?

    例如我们要在同一副精灵纹理中创建一套精灵动画,我们需要经常更改缓存中的顶点位置信息。动态缓存对于我们需要修改一块缓存中的内容的这种情况来说是很合适的。 不推荐多次创建和销毁静态缓存块,特别是逐帧这样做,你应该使用动态缓存来做这样的任务。

    2. 如何创建动态顶点缓存?

    我们可以通过调用设备的CreateBuffer函数来创建顶点缓存,该函数以前已经介绍过。不同的是,我们将子资源参数(第二个参数)设置为 NULL,因为我们会对顶点缓存的内容进行动态更新,从而在创建时不需要设置任何数据。当动态缓存创建后,我们能够在任何时候对它进行更新。

    3. 动态缓存描述对象如何填充?

    为了创建一块动态顶点缓存,我们首先需要填充缓存描述对象:

    • Usage:设置使用标识为 D3D11_USAGE_DYNAMIC 来允许我们的缓存能够通过 CPU 来动态更新。在之前的 Demo 中对于静态缓存我们设置的使用标识是 D3D11_USAGE_DEFAULT。
    • CPUAccessFlags:设置 CPU 访问标识为 D3D11_CPU_ACCESS_WRITE。这是为了让 CPU 能够对 GPU 中的资源进行写访问。其它的访问标识还有读访问和读写访问,但是在本 Demo 中我们不需要 CPU 读任何东西。
    • BindFlags:像以前那样设为D3D11_BIND_VERTEX_BUFFER就可以了。
    • ByteWidth:我们这个纹理有24帧,每帧有6个顶点,所以按实际顶点个数计算即可。

    4. 动态缓存示例代码

        D3D11_BUFFER_DESC vertexDesc;
        ZeroMemory( &vertexDesc, sizeof( vertexDesc ) );
        vertexDesc.Usage = D3D11_USAGE_DYNAMIC;
        vertexDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
        vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    
        const int sizeOfSprite = sizeof( VertexPos ) * 6;
        const int maxLetters = 24;
    
        vertexDesc.ByteWidth = sizeOfSprite * maxLetters;
    
        d3dResult = d3dDevice_->CreateBuffer( &vertexDesc, 0, &vertexBuffer_ );
    展开全文
  • 针对低轨物联网卫星系统的路由问题,提出了基于流量预测的物联网卫星节点动态缓存分配路由策略。首先,分析低轨卫星覆盖区域内业务分布的时空特性,提出了端到端流量预测方法。然后,根据流量预测结果,提出了动态...
  • vue keep-alive实现动态缓存以及缓存销毁 需求来源及描述 后台管理系统中,左侧为功能菜单栏,点击菜单列表,右侧显示该菜单的功能页面,本来是一个非常简单的后台管理系统布局,现在增加了tabs菜单按钮; 点击左侧...

    vue keep-alive实现动态缓存以及缓存销毁

    文字链接地址vue keep-alive实现动态缓存以及缓存销毁

    需求来源及描述

    后台管理系统中,左侧为功能菜单栏,点击菜单列表,右侧显示该菜单的功能页面,本来是一个非常简单的后台管理系统布局,现在增加了tabs菜单按钮;
    点击左侧菜单栏时,右侧页面头部header显示当前的页面标题,形成一个tabs列表,点击可切换页面内容和关闭tabs;
    需求要求,点击左侧时,右侧显示页面内容,同时右侧header增加该页面的tabs,点击tabs可以切换页面,但页面内容不刷新,点击左侧菜单时,右侧内容刷新;

    初步解决

    第一想到的时利用vue的功能组件

    <keep-alive>
    	<router-view/>
    </keep-alive>
    

    此时只能实现缓存,但是不能根据需求实现动态缓存

    解决方案

    利用include来判断需要缓存的路由组件,在根据点击状态更新include

    <!-- html -->
    <keep-alive :include="keepAliveList">
    	<router-view :key="$route.fullPath"/>
    </keep-alive>
    
    利用计算属性和vuex获取缓存列表
    
    <!-- vuex -->
    state: {
            keepAliveList:'',//保存缓存的列表
        },
        mutations: {
            setKeepAliveLists(state,arrListString){
                state.keepAliveList = arrListString;
            },
            
        }
    
    <!-- 视图组件中 -->
    computed:{
    	keepAliveList(){
    		// 获取缓存的路由列表
    		return this.$store.state.keepAliveList;
    	}
    }
    

    生成缓存列表,列表的值为各组件中name的值集合拼接的字符串

    this.$store.commit('setKeepAliveLists',routerComponentNameList.join())
    

    点击左侧菜单栏时,更新缓存列表

    <!-- 点击左侧菜单的事件函数 -->
    handleSelect(name) {
    	if(this.routerNameMap.has(name)){//如果当前点击的路由已经在缓存列表中,则先清除缓存列表,再添加;
    		this.resetKeepAive(name,this.keepAliveList);//删除缓存路由
    		this.tabChangeRoute(name);//切换路由
    	} else {
    		this.routerNameMap.add(name)
    		this.tabChangeRoute(name);
    	}
    },
    // 更新要缓存的路由列表
    resetKeepAive(name,cacheList) {
    	const conf = this.keepAliveList;
    	let arr = cacheList.split(',');
    	if (name && typeof name === 'string') {
    		let i = arr.indexOf(name);
    		if (i > -1) {
    			arr.splice(i, 1);
    			this.$store.commit('setKeepAliveLists',arr.join());
    			this.$nextTick(() => {//添加缓存路由
    				this.$store.commit('setKeepAliveLists',conf);
    			})
    		}
    	}
    }
    

    点击右侧tabs关闭标签删除缓存

    removeTab(name){
    	// 点击tab上的关闭按钮,清除当前路由的缓存
    	this.routerNameMap.delete(name);
    	this.resetKeepAive(name,this.keepAliveList);//删除缓存路由
    }
    

    下面为主要代码,监听当前路由是否被移除缓存,如果移除缓存则需要销毁该组件,否则内容中的缓存组件会越来越来,影响使用性能;
    创建一个mixin.js文件,然后引入到需要被动态缓存的路由组件中即可;

    // 路由缓存管理
    export default {
        computed: {
            keepAliveConf(){
                return this.$store.state.keepAliveList;
            }
        },
        watch:{
            keepAliveConf(e){
                // 监听缓存列表的变化,如果缓存列表中没有当前的路由或组件则在缓存中销毁该实例
                let name = this.$options.name;
                if(!e.split(',').includes(name)) {
                    this.$destroy()
                }
            }
        },
    }
    
    展开全文
  • 为了有效利用缓存资源,提出一种动态分配片上网络路由器端口缓存的方法...与基于虚通道的动态缓存分配方式相比,该方法降低了控制和仲裁的复杂度。仿真结果表明,获得同等性能的条件下,该方法可以有效降低缓存的需求。
  • APM架构下的动态缓存的BCLFL策略,施家庆,牛纪桢,本文对基于APM的Web服务器架构进行分析,利用动态缓存来提高服务器的响应时间。文中对于影响服务器动态缓存的Web文件大小、文件连接
  • vue动态缓存:动态应用keep-alive 在实现动态缓存之前,先了解以下技术点: 1.假设A组件用了缓存,则A组件首次加载的钩子执行顺序:created—> activated —> mounted,而再次返回A组件时只会执行activated,...

    vue动态缓存:动态应用keep-alive


    在实现动态缓存之前,先了解以下技术点:

    1.假设A组件用了缓存,则A组件首次加载的钩子执行顺序:created—> activated —> mounted,而再次返回A组件时只会执行activated,如果你想每次进入A组件都做一些事情的话,你可以放在activated里面

    2.使用include和exclude的时候,必须给所有路由管理起来的vue组件都设置name属性,后果不赘述。

    3.当同时使用include和exclude的时候,exclude的优先级会更高,例
    include里面有nameA,exclude里面也有nameA,则此时nameA代表的组件就不会被缓存(实现原理就在这了!!!!!)

    对keep-alive不熟的童鞋戳 这里

    应用场景:

    逻辑思路:

    要实现A(pre页)跳转B不缓存,即在跳转B页面之前exclude中要含有B,
    反观C(next页)跳转B,B若想有缓存,则在B跳转C(next页)之前保证exclude里面没有B

    对!!!思路就是这样,精简一点来说,每当B跳转页面之前,B—>A(B跳转pre页),exclude里面添加B的name属性,B—>C(B跳转next页)则把B的name属性在exclude中删除即可(这块逻辑对于脑瓜子好使的小伙伴一看就懂,而卤煮属于比较笨的一类,想的略久)

    代码实现:
    好了,就差怎么实现了,接下来直接上代码!!!

    假设我就只有A、B、C三个页面,且B会用到缓存,我们只需要把B的name属性放到include,且同时控制explude中添加和删除B的name就可以实现动态缓存B组件,也就是上面的技术点3提到的优先级问题

    此时B用到缓存,所以B的name属性一直在includeList放着,我们只是利用include和exclude的优先级来控制B是否缓存
    我的页面入口代码如下:

    <template>
    	<div id="app">
    		<keep-alive :include="includeList" :exclude="excludeList">
    			<router-view />
    		</keep-alive>
    	</div>
    <template>
    
    <script>
    	import { mapState } from 'vuex';
    	export default {
    		data() {
    		    includeList: [ "nameB" ],
    		},
    		computed: {
    			...mapState({
    				excludeList: state => state.store.excludeList
    			}),
    		}
    	}
    </script>
    

    上面思路说了,每当缓存页面B跳转之前进行逻辑操作,那么全局的导航守卫beforeEach登场!!!

    import Vue from ‘'vue';
    import Router from ‘'vue-router';
    impport store from '../storeIndex'; // 根据自己的路径来
    
    Vue.use(Router);
    
    let router = new Router({
    	routes: [
    		{
    			path: '/a',
    			name: 'nameA',
    			component: 组件A,
    			meta: { keepAlive: false },
    		},
    		{
    			path: '/b',
    			name: 'nameB',
    			component: 组件B
    			meta: { keepAlive: true }, // 区分走缓存的组件
    		},
    		{
    			path: '/c',
    			name: 'nameC',
    			component: 组件C
    			meta: { keepAlive: false },
    		},
    	],
    });
    
    router.beforeEach((to, from, next) => {
    	// 加keepAlive就是为了区分,不走缓存的页无需进入此逻辑,这部分单拉出去封装,这里卤煮为了方便大家理解
    	if (from.meta && from.meta.keepAlive) {
    		//  nameB-nameA表示B页面跳转A页面,因为我们上面思路中提到,只需要在缓存组件跳转其他页面时操作exclude里面的值即可
    		const pointToRelation = [ 'nameB-nameA' ]; // 路由指向关系
    		let excludeArr = store.state.store.excludeList.slice(); // 复制一份excludeList的数据
    		const pointStr = `${from.name}-${to.name}`;
    		if (pointToRelation .indexOf(pointStr ) > -1) { // 说明是缓存组件B跳转pre页,此时应该将nameB放到excludeList里面
    			excludeArr.indexOf(from.name) === -1 && excludeArr.push(from.name); // 这里&&写法等同于if else 写法,可自行百度
    		} else { // 说明是缓存组件B跳转next页,此时应该将nameB从excludeList里面删除
    			excludeArr.indexOf(from.name) > -1 && excludeArr.splice(excludeArr.indexOf(from.name), 1);
    		}
    		store.commit('store/setExcludeList', excludeArr); // 最后利用vuex设置excludeList的值即可
    	}
    });
    

    以上就是本次的分享了,之所以封装这种方法,是因为在网上看到很多动态缓存组件的方法,思路如下(供参考):
    meta标签里添加isBack参数,然后在单组件中beforeRouterEnter(to, from, next)中根据to, from的name值来判断是不是next页返回,
    若是返回则isBack置为true,然后在的activated中根据isBack来做一些逻辑处理(因为组件走了缓存,逻辑放到activated中处理最为稳妥,比如请求数据),
    这样会导致另一个问题,那就是当你跳转下一页,在下一页滚动后再返回,缓存页的滚动高度会受影响,不知道你们有没有这样的问题,这个bug放到下一篇来说吧。

    展开全文
  • 航班搜索引擎动态缓存策略研究,周超,林友芳,随着国内民航市场的快速发展,互联网平台的航班查询量越来越多。为减轻后台服务的查询压力,查询缓存策略逐渐成为重要的研究课题
  • 一种基于热页迁移的虚拟机动态缓存划分方法,汪小林,胡夏蒙,静态缓存划分能够降低并行程序所产生的缓存冲突,提高缓存污染程序和缓存敏感型程序运行在共享最低级缓存的多核处理器中的总性能
  • 静态缓存和动态缓存的比较

    千次阅读 2011-01-28 13:08:00
    静态页面的缓存可能有2种形式:其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。... <br />动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如
  • memcache动态缓存 和 静态页面 这三者是什么关系呢?分不清。 知道s函数和memcache是缓存数据,静态页面是生成静态页面。 可是都生 成静态页面 了为什么还要 s函数和memcache的缓存数据 呢?
  • java动态缓存技术:WEB缓存应用

    千次阅读 2013-03-30 21:35:58
     java动态缓存jar包请下载。 源代码:  CacheData.java 存放缓存数据的Bean /**  *   */ package com.cari.web.cache; /**  * @author zsy  *   */ public class CacheData {  ...
  • DirectX11 动态缓存 & 水波演示Demo

    千次阅读 2015-10-02 16:07:46
    DirectX11 动态缓存 1. 动态缓存是什么? 到目前为止,我们一直使用的是静态缓冲(static buffer),它的内容是在初始化时固定下来的。相比之下,动态缓冲(dynamic buffer)的内容可以在每一帧中进行修改。当实现...
  • 2019-07-08 vuex+keepAlive动态缓存问题描述第一步 设置keepAlive包裹需要缓存的组件第二步 在列表页面里使用`beforeRouteLeave`函数控制需要是否需要缓存的条件 问题描述 现有三个页面,A(列表页面)、B(创建...
  • Vue动态缓存页面

    2020-07-01 13:43:34
    需求说明:A页面到B页面需要缓存,A页面到C页面不需要缓存 所要缓存页面的顶级出口 <keep-alive :include="kpAlive"> <router-view/> </keep-alive> <script> export default { computed...
  • vue3 keep-alive 动态缓存页面

    千次阅读 2020-10-26 09:36:22
    keep-alive ...通过keep-alive 的 include 来动态获取vuex保存的数组 代码实现 app.vue <router-view v-slot="{ Component }"> <!-- 缓存页面 --> <keep-alive :include="$store.sta
  • {片段缓存}: 片段缓存实现 if($this->beginCache('goods') array( 'duration'=>3600---->缓存时间 'varyByParam'=>array('page'),-->根据不同的参数生成不同的缓存页面 'dependency'=>array( 'class'=...
  • 我觉得对缓存认识,仅仅会写缓存及其淘汰算法是肤浅的、不负责任的。我们还需要决定,什么样的数据是需要进行缓存,多大的数据才能进行缓存。 首先,缓存数据往往是读取次数非常频繁的,但是底层数据不能更新太快,...
  • ESI 动态缓存技术

    千次阅读 2012-06-13 16:21:06
    任何一个Web网站的内容都是在不断更新和变化,但这并不意味这这个网站的内容就是动态内容,事实上,动态的内容是指用户每次...现在解决动态内容缓存的最新技术就是通过ESI技术来设计网站的内容。  ESI技术工作原理
  • 在实际项目中,我们经常会需要使用到缓存。一般来说,缓存介质是内存;而常见的DB将数据存储在硬盘中的;缓存读取是电脉冲,而硬盘读取是机械地读取转动的硬盘,速度差异是上百倍的。所以往往可以通过缓存,对经常...
  • 缓存算法也叫作淘汰算法,主要是为了当JVM空间不足时,用来清理掉缓存的。那么要清理的话,我们先清理掉哪些缓存呢?按照正常人的思维,当然是接下来一段时间内不大可能用到的缓存啦!根据这个思路,我们需要做出...
  • 业务中经常遇到一种需求 , 项目中使用了tab_bar管理打开的页面 , 切换过程中希望能缓存下来页面状态 , 关闭标签页 , 再从左侧菜单栏打开页面会重新加载 . 以下是几种常见的解决方案 , 以及优缺点和局限性 keep-alive...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 540,726
精华内容 216,290
关键字:

动态缓存