redis:基于依赖关系的缓存项失效?

1zmg4dgp  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(438)

在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"));
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题