美文网首页
redis学习笔记(十) 海量数据查询

redis学习笔记(十) 海量数据查询

作者: 云师兄 | 来源:发表于2019-09-25 14:58 被阅读0次

    1. 引子

    如何从海量key里查询出某一固定前缀的key?

    答:不能直接用: keys key1*这个命令,因为当数据量太大时会导致客户端卡死,尤其在生产环境上不能使用该命令。应用使用scan命令。

    2. scan命令

    scan命令的格式如下:

    SCAN cursor [pattern] count

    scan具有如下特点:

    • scan是一个基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程。
    • 以0作为游标开始新一轮的迭代,知道命令返回游标0表示完成一次迭代。
    • 一次返回的数量不可控,只能大概率符合count参数。

    3.示例

    假如想查询key值以key1为开始的键值对,可以使用下面的命令:

    scan 0 match k1* count 10
    

    这样第一次就指定返回10条数据。结果输出如下:

    1) 12345
    2) 1) k12214
       2) k124
       3) k1424
    

    返回结果中第一行的数据为本次查询结束后游标的最新值。下一次查询将依据此游标再次查询;第二行开始的数据为查询结果,可以看到只有三条数据,并不是我们设置的10条数据,即前面说的返回的数量不可控。
    下面开始第二次查询:

    scan 12345 match k1* count 10
    

    看到游标就是第一次查询的返回值,第二次查询结果如下:

    1) 5326
    2) 1) k12264
       2) k1227
       3) k1098
       4) k1928
    

    可以看到每次查询结果的数量都不一定相同,第三次查询将5326作为游标开始查询。

    scan 5326 match k1* count 10
    

    查询结果为:

    1) 3332
    2) 1) k1112
       2) k1876
    

    这里要注意的是:第三次查询返回的游标值比前面返回的游标值还小,这就有可能导致前后之间的查询结果有重复的数据。为了避免结果重复,可以每次将查询的结果放在同一个set集合里面,这样就可以实现去重了。

    相关文章

      网友评论

          本文标题:redis学习笔记(十) 海量数据查询

          本文链接:https://www.haomeiwen.com/subject/zdtwuctx.html