如何使用StackExchange.Redis存储列表?

时间:2017-04-28 12:27:02

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

我正在使用StackExchange.Redis(版本1.2.1)和ASP.NET MVC C#应用程序。我可以使用StackExchange.Redis存储和查看数组和字符串。但是,我无法找到存储列表的方法。有什么办法吗?如果没有,请你为StackExchange.Redis提出一些好的替代方案来完成这个要求吗?

3 个答案:

答案 0 :(得分:4)

我建议您使用StackExchange.Redis.Extensions,然后就可以执行此操作:

var list = new List<int> { 1, 2, 3 };
bool added = cacheClient.Add("MyList", list, DateTimeOffset.Now.AddMinutes(10));

并检索您的清单:

var list = cacheClient.Get<List<int>>("MyList");

答案 1 :(得分:1)

严格来说,Redis只存储字符串,而List<MyObject>显然不是字符串。但是有一种方法可以实现您的目标:将您的列表转换为字符串。

要存储List<MyObject>,请先使用JsonConvert之类的工具将其序列化为字符串,然后将其存储在redis上。检索时,只需反序列化...

答案 2 :(得分:0)

前3年以上,我一直希望使用StackExchange.Redis在.NET核心中执行类似的操作,因此,如果有人希望执行相同的操作,则将其保留在此处。

有“ StackExchange.Redis.Extensions.Core”,它允许按以下方式存储和检索。将此Nuget与“ StackExchange.Redis.Extensions.AspNetCore”和“ StackExchange.Redis.Extensions.Newtonsoft”一起使用

private readonly IRedisCacheClient _redisCacheClient;

public ValuesController(IRedisCacheClient redisCacheClient)
        {
            _redisCacheClient = redisCacheClient;
        }

public async Task<List<int>> Get()
        {
            var list = new List<int> { 1, 2, 3 };
            var added = await _redisCacheClient.Db0.AddAsync("MyList", list, DateTimeOffset.Now.AddMinutes(10));
            return await _redisCacheClient.Db0.GetAsync<List<int>>("MyList");
        }