在redis中,当其他指定的项从缓存中删除时,是否有一种本地方法使缓存项无效?是否有基于依赖关系的驱逐政策?
这是我想要完成的一个例子。
假设在redis中有一个缓存项,其键是mainkey。我想这个项目是自动删除,如果另一个特定的项目被删除。例如,如果mainkey依赖于键d1和d2,那么我希望一旦从缓存中删除d1或d2,mainkey就会从缓存中删除。
例如,在.net中,使用memorycache编写这样的代码相当容易。
[TestMethod]
public void TestCacheItemIsRemovedWhenADependencyGetsRemoved() {
// ARRANGE
var cache = new MemoryCache(name: "MyCache");
// insert dependencies cache items
var dummyValue = 1;
cache.Set("d1", dummyValue, absoluteExpiration: DateTime.Now.AddDays(1));
cache.Set("d2", dummyValue, absoluteExpiration: DateTime.Now.AddDays(1));
// build cache policy for main cache item
var policy = new CacheItemPolicy {
SlidingExpiration = TimeSpan.FromMinutes(10)
};
var dependencies = new[] { "d1", "d2" };
var changeMonitor = cache.CreateCacheEntryChangeMonitor(dependencies);
policy.ChangeMonitors.Add(changeMonitor);
// insert main cache item
cache.Set("mainKey", "this is the main value", policy);
// ACT
// remove a dependency key
cache.Remove("d1");
// ASSERT
// mainKey is removed as a consequence of removing "d1"
Assert.IsFalse(cache.Contains("mainKey"));
// only "d2" remains in the cache
Assert.AreEqual(1, cache.GetCount());
Assert.IsTrue(cache.Contains("d2"));
}
暂无答案!
目前还没有任何答案,快来回答吧!