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

解决方案 »

  1.   

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

  2.   


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

  3.   

    果以前缓存过这个宽松的条件 我就不用再查数据库 而是利用这个缓存再进一步的利用linq删选结果
    但是涉及到分页 我那个宽松的条件可能只是缓存了部分数据 不是全部的  
    >>>>>>>>>>>>>>>>>>>?>??????????????????????????
    这里叫我很迷茫,您说是子集为什么数据不全啊
    您要开缓存当然要开最大的
    您完全可以规定,分页不查询数据库的,或者10%2不查询
    命中率,应该是100的,及我们缓存开最大开销