多条件分页查询该如何设计缓存

问题描述

有没有好的思路可以说下各位大神我觉得主要是这个缓存的key怎么处理还有分页一个严格的查询条件可能只是一个宽松条件的子集我想是如果以前缓存过这个宽松的条件我就不用再查数据库而是利用这个缓存再进一步的利用linq删选结果但是涉及到分页我那个宽松的条件可能只是缓存了部分数据不是全部的可是如果我把缓存规则定的太死比如完全按照条件和页数去匹配我又感觉命中率肯定不高。。。。

解决方案

解决方案二:
我觉得何时需要获取新数据,合适只是在内存中筛选,你应该是知道的,所以你就定义两种操作,如果需要新数据,你就分页取新数据,并把新数据合并到内存,需要过滤时,就只操作内存如果你的过滤都是基于全部数据的话,那你这缓存也就没意义了,第一次就需要把全部数据放到内存
解决方案三:
那像京东或者淘宝他们是怎么做的呢?一般他们的筛选条件都很复杂他们是怎么做的呢?一点缓存没有吗?还是他们的缓存就没在程序这一层设计?
解决方案四:
我在想这个可能就跟加索引一样把缓存key值关联到最能细致筛选条件的一个条件上比如我这有个省市的选择我就加在这个省市上第一次把这个市的数据全查出来以后再碰到这个市的细致条件就在这个市的结果集上去筛选。。。还得再想想。。那如果他就没选市那个条件呢?
解决方案五:
该回复于2012-03-11 08:53:14被版主删除
解决方案六:
引用楼主pang51a的回复:

有没有好的思路可以说下各位大神我觉得主要是这个缓存的key怎么处理还有分页一个严格的查询条件可能只是一个宽松条件的子集我想是如果以前缓存过这个宽松的条件我就不用再查数据库而是利用这个缓存再进一步的利用linq删选结果但是涉及到分页我那个宽松的条件可能只是缓存了部分数据不是全部的可是如果我把缓存规则定的太死比如完全按照条件和页数去匹配我又感觉命中率肯定不高。。……

命中率不高什么意思呢?你是不是认为假设把10万条记录放到内存里那么命中率就“高”了?如果是,那么你说的所谓命中率完全就不是真正的命中率了!这就是我对你所谓的“缓存了全部的数据”的看法,你的命中率概念完全是相反的。假设我们只是缓存一条数据,而不是10万条数据,这一条的命中率是很高的。因为你想,假设你把10万条记录一起作为一个缓存单元,那么这个缓存单元的命中率是不是就完全等于最低点的一条记录的命中率?而你把10万条记录中的1000条缓存,无论如何其平均命中率要比这个大的缓存单元高许多许多倍!一个分页查询,你可以用其sql语句作为缓存的key。即时是这个页面中数据在其它的查询缓存中有重复,也没有关系。也比你一下在缓存什么几万条数据命中率高多了。更何况.net的cache有很高的智慧,会自动根据内存情况自动清理内存占用,所以根本不用担心不同的数据缓存中有重复的数据。关键是使用相同的key查询时根本不用再次重复查询,这就够了。
解决方案七:
引用3楼pang51a的回复:

我在想这个可能就跟加索引一样把缓存key值关联到最能细致筛选条件的一个条件上比如我这有个省市的选择我就加在这个省市上第一次把这个市的数据全查出来以后再碰到这个市的细致条件就在这个市的结果集上去筛选。。。还得再想想。。那如果他就没选市那个条件呢?

这是空想。数据缓存的原则就两条:1.简单傻瓜化而不要想当然地搞什么“聪明的”分层查询;2.当真实数据修改时必须尽快(立刻)删除缓存。
解决方案八:
你把10万条记录中的1000条缓存,哪怕是很傻瓜化地一条一条地缓存,无论如何其平均命中率也要比这个大的缓存单元高许多许多倍!更何况你是对查询页面做缓存!数据缓存就好象给软件做皮肤、搞交互设计一样,是“立竿见影”地对性能产生极端影响的。不是那种花费好多时间研究一大堆理论结果对测试结果的影响很小的技术。你就是要从最终的查询设计出发去直截了当地缓存就行了,不要太繁琐。
解决方案九:
果以前缓存过这个宽松的条件我就不用再查数据库而是利用这个缓存再进一步的利用linq删选结果但是涉及到分页我那个宽松的条件可能只是缓存了部分数据不是全部的>>>>>>>>>>>>>>>>>>>?>??????????????????????????这里叫我很迷茫,您说是子集为什么数据不全啊您要开缓存当然要开最大的您完全可以规定,分页不查询数据库的,或者10%2不查询命中率,应该是100的,及我们缓存开最大开销

