从CacheClient对象中查找CacheKey的所有实例,并从中删除一个或多个

时间:2013-09-11 11:40:30

标签: servicestack

我使用以下唯一键来缓存几个请求...我正在使用内存缓存。

urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0&params=<Product><ProductID>3</ProductID></Product>
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0&params=<Product><ProductID>1</ProductID></Product>
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0&params=<Product><ProductID>5</ProductID></Product>
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0&params=<Product><ProductID>3</ProductID><Description>test</Description></Product>
...
...

现在,在create / update / delete中,我想删除特定的缓存(基于请求体中传递的params,例如3的所有内容)。

为了做到这一点,我会从请求参数中获取singleNode(例如:3)。

我该怎么办?

Get all cache objects which matches <ProductID>3</ProductID> and remove it?
Also, what is the right approach to remove cache?
    base.RequestContext.RemoveFromCache(base.Cache, cachekey);
    or
    CacheClient.Remove(keyname)?

1 个答案:

答案 0 :(得分:1)

有一种更好的方法,即使用分代缓存。

构建缓存密钥时,请包含代数,例如

  

瓮:产品:的 gen_1 :/ site.api.rest/product?pagenumber=0&pagesize=0&params =

(此号码可以作为计数器存储在您的缓存服务中。)

然后,当您希望(伪)使大量缓存项无效时,只需增加世代号。

请确保在缓存的项目上设置到期日期,以便随着时间的推移清理老一代。