python中redis进行模糊查询(keys()、scan()、scan_iter())

这篇具有很好参考价值的文章主要介绍了python中redis进行模糊查询(keys()、scan()、scan_iter())。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、redis模糊查询介绍

python中使用redis进行模糊查询,可以使用scan()命令模糊匹配key。

keys命令:简单粗暴,但是由于Redis是单线程,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。

scan命令: 以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强。

2、scan()介绍

2.1 scan 命令:

SCAN cursor [MATCH pattern] [COUNT count]
SCAN 命令用于迭代当前数据库中的数据库键。
SSCAN 命令用于迭代集合键中的元素。
HSCAN 命令用于迭代哈希键中的键值对。
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

2.2 SCAN 命令的基本用法:

SCAN cursor [MATCH pattern] [COUNT count]

参数解释:

  • cursor :游标位置
  • pattern:匹配的值
  • count:每次渐进的值并不是返回结果的数量,也可以理解为每次扫描的值这个 值也并不是越大越好,测试中500w数据 设置为15000时效率最好。默认值是10。

注意 :Count 参数越大,Redis 阻塞时间也会越长,需要取舍。开始不知道直接设置了Integer.MAX_VALUE 结果上线直接凉凉堵塞死。并且返回的值中会存在重复的key 且是无序的 所以要注意去重。

2.3 模糊查询通配符

Redis中keys命令进行获取key值,具体命令格式:keys pattern

redis中允许模糊查询的有3个通配符,分别是:*,?,[]

其中:

  • *:通配任意多个字符
  • ?:通配单个字符
  • []:通配括号内的某一个字符

2.4 scan()命令优缺点

优点:同样是O(N)复杂度的scan命令,支持通配查找,scan命令或者其他的scan如SSCAN ,HSCAN,ZSCAN命令,可以不用阻塞主线程,并支持游标按批次迭代返回数据,所以是比较理想的选择。keys相比scan命令优点是,keys是一次返回,而scan是需要迭代多次返回。

缺点:返回的数据有可能重复,需要我们在业务层按需要去重,scan命令的游标从0开始,也从0结束,每次返回的数据,都会返回下一次游标应该传的值,我们根据这个值,再去进行下一次的访问,如果返回的数据为空,并不代表没有数据了,只有游标返回的值是0的情况下代表结束。

3、实战演示

3.1 生成数据:

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    for i in range(100):
        s.set(f"name_{i}", f"dgw_{i}")
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

 3.2 正常查询所有的键key

示例代码1:  【直接使用keys()方法】

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    keys = s.keys()
    print(keys)
    print(len(keys))
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

示例代码2:  【根据键遍历查询所有的值】

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    for i in range(100):
        ret = s.get(f"name_{i}")
        print(ret)
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

示例代码3:【使用scan()方法】

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    keys = s.scan(count=100)  # 返回的是一个元组,默认count返回是10个
    # scan中count:向Redis提供有关每批要返回的密钥数的提示,此处要注意返回的数量
    print(keys)
    print(len(keys[1]))
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

示例代码4:【使用scan_iter()迭代方法】

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    keys = s.scan_iter()  # 返回的是一个迭代器
    count = 0
    for key in keys:
        print(key)
        count += 1
    print(count)
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

3.3 查找模糊匹配的键key

示例代码1:  【直接使用keys(),不建议这样使用】

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    keys = s.keys(pattern="name_6*")
    print(keys)
    print(len(keys))
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

  • 示例代码2: 【使用scan()方法】
from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    # keys = s.scan(match="name_6*")  # 注意:本人测试这种写法(没有加count)没有返回数据
    keys = s.scan(match="name_6*", count=100)
    print(keys)
    print(len(keys[1]))
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())

示例代码3:  【使用scan_iter()迭代方法】

from redis import StrictRedis

try:
    s = StrictRedis.from_url('redis://192.168.124.49/1')
    keys = s.scan_iter(match="name_6*")
    count = 0
    for key in keys:
        print(key)
        count += 1
    print(count)
except Exception as e:
    print(e)

python中redis进行模糊查询(keys()、scan()、scan_iter())文章来源地址https://www.toymoban.com/news/detail-467976.html

