在分页查询的时候可以指定是否从缓存中获取数据,框架中开始设定的是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' ]));
相关推荐
oscache的部署步骤包括引入相关依赖库,如log4j、oscache、commons-logging等,并配置web.xml,启用`CacheFilter`来拦截JSP页面请求,如下所示: ```xml <taglib-uri>oscache <taglib-location>/WEB-INF/classes...
- 利用Filter或Interceptor,拦截请求并检查是否有缓存的页面,如果存在则直接返回,否则处理请求并存入缓存。 6. 缓存策略: - 时间驱动:设置缓存过期时间,超过这个时间自动清除。 - 命中率驱动:根据缓存...
这时,可以使用Servlet Filter或自定义Tag Library来拦截请求,根据条件判断是否从缓存中读取数据,或者在数据更新后更新缓存。例如,我们可以使用Spring框架的`Cache`抽象层来管理缓存,或者使用第三方库如Ehcache...
`http_image_filter_module`模块的运行需要依赖于libgd库,这是一个用于处理多种图像格式的开源库。在Windows 64位环境中,我们通常会看到`libgd.dll`这样的动态链接库文件,它是libgd在Windows平台上的实现。在本...
2. 在Spring Boot的配置类中注册`Filter`:这种方式更加灵活,可以利用Spring的依赖注入和配置能力。 ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework....
总结来说,"tomcat-redis依赖jar包"涉及到的是将Tomcat应用服务器与Redis缓存系统整合的过程,包括连接器选择、配置、缓存策略、性能优化、安全措施以及监控与故障排查等多个方面。正确地集成和使用这些jar包,能够...
1. **添加依赖**:将`cors-filter-1.7.jar` 文件放入Tomcat的`lib`目录,这样服务器就能识别并加载这个过滤器。 2. **配置web.xml**:在你的应用的`WEB-INF/web.xml`文件中,你需要添加一个新的过滤器定义,如下所...
1. **Filter.DB**:这可能是一个过滤规则数据库,用于控制哪些数据会被缓存,哪些不会,从而优化缓存空间的使用。 2. **Setup.DB**:这是安装配置数据库,记录了软件的安装信息和设置参数,有助于系统初始化和升级...
而“工具”标签可能暗示作者还分享了一些实用的工具或库,帮助简化Filter的开发和调试,比如使用日志框架记录请求信息,或者使用依赖注入框架(如Spring)来管理Filter实例。 总的来说,通过学习Filter类的应用,...
5. **整合到Web应用**:在你的Servlet或Filter中,你可以根据需要使用Memcached来缓存数据,避免重复计算或频繁的数据库查询。 6. **配置Tomcat**:在某些情况下,你可能还需要配置Tomcat的`server.xml`文件,以...
1. **添加依赖**:首先,你需要在你的项目中通过Composer安装`laravel-cache-filter`。打开终端,进入项目根目录,然后运行以下命令: ``` composer require package_name ``` 注意替换`package_name`为实际的包...
- **执行顺序**:Filter的执行遵循配置顺序,而Listener的执行依赖于事件的发生顺序。 - **应用场景**:Filter更适合用于处理请求的前置和后置操作,如权限检查、编码转换等;而Listener适用于监听和响应Web应用的...
3. **Spring配置**:Spring配置文件会定义Bean的依赖注入,包括SSM框架的各个组件,如DataSource、SessionFactory、SqlSessionFactoryBean、MapperScannerConfigurer等,以及Shiro的相关Filter和Realm。 4. **...
- 合理规划Filter链,避免Filter之间的循环依赖。 - 使用Filter时,注意异常处理,避免Filter导致请求处理中断。 8. **Filter与其他组件的关系** Filter与Servlet、Listener等组件协同工作,共同构建了Java EE...
AspNetAdditional.dll , AspNetTheCall.dll两者缺一不可 功能介绍: DataPath =传入IP库的...CreateDataSetCache =创建缓存依赖 GetAllCache =创建缓存依赖项 PostSet = POST传值 JudgeNumber = 判断是否是数字
同样,Filter也可以在Servlet响应后对响应内容进行操作,如添加缓存控制头,加密敏感信息等。 在实际开发中,Filter的使用可以提高代码的可维护性和复用性,因为它们将通用的逻辑从Servlet中分离出来。例如,通过...
计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。计算属性的这种响应式缓存机制使得其非常适合处理复杂逻辑,比如对数据进行过滤和排序等。使用computed可以有效提高性能,因为它只有...
例如,你可以查看如何实现自定义的Realm以对接自己的用户数据源,或者如何利用Shiro的Filter链来定制Web应用的安全控制。同时,对于熟悉Guice或Spring的开发者,理解Shiro与这些框架的集成方式也是非常有价值的。 ...
配置两个 Filter,一个用于添加缓存(testPageAddCachingFilter),另一个用于清除缓存(testPageRemoveCachingFilter)。这些 Filter 将对应于特定 URL 规则,例如 `/hello/list` 和 `/hello/update/*`。 ```xml...
中间件可以用于验证用户身份、日志记录、限速、缓存等任务,是实现业务逻辑和控制流程的重要手段。 在Laravel开发中,中间件的工作原理是接收一个请求,执行一些处理,然后将请求传递给下一个中间件或控制器,最后...