【问题标题】:Execute a function if Redis cache fails如果 Redis 缓存失败,则执行一个函数
【发布时间】:2021-06-25 21:52:00
【问题描述】:

我正在开发一个 .NET Core 3.1 应用程序。使用“StackExchange.Redis”库来处理 Redis 上的缓存操作。

在 Startup.cs 中配置连接字符串

services.AddStackExchangeRedisCache(options => {
    options.Configuration = Configuration.GetValue<string>("localhost:6379");
    options.InstanceName = "laserlamb:"; 
});

这个静态类将“SetRecord”函数添加到 IDistributedCache:

    public static class DistributedCache
    {
        public static bool isCacheAvailable = true;
        static DistributedCache()
        {

        }
        
        public static async Task SetRecord(this IDistributedCache cache, string recordId, string value)
        {
            try
            {
                if (this.isCacheAvailable)
                {
                    await cache.SetStringAsync(recordId, value);
                }
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
            }
        }
    }

使用依赖注入对象在缓存中设置记录。

public class SomeRandomClass
{
    private IDistributedCache cache;
    public SomeRandomClass(IDistributedCache cache) { this.cache = cache; }
    
    public async Task SaveToCache()
    {
        await cache.SetRecord("Key", "Value");
    }
}

如果我的 Redis 实例未运行,则会出现错误。

当缓存不可用时,我如何更新isCacheAvailable

【问题讨论】:

  • 不知道你在这里问什么。如果缓存不可用,您能否举例说明您希望发生的情况?
  • @stuartd 我已经更新了问题和代码。如果有帮助,请告诉我。

标签: c# asp.net .net redis stackexchange.redis


【解决方案1】:

我认为您想查看Polly Project。它有Retry/WaitAndRetry/RetryForeverCircuit Breakers,可以很方便。

您有 Plugin 用于 Microsoft DistributedCache 提供程序。

检查一下。

【讨论】:

  • 谢谢。我知道波莉,但从来没有想过它会在那里工作。 :)
  • 当然可以,这对于您想要重试并回退到日志记录的情况很有用。
  • 如果你不明白如何用 Polly 解决问题 - 请联系我。但基本上你可以有重试(如果你愿意的话),以及用于日志记录或调用其他方法的后备策略。您可以将它们组合成一个策略。 :) 但是,很棒、简单但功能强大的东西。
  • 完美运行。我一直在敲我的头直到凌晨 3 点试图弄清楚如何解决这个问题。您的解决方案简单且非常有效。非常感谢@Sasaman??
  • 太好了,它可以在很多情况下使用,请放在袖子里。 ^_^
猜你喜欢
  • 2015-05-14
  • 2020-01-07
  • 2023-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2012-06-01
  • 2019-05-29
  • 2019-02-08
相关资源
最近更新 更多