广告
返回顶部
首页 > 资讯 > 数据库 >Redis中Scan命令的使用方法
  • 420
分享到

Redis中Scan命令的使用方法

2024-04-02 19:04:59 420人浏览 泡泡鱼
摘要

小编给大家分享一下Redis中Scan命令的使用方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,

小编给大家分享一下Redis中Scan命令的使用方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式,
一是keys命令,简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。
二是scan命令,以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强

以下写入100000条key***:value***格式的测试数据(ps:用pipline的话,1w一笔,每一笔在秒级完成)

# -*- coding: utf-8 -*-
# !/usr/bin/env python3
import redis
import sys
import datetimedef create_testdata():
    r = redis.StrictRedis(host='***.***.***.***', port=***, db=0, passWord='***')
    counter = 0
    with r.pipeline(transaction=False) as p:
        for i in range(0, 100000):
            p.set('key' + str(i), "value" + str(i))
            counter = counter + 1
            if (counter == 10000):
                p.execute()
                counter = 0
                print("set by pipline loop")

if __name__ == "__main__":
    create_testdata()

比如这里查询key111开头的key有哪些?

若使用keys命令,则执行keys key1111*,一次性全部查出来。

Redis中Scan命令的使用方法

同样,如果使用scan命令,则用 scan 0 match key1111* count 20

Redis中Scan命令的使用方法

scan的语法为:SCAN cursor [MATCH pattern] [COUNT count] The default COUNT value is 10.

SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程。
这里使用scan 0 match key1111* count 20命令来完成这个查询,稍显意外的是,使用一开始都没有查询到结果,这个要从scan命令的原理来看。
scan在遍历key的时候,0就代表第一次,key1111*代表按照key1111开头的模式匹配,count 20中的20并不是代表输出符合条件的key,而是限定服务器单次遍历的字典槽位数量(约等于)。

那么,什么又叫做槽的数据?这个槽是不是Redis集群中的slot?答案是否定的。其实上图已经给出了答案了。
如果上面说的“字典槽”的数量是集群中的slot,又知道集群中的slot数量是16384,那么遍历16384个槽之后,必然能遍历出来所有的key信息,
上面清楚地看到,当遍历的字典槽的数量20000的时候,游标依旧没有走完遍历结果,因此这个字典槽并不等于集群中的slot的概念。
经过测试,在scan的时候,究竟遍历多大的COUNT值能完全match到符合条件的key,跟具体对象的key的个数有关,
如果以超过key个数的count来scan,必定会一次性就查找到所有符合条件的key,比如在key个数为10W个的情况下,一次遍历20w个字典槽,肯定能完全遍历出来结果。

Redis中Scan命令的使用方法

scan 指令是一系列指令,除了可以遍历所有的 key 之外,还可以对指定的容器集合进行遍历。
zscan 遍历 zset 集合元素,
hscan 遍历 hash 字典的元素、
sscan 遍历 set 集合的元素。
SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个数据库键(某个指定的key)。

另外,使用redis desktop manager的时候,当刷新某个库的时候,控制台自动不断刷新scan命令,也就知道它在干嘛了

Redis中Scan命令的使用方法

看完了这篇文章,相信你对Redis中Scan命令的使用方法有了一定的了解,想了解更多相关知识,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: Redis中Scan命令的使用方法

