我目前正在考虑缓存策略,更重要的是避免缓存中的任何数据重复。我的查询与语言无关,但与编程有关。
我的问题是关于分页或过滤数据的高效缓存,但不仅仅是分布式缓存。后者我决定使用memcached,更具体地说是.NET端口。我已经看到了NCache形式的另一个商业选项,但memcached似乎完全可以接受,显然在facebook,myspace等上使用...
我的查询是一个策略,您可以在缓存中包含对象,也可以使用分页数据引用它们。如果我有100个项目并且我将它们分页,那么我可以将产品1-10的ID缓存在缓存中并单独缓存每个产品。如果我在哪里对项目进行排序,则项目1-10将是不同的产品,所以我不希望每次页面数据/排序/过滤更改时存储实际对象,而是存储对象的ID,以便我可以在数据库中执行trabsactional查找,如果其中一些尚未存在于缓存中或无效。
我最初的想法是缓存密钥。
paged_<pageNumber><pageSize><sort><sortDirection>[<filter>]
然后我将遍历缓存键并删除以“paged_”开头的任何内容。我的问题最终是,如果任何人知道关于缓存此类数据模式(如分页数据)的问题的任何模式或想法,并确保这些对象不会被缓存多次。
memcached是本机代码,并且按照我上面所述的方式清除缓存没有问题,但是显而易见的事实是缓存中的项目越多,所需的时间就越多。如果有人知道目前正在使用的这类问题的任何解决方案或理论,我感兴趣。我相信会有。谢谢你的时间
TIA
安德鲁
答案 0 :(得分:0)
我曾经尝试过,我认为,这是一种类似的缓存策略,并且发现它很笨拙。我最终只是缓存构成页面的对象并为每个请求生成页面。构建页面的10个缓存命中将是(希望)次秒响应时间,对您的服务用户来说几乎是即时的。
如果必须缓存整个页面(我将它们视为结果集),那么也许您可以通过哈希运行用户请求并将其用作缓存键。使用具体示例或代码(至少对我来说)可视化是一个难题。