到了这里,关于python中redis进行模糊查询(keys()、scan()、scan_iter())的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux 系统查询redis中指定key值(命令)

    登上服务器之后直接输入 redis-cli 进入到127.0.0.1:6379下 在127.0.0.1:6379下,输入如下指令 auth 你的redis密码 查询所有key 指令: keys * 查询指定key值 指令: get 你的key名

    2024年02月08日
    浏览(31)
  • Redis当中的大Key如何进行处理

    本篇文章我们主要聊一下什么是Redis当中的大Key、大Key会造成什么影响、我们如何找到大key,如何删除大key. 很多铁子可能会认为大key,是这个key的值很大其实不是,而是key的value值很大一般对于下面这些我们可以称为大key. String 类型值大于10KB。 Hash、List、Set、Zset类型元素个数

    2023年04月09日
    浏览(28)
  • SpringBoot中操作Redis通过所有可能的key查询存在的key并解析为对象实体的通用方法

    SpringBoot中操作Redis的特殊操作-批量查询(通过key的集合批量查杜绝模糊搜索)、查询并解析对象list: SpringBoot中操作Redis的特殊操作-批量查询(通过key的集合批量查杜绝模糊搜索)、查询并解析对象list_霸道流氓气质的博客-CSDN博客 在上面讲操作redis中特殊操作时,对于通过key的集

    2023年04月09日
    浏览(29)
  • Mybatis Plus中使用LambdaQueryWrapper进行分页以及模糊查询对比传统XML方式进行分页

    传统的XML方式只能使用limit以及offset进行分页,通过判断name和bindState是否为空,不为空则拼接条件。 只需要在Service实现类中直接调用Mybatis Plus的方法即可进行操作。 return PageSanitationCompanyStaff类型可以得到数据的总数,你也可以通过.getRecords()方式获取List集合 这样子,我们就

    2024年02月12日
    浏览(43)
  • 微信小程序 连接云数据库(不使用云函数)进行 登录、注册、查询(包括模糊查询)快速实现 亲测可用

    当连接MySQL的时候总是出现各种各样的小问题,可以选用微信小程序自带的云数据库 注:测试号不能建立云数据库 按图中步骤来 第4步中,有两种添加方式 第一种 第二种 注意: 如果你是粘贴复制的,他会报错 非数字字符\\\"无法使用外部字符串表示法位于第1行 。这时,在第

    2023年04月20日
    浏览(46)
  • redis应用 9: Scan

    在平时线上 Redis 维护工作中,有时候需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。这里就有一个问题,如何从海量的 key 中找出满足特定前缀的 key 列表来? Redis 提供了一个简单暴力的指令 keys 用来列出所

    2024年02月10日
    浏览(24)
  • Redis- SCAN命令

    SCAN 命令被设计来替代 KEYS 命令主要是出于性能和可伸缩性的考虑。虽然 KEYS 命令在某些情况下仍然有其用途,但在处理大型数据集时,它可能会引起一些问题: KEYS 命令的问题 阻塞 : KEYS 命令在执行时会对数据库进行全面扫描以匹配给定的模式。如果数据集很大,这个操作

    2024年02月20日
    浏览(22)
  • fastadmin+python+mysql +wxbot实现万能模糊查询(和chatgpt一起完成的)

     废话不多说直接上代码: 功能,fastadmin后台管理这些机房服务器的信息,wxbot 通过/指令+任意字段的信息查询 让wxbot去数据库里查询相关的信息,在通过wx发送给你。   1.创建数据库  2.fastadmin管理界面,导入信息 3.模糊查询函数,并且做了脱敏 4.wxbot 机器人对接效果  

    2024年02月16日
    浏览(35)
  • redis scan命令导致cpu飙升

    今天下午Redis的cpu占用突然异常升高,一度占用达到了90%,触发了钉钉告警,之后又回到正常水平,跟DBA沟通,他说主要是下面这个语句的问题 这个语句的执行时长很短,只有10毫秒,主要是利用 scan 匹配redis的所有 key ,当时第一反应是有大key。但是查询这个语句匹配的key,

    2024年02月21日
    浏览(21)
  • 牛逼的python库-使用FuzzyWuzzy库进行模糊字符串匹配

    FuzzyWuzzy是一个Python库,用于模糊字符串匹配和字符串相似度计算。它基于Levenshtein距离算法,用于比较两个字符串之间的差异。 下面是FuzzyWuzzy库的一些常见用法: 导入库和模块: 使用 fuzz.ratio 计算两个字符串之间的相似度: 这会计算出两个字符串之间的相似度百分比。 使

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包