aierda 2023-09-07 19:02 采纳率: 72.1%
浏览 20
已结题

redis中hash表的查询问题

问题描述:
我使用的环境是 .NetCore,我通过代码从redis数据库进行hash表的分页查询,
相关的代码如下


public static List<T> HashScan<T>(string key, int cursor, string pattern, int count)
{
    //key:hashId;cursor:游标,0为从第一条记录查起,依次类推;
    //pattern:好像是dataKey的匹配条件,因为我不需要条件,所以为"*";
    //count:获取多少条记录
    List<T> list = new List<T>();
    var result = Cache.ScriptEvaluate(LuaScript.Prepare("return redis.call('HSCAN',@key,@cursor,'MATCH',@pattern,'COUNT',@count)"), 
    new { key = key, cursor = cursor, pattern = "*" + pattern + "*", count = count });
    if (!result.IsNull)
    {
        var vals = (RedisResult[])((RedisResult[])result)[1];//可惜的是,这里获取到的vals是dataKey[],不是value,
                                                            //我的目的是获取所有记录的value,而不是dataKey
        foreach (var item in vals)
        {
            list.Add(ConvertObj<T>(Unescape(item.ToString())));
        }
    }
    return list;
}

//调用
for (int pageIndex = 0; pageIndex < pageCount; pageIndex++) //通过分页调用上面的函数
{
        //pageIndex: 第几页;   maxResultCount :每页几条记录; maxResultCount * pageIndex:上面函数的游标
    List<Audit> auditList = RedisReadHelper.HashScan<Audit>("AMS_Log", maxResultCount * pageIndex, "*", maxResultCount);
    //其它代码
}

我的问题:
我的这种分页查询只能获取到hash表的所有记录的key,而不是value,
而我的目的是value;
1.HSCAN命令是否可以获取到分页数据的value,如何获取?
2.如果HSCAN不能达此目的,可有其它的解决方案呢?

恳请各位能士帮忙,期待,期待

  • 写回答

14条回答 默认 最新

  • 前网易架构师-高司机 优质创作者: 人工智能技术领域 2023-09-07 22:21
    关注

    hscan并不能很好的解决你的问题,底层只能返回key。
    如果你是仅仅想根据push到Redis队列数据,有先后顺序的取数据,你可以使用队列list,lpush数据,lrem返回多条记录并删除他们。
    为了进一步提供有效的解决方案,我想知道你要存的数据有什么特点,取的时候有什么需求,比如效率优先

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(13条)

报告相同问题?

问题事件

  • 系统已结题 9月18日
  • 已采纳回答 9月10日
  • 修改了问题 9月7日
  • 创建了问题 9月7日