【问题标题】:How to cache pages with redis in .net core?如何在.net core中使用redis缓存页面?
【发布时间】:2018-09-12 13:45:01
【问题描述】:

我不知何故是 redis 的初学者,我知道如果你想缓存列表或对象或类似的东西,在 redis 中很容易,但我不知道如何将我的网页存储在 redis 中? 请注意,我使用 servicestack 作为我的 redis 客户端,并使用服务堆栈将数据保存到我的 redis 我正在使用这样的代码:

 IRedisClient redisClient = new RedisClient();
        var rc = redisClient.As<person>();
        rc.Store(new person()
        {
            Id = 1,
            Name = "foo"
        });
        rc.Store(new person()
        {
            Id = 2,
            Name = "bar"
        });
        var result = rc.GetAll();

正如我之前告诉过你的那样,我有一个很大的问题,那就是

如何使用 Redis 在 .net 核心 Web 应用程序中缓存我的 .html 或 .cshtml 页面?

【问题讨论】:

    标签: asp.net-mvc asp.net-core redis servicestack.redis


    【解决方案1】:

    响应缓存中间件使用配置的任何分布式缓存。因此,需要先添加Redis distributed cache provider,再添加response caching middleware:

    services.AddDistributedRedisCache(options =>
    {
        options.Configuration = "localhost";
        options.InstanceName = "SampleInstance";
    });
    services.AddResponseCaching();
    

    FWIW,您还应该更改现有代码以利用IDistributedCache 的注入实例,而不是直接使用RedisClient。最终结果将是相同的(假设您已将 Redis 配置为分布式缓存提供程序),但您将从代码中抽象出实现。

    【讨论】:

    【解决方案2】:

    如果您使用 ServiceStack Razor 或 ServiceStack Templates 生成视图,则可以使用 [CachedResponse] attribute 缓存服务的输出响应,例如:

    [CacheResponse(Duration = 60)]
    public class CachedServices : Service 
    { 
        public object Any(GetCustomer request) { ... }
    
        public object Any(GetCustomerOrders request) { ... }
    }
    

    注解你的Service会缓存所有Service的输出响应,否则你可以将它们添加到服务实现方法中以临时缓存它们,例如:

    public class CachedServices : Service 
    { 
        public object Any(GetCustomer request) { ... }
    
        [CacheResponse(Duration = 60)]
        public object Any(GetCustomerOrders request) { ... }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2021-06-06
      • 2017-09-28
      • 1970-01-01
      • 2020-06-23
      • 2020-04-05
      • 2017-03-15
      • 2020-01-18
      • 2012-03-26
      相关资源
      最近更新 更多