我使用以下唯一键来缓存几个请求...我正在使用内存缓存。
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0¶ms=<Product><ProductID>3</ProductID></Product>
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0¶ms=<Product><ProductID>1</ProductID></Product>
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0¶ms=<Product><ProductID>5</ProductID></Product>
urn:Product:/site.api.rest/product?pagenumber=0&pagesize=0¶ms=<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)?
答案 0 :(得分:1)
有一种更好的方法,即使用分代缓存。
构建缓存密钥时,请包含代数,例如
瓮:产品:的 gen_1 强>:/ site.api.rest/product?pagenumber=0&pagesize=0¶ms =
(此号码可以作为计数器存储在您的缓存服务中。)
然后,当您希望(伪)使大量缓存项无效时,只需增加世代号。
请确保在缓存的项目上设置到期日期,以便随着时间的推移清理老一代。