分页/过滤数据的缓存策略

时间:2009-05-26 19:32:18

标签: java .net memcached theory

我目前正在考虑缓存策略,更重要的是避免缓存中的任何数据重复。我的查询与语言无关,但与编程有关。

我的问题是关于分页或过滤数据的高效缓存,但不仅仅是分布式缓存。后者我决定使用memcached,更具体地说是.NET端口。我已经看到了NCache形式的另一个商业选项,但memcached似乎完全可以接受,显然在facebook,myspace等上使用...

我的查询是一个策略,您可以在缓存中包含对象,也可以使用分页数据引用它们。如果我有100个项目并且我将它们分页,那么我可以将产品1-10的ID缓存在缓存中并单独缓存每个产品。如果我在哪里对项目进行排序,则项目1-10将是不同的产品,所以我不希望每次页面数据/排序/过滤更改时存储实际对象,而是存储对象的ID,以便我可以在数据库中执行trabsactional查找,如果其中一些尚未存在于缓存中或无效。

我最初的想法是缓存密钥。

paged_<pageNumber><pageSize><sort><sortDirection>[<filter>]

然后我将遍历缓存键并删除以“paged_”开头的任何内容。我的问题最终是,如果任何人知道关于缓存此类数据模式(如分页数据)的问题的任何模式或想法,并确保这些对象不会被缓存多次。

memcached是本机代码,并且按照我上面所述的方式清除缓存没有问题,但是显而易见的事实是缓存中的项目越多,所需的时间就越多。如果有人知道目前正在使用的这类问题的任何解决方案或理论,我感兴趣。我相信会有。谢谢你的时间

TIA

安德鲁

1 个答案:

答案 0 :(得分:0)

我曾经尝试过,我认为,这是一种类似的缓存策略,并且发现它很笨拙。我最终只是缓存构成页面的对象并为每个请求生成页面。构建页面的10个缓存命中将是(希望)次秒响应时间,对您的服务用户来说几乎是即时的。

如果必须缓存整个页面(我将它们视为结果集),那么也许您可以通过哈希运行用户请求并将其用作缓存键。使用具体示例或代码(至少对我来说)可视化是一个难题。