`
niqingyang
  • 浏览: 42603 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Filter缓存依赖

    博客分类:
  • YII
 
阅读更多

在分页查询的时候可以指定是否从缓存中获取数据,框架中开始设定的是ajax不走缓存,而非ajax才走缓存,这样做在后期做复杂业务的时候会有一定的局限性,所以编写了过滤器缓存依赖,用来指定根据提交的数据而进行自动判断是否从缓存中后期query数据。

<?php
namespace common\caching;

use yii\caching\Dependency;
use common\base\Filter;

/**
 * Filter缓存依赖,根据指定的“get”、“post”、“request”的值,到提交的数据中进行查询返回对应的值,如果请求的数据发生变化则缓存失效
 *
 * @author niqingyang <niqy@qq.com>
 *        
 */
class FilterDependency extends Dependency
{

	public $post = [];

	public $request = [];

	public $get = [];

	public $defaults = [];

	protected function generateDependencyData ($cache)
	{
		$data = [];
		foreach((array)$this->get as $name)
		{
			$data[$name] = Filter::get($name, $this->defaults[$name]);
		}
		foreach((array)$this->post as $name)
		{
			$data[$name] = Filter::post($name, $this->defaults[$name]);
		}
		foreach((array)$this->request as $name)
		{
			$data[$name] = Filter::request($name, $this->defaults[$name]);
		}
		return $data;
	}
}

 可以用在pageList函数中:

/**
	 * 获取商品分页列表
	 *
	 * @param string $read_cache        	
	 * @param array $params        	
	 */
	public static function pageList ($read_cache = false, $params = [], Dependency $dependency = null)
	{
		// 分页设置
		$filter = Filter::getInstance($read_cache);
		
		if(isset($filter->query) && $filter->query instanceof Query)
		{
			$filter->page($filter->query);
			return $filter;
		}
		
		$defaults = [
			'shop_id' => null, 
			'goods_status' => null, 
			'goods_audit' => null
		];
		
		$params = ArrayHelper::merge($defaults, $params);
		
		$query = new Query();
		$query->select('*')->from(static::tableName())->orderBy([
			'goods_id' => 'desc'
		]);
		
		// 状态
		if(($goods_status = Filter::get('goods_status', $params['goods_status'])) !== null)
		{
			$query->andWhere([
				'goods_status' => $goods_status
			]);
		}
		
		// 加上缓存依赖
		// 此处根据查询条件进行判断是否需要从缓存中读取数据
		// 一旦指定的查询条件发生变化,则刷新缓存
		$filter->page($query, new FilterDependency([
			'get' => 'goods_status'
		]));
		
		return $filter;
	}

 通过下面的代码指定了,获取fitler的条件,一旦get提交的goods_status值发生变化则自动刷新缓存,这样无论是ajax还是非ajax都可以默认从缓存中读取数据了

// 加上缓存依赖
		// 此处根据查询条件进行判断是否需要从缓存中读取数据
		// 一旦指定的查询条件发生变化,则刷新缓存
		$filter->page($query, new FilterDependency([
			'get' => 'goods_status'
		]));

 

分享到:
评论

相关推荐

    AspNetTheCall 1.2

    AspNetAdditional.dll , AspNetTheCall.dll两者缺一不可 功能介绍: DataPath =传入IP库的...CreateDataSetCache =创建缓存依赖 GetAllCache =创建缓存依赖项 PostSet = POST传值 JudgeNumber = 判断是否是数字

    gwt-cache-filter:一个servlet过滤器,它基于* .cache。*和* .nocache。*命名模式向GWT生成的文件中添加适当的http缓存头。

    GWTCacheControlFilter基于GWTCacheControlFilter将适当的缓存属性添加到GWT生成的文件中。 和.nocache。 命名模式。 如果文件系统上存在一个PreEncodedGzipFilter它将提供静态文件的gzip变体,并且请求指定“ ...

    Vue 中 filter 与 computed 的区别与用法解析

    computed:监控已有的属性,一旦属性的依赖发生了改变,就去自动调用对应的方法 filter:js中为我们提供的一个方法,用来帮助我们对数据进行筛选 watch与computed的区别: 1.watch监控现有的属性,computed通过现有的属性...

    2021年最新 .NET5从0基础到精通35-46.rar

    036.NET5_支持依赖注入扩展.mp4 037.NET5_Filter的生效范围控制执行顺序.mp4 038.NET5_Resource扩展定制支持缓存.mp4 039.NET5_自定义Filter匿名.mp4 040.NET5_ExceptionFilter.mp4 041.NET5_ExceptionFilter....

    nginx-mobile-resize-conf:使用这个 nginx 配置,我们可以检查用户设备的类型(iPhone、iPod、iPad、Android 手机、Android 平板电脑),按比例增加请求图像的大小并缓存它

    关于使用这个 nginx 配置,我们可以检查用户设备的类型(iPhone、iPod、iPad、Android 手机、Android ...nginx 的依赖ngx_http_image_filter_module ngx_let_module ngx_eval_module 配置nginx ./configure --with-...

    高级java笔试题-tip:自写博客、博客收藏、开源项目收藏

    缓存空值、BloomFilter 缓存雪崩: 缓存层不能提供服务,所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层挂掉。解决方案: 缓存集群、本地缓存、限流、降级 算法和协议 数据一致性 容器与devops goLang ...

    Net6Test 配置框架

    用于net6+Swagger+JWT+MemoryCache缓存+redis缓存+捕获全局异常Filter+ token过滤器+定时任务Job+Atuoface容器依赖注入 配置和使用

    idc网管系统

    本项目结 构上分为表现层、业务层和数据访问层,层次间的依赖关系自下到上。采用的技术有Struts,Spring,Hibernate,Log4J,JDom 等。其中表现层采用Struts框架开发;...为提高性能,采用Servlet Filter实现了缓存代理

    vue.js的computed,filter,get,set的用法及区别详解

    处理复杂逻辑,基于依赖缓存,当依赖发生改变时会重新取值。用methods也可以实现同样的效果,但methods在重新渲染的时候会重新调用执行,在性能上computed优于methods,当不需要缓存时可用methods。 实例1:computed...

    spring4.3.9相关jar包

    spring-web.jar(必须) :这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。...

    微服务框架搭建 基于oauth2 认证中心服务

    # 依赖环境 JDK8、 Maven、 Mysql、 Redis 、nacos 注册中心采用阿里巴巴 nacos 缓存使用的是redis oauth2数据存储在数据库中 username: test password: 123456 phone: 13100000000 verifyCode: 1000 //数据库...

    puput-demo:使用Puput的示例博客应用

    puput-demo 使用Puput的示例博客应用设定值puput-demo广泛依赖于环境设置,该环境设置不适用于Apache / mod_wsgi设置。 它已与Gunicorn / Nginx甚至uWSGI / Nginx一起成功部署。 出于配置目的,下表将“ puput-demo...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar  这个...

    Nginx安装包

    其实Spring本身就有提供对redis的支持,就是spring-session,我们只需将这个在pom.xml添加如下代码,maven便会自己下载所需的jar包及依赖包。 1 &lt;dependency&gt;2 &lt;groupId&gt;org.springframework.session&lt;/groupId&gt;3 ...

    toubkal_mysql:React性MySQL库

    有网络问题重新启动MySQL服务器重新启动托管MySQL服务器的服务器长时间关闭了托管MySQL服务器的服务器无限期等待就绪MySQL(重新)连接以处理操作无状态,不保留任何内容,依赖于MySQL缓存可以使用set()Pipelet...

    大数据高频面试题.pdf

    RDD的特性(RDD的解释) 1.RDD可以看做是⼀些列partition所组成的 2.RDD之间的依赖关系 3.算⼦是作⽤在partition之上的 4.分区器是作⽤在kv形式的RDD上 5.partition提供的最佳计算位置,利于数据处理的本地化即计算...

    rememo:记住Redux和其他不可变对象派生的选择器

    用法Rememo的默认导出是一个接受两个参数的函数:选择器函数,其返回值将被缓存,第二个函数返回选择器派生所依赖的引用或引用数组。 返回值是一个新函数,该函数接受与选择器相同的参数。 import createSelector ...

    product-purchase:购买带有django和stripe的单个数字产品

    product_purchase广泛依赖于环境设置,该环境设置不适用于Apache / mod_wsgi设置。 它已与Gunicorn / Nginx甚至uWSGI / Nginx一起成功部署。 出于配置目的,下表将“ product_purchase”环境变量映射到其Django设置...

    OpenQuery:一个严肃的 OData 查询 url 构建器

    具有零依赖关系的严肃 OData 查询 url 构建器。 ##为什么这个? OpenQuery 提供了一种将过滤、选择、展开和其他命令链接在一起的方法。 没有缓存,没有复杂的客户端框架。 OpenQuery 构建 URL,您可以选择如何...

    BrainDriller

    您可能要讲的内容: Ruby版本3.0.0 系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明... RuboCopの设定エラーの影响范囲が大きいCopを无效化して,个别のエ...

Global site tag (gtag.js) - Google Analytics