本文链接: https://www.lsjlt.com/news/52378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis中Scan命令的使用方法
    小编给大家分享一下Redis中Scan命令的使用方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,...
    99+
    2022-10-18
  • Scan命令怎么在Redis 中使用
    这期内容当中小编将会给大家带来有关Scan命令怎么在Redis 中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 概述SCAN 命令以及比较相近的 SSCAN、H...
    99+
    2022-10-18
  • Redis中Scan命令的基本使用教程
    前言 Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式, 一是keys命令,简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执...
    99+
    2022-10-18
  • Redis中scan命令的作用是什么
    这期内容当中小编将会给大家带来有关Redis中scan命令的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SCAN 命令SCAN命令的有SCAN,SSCAN,H...
    99+
    2022-10-18
  • 怎么使用redis迭代器scan和hscan命令
    本篇内容介绍了“怎么使用redis迭代器scan和hscan命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2022-10-19
  • Redis中用scan替换keys的方法
    我们都知道查找 Redis 的键时,可以使用 keys pattern,但当 key 太多时,keys 命令的效率就很低,如果在线上直接使用,甚至可能发生生产事故,这时候,我们不妨使用 scan 命令。SC...
    99+
    2022-10-18
  • Redis中KEYS和SCAN命令的区别和建议
    当我们需要遍历Redis所有key或者指定模式的key时,首先想到的是KEYS命令,例如:keys * 相当于关系型数据库里的select *,因此在一个生产环境中的大Redis数据库中使用这个命令可...
    99+
    2022-10-18
  • redis中keys与scan命令的区别有哪些
    这篇文章将为大家详细讲解有关redis中keys与scan命令的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。redis keys和scan的区别redis的keys命令,通常在用来删除相关ke...
    99+
    2023-06-14
  • redis中链表命令的使用方法
    这篇文章将为大家详细讲解有关redis中链表命令的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概述:list是一个链表结构,主要功能是push、pop、获取...
    99+
    2022-10-18
  • 怎么在Redis中使用SCAN命令实现有限保证
    这篇文章将为大家详细讲解有关怎么在Redis中使用SCAN命令实现有限保证,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SCAN命令可以为用户保证:从完整遍...
    99+
    2022-10-18
  • redis执行redis命令的方法教程
    Redis 命令 Redis 命令用于在 redis 服务上执行操作。所以我们必须要启动Redis服务程序,也就是redis安装目录下的redis-server.exe,你可以双击执行,也可以打开cmd窗口...
    99+
    2022-06-04
    命令 方法 教程
  • CentOS系统中使用yum命令安装redis的方法
    在linux CentOS系统中使用yum命令安装redis报错: [root@localhost install]# yum install redis Loaded plugins: fastestmirror Set...
    99+
    2022-05-23
    CentOS yum redis
  • Redis禁用命令、危险命令及规避方法
    FLUSHALL FLUSHDB 命令会清空数据,而且从不失败,对于线上集群非常危险。 KEYS * 命令,当数据规模较大时使用,会严重影响Redis性能,也非常危险。 如果从根本上规避这些风险呢? Red...
    99+
    2022-06-04
    命令 危险 方法
  • Redis命令行工具有哪些使用方法
    这篇文章主要介绍“Redis命令行工具有哪些使用方法”,在日常操作中,相信很多人在Redis命令行工具有哪些使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis命令行工具有哪些使用方法”的疑惑有所...
    99+
    2023-06-04
  • Linux中rz命令和sz命令的使用方法
    这篇文章主要介绍“Linux中rz命令和sz命令的使用方法”,在日常操作中,相信很多人在Linux中rz命令和sz命令的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux中rz命令和sz命令的使...
    99+
    2023-06-09
  • linux中ls命令的使用方法
    linux中ls命令的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进...
    99+
    2023-06-09
  • linux中mkdir命令的使用方法
    linux中mkdir命令的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名...
    99+
    2023-06-09
  • linux中top命令的使用方法
    本篇文章给大家分享的是有关linux中top命令的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。简介top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进...
    99+
    2023-06-09
  • Linux中tput命令的使用方法
    这篇文章主要介绍“Linux中tput命令的使用方法”,在日常操作中,相信很多人在Linux中tput命令的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux中tput命令的使用方法”的疑惑有所...
    99+
    2023-06-12
  • linux中head命令的使用方法
    这篇文章主要讲解了“linux中head命令的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中head命令的使用方法”吧!1.命令格式:head [参数]... [文件]....
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作