如何使用堆栈交换 Redis 库的键模式获取值列表

Fla*_*shi 3 c# redis stackexchange.redis

在控制台应用程序上工作时,我有一个包含一些通用集合的单例类。这些集合之前保存在内存中,我们正在尝试使用堆栈交换 Redis 库将它们移动到 Redis。

基类是:

public class QueueParamDTO
{
    public string Queue { get; set; }
    public int Max { get; set; }
    public int Calls { get; set; }
    public int Holdtime { get; set; }
    public int TalkTime { get; set; }
    public int Completed { get; set; }
    public int Abandoned { get; set; }
    ...
} 
Run Code Online (Sandbox Code Playgroud)

Queue该类的Property 值是唯一的,因此我使用它来构建键,而该值是上述对象的序列化字符串。

RedisSingleton.Connection.GetDatabase().StringSet($"queue:{queueParam.Queue}",JsonConvert.SerializeObject(queueParam));
Run Code Online (Sandbox Code Playgroud)

我能够读取单个值并反序列化对象。还可以使用模式检索完整的键列表:

var keys = server.Keys(pattern: "queue:*", pageSize: 100);
Run Code Online (Sandbox Code Playgroud)

如何对值做同样的事情,即使用上面的特定键模式获取值列表?

Fla*_*shi 5

首先获取我想从 Redis 检索的键列表并将其转换为数组RedisKey[]

RedisKey[] queueKeys = RedisSingleton.Server.Keys(pattern: "queue:*").ToArray();
Run Code Online (Sandbox Code Playgroud)

我能够检索以下列表RedisValue[]

RedisValue[] queueValues=RedisSingleton.Connection.GetDatabase().StringGet(queueKeys);
Run Code Online (Sandbox Code Playgroud)

最后,我选择并反序列化为QueueParamDTO对象列表:

List<QueueParamDTO> queues = queueValues.Select(qv => JsonConvert.DeserializeObject<QueueParamDTO>(qv)).ToList();
Run Code Online (Sandbox Code Playgroud)