美文网首页
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学习笔记(十) 海量数据查询

    1. 引子 如何从海量key里查询出某一固定前缀的key? 答:不能直接用: keys key1*这个命令,因为当...

  • Hbase初窥

    Hbase能做什么 海量数据的存储 海量数据的查询 企业数据海量查询 项目需求功能 海量数据 实时查询 场景复杂 ...

  • 缓存架构之16:redis如何在保持读写分离+高可用的架构下,还

    1、单机redis在海量数据面前的瓶颈 2、怎么才能够突破单机瓶颈,让redis支撑海量数据? 3、redis的集...

  • redis cluster模式下master水平扩容支撑海量数据

    概述 这里介绍redis cluster模式下master水平扩容支撑海量数据。 master水平扩容 redis...

  • 分区

    简介 在面对海量数据存储(需要大的存储空间)和海量查询(需要高并发的查询)时,单服务器的数据存储模型无法提供高可用...

  • Redis数据库实现

    数据库作用 完成海量数据的存储 可选数据结构 数组,查询速度O(1) 链表,查询速度O(n) 树,查询速度O(lo...

  • Redis入门--数据结构

    学习笔记 Redis的数据结构的编码 常说的Redis五种基本数据结构string、list、hash、set、z...

  • 【Redis】redis缓存的实现

    redis缓存的原理 1.查询数据时,首先根据接口名称和请求参数查询redis缓存,查到了对应数据的话,直接返回结...

  • Redis学习(一)--Redis安装

    Redis介绍 Redis是一种面向“键/值”对数据类型的内存数据库,可以满足我们对海量数据的读写需求。 特点:*...

  • redis 学习笔记

    这篇 redis 学习笔记主要介绍 redis 的数据结构和数据类型,并讨论数据结构的选择以及应用场景的优化。 r...

网友评论

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

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