NET Core中如何使用Redis缓存页面?

时间:2018-09-11 17:22:41

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

我是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页面?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

    public object Any(GetCustomerOrders request) { ... }
}

注释您的服务将缓存所有服务的输出响应,否则,您可以将其添加到服务实现方法中以将其临时存储,例如:

public class CachedServices : Service 
{ 
    public object Any(GetCustomer request) { ... }

    [CacheResponse(Duration = 60)]
    public object Any(GetCustomerOrders request) { ... }
}