时间: 2024-09-15 21:04:33

多条件分页查询该如何设计缓存的相关文章

spring data jpa 按查询条件分页查询,数据为空

问题描述 springdatajpa按查询条件分页查询,代码如下执行后返回的结果如下content是空的,而且后台只发了一条count查询 解决方案 解决方案二:你换种写法试试,我一般是这样的wheret.xmlike:xm在Service层里面将xm参数前面和后面添加%号,你那种方式没有试过解决方案三:楼上正解1111111

代码-spring data jpa 按条件分页查询问题

问题描述 spring data jpa 按条件分页查询问题 自定义分页查询方法,代码: {"content":[],"totalPages":1,"totalElements":6,"last":true,"number":1,"size":10,"numberOfElements":0,"sort":null,"first"

由淘宝,京东,凡客站点的多条件分页查询细节想到的

首先,我详细描述下文章标题里面多条件分页查询的细节具体指什么? 多条件分页查询是我们常用的功能,今天留意到这样一个细节: 一般情况下,我们会将提供给用户选择的所有条件列在页面上,然后去判断用户选择了哪些条件,进而在后台动态组织sql去查询数据库. 而在绝大多数情况下,我们又会做服务端分页. 页面的布局大致分为三个部分(我自己的理解):条件区域,查询结果区域,页码区域. 第一种情况:用户选择选择几个条件,点击查询按钮,Ok显示用户想要的结果. 接下来,用户点击页面区域的某一页,OK显示对应了内容.

Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案

 IIndexDao package com.ucap.netcheck.dao; import com.ucap.netcheck.combination.beans.IndexCombinationBean;import com.ucap.netcheck.common.Page;import com.ucap.netcheck.common.dao.GenericDao;import com.ucap.netcheck.entity.Site; /**    * @Title: IIn

oracl-带多个条件的动态分页查询

问题描述 带多个条件的动态分页查询 如何用struts2 和orcal数据库实现带多条件的动态分页查询?,求指教 解决方案 路过看看,不过真的不会,不好意思 解决方案二: 多条件分页查询 和 不带条件的的分页查询只是多了几个条件而已,. sql 加几个条件不就好了吗

深入实践Spring Boot3.1.3 分页查询设计

3.1.3 分页查询设计 对于新型的Neo4j数据库来说,由于它的资源库遵循了JPA的规范标准来设计,在分页查询方面有的地方还不是很完善,所以在分页查询中,设计了一个服务类来处理,如代码清单3-3所示.其中,使用Class<T>传入调用的实体对象,使用Pageable传入页数设定和排序字段设定的参数,使用Filters传入查询的一些节点属性设定的参数. 代码清单3-3 Neo4j分页查询服务类 @Service public class PagesService<T> {    

SQL分页查询存储过程实例代码

话不多说,请看代码 ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ------------------------------------- Createproc [dbo].[Up_PagingQueryByParameter] (  ----- 表名或能查询到结果的SQL语句{SQL语句左右必须有括号例:(select * from tbl1)}  @Table

spring mvc + spring data jpa 带条件的查询分页的问题

问题描述 如题,springdatajpa用的是hibernate的实现.dao层继承了JpaRepository接口.初接触springdatajpa,求大神给小女子一个带条件的查询分页的demo.感激不尽! 解决方案 本帖最后由 shuzhen526 于 2013-04-01 14:16:52 编辑解决方案二:下载springside例子,继承了分页demo解决方案三:引用1楼lvzg_005的回复: 下载springside例子,继承了分页demo 我想用springdatajpa的接口中

关于分页查询和性能问题

分页查询是经常能够遇到的问题,我们首先看看分页查询存在的理由: 方便用户:用户不可能一次察看所有数据,所以一页一页的翻看比较好. 提高性能:一次从数据库中提取所有数据会比较慢. 那么现在我来尝试反驳上述理由: 真的方便吗?我们考虑下面的情况 如果数据只有20条. 如果数据超过1000条. 第一种显然不必分页查询.奇怪的是第二种也不必,因为没有哪个用户愿意一页一页的翻到最后,如果用户查询到的数据超过了他所关心的数据范围,我认为应该让他重新输入查询条件,就像我们使用google一样. 但是作为一个友