使用 Python 获取 Redis 数据库中的所有键

news2025/1/17 8:55:04

如果你了解 JSON,就会熟悉 Redis 设计系统。 它使用键值结构和分布式内存方法来实现弹性数据库。

哈希、列表、集合、排序集合、字符串、JSON 和流是 Redis 支持的众多数据结构之一。 这个开源数据库支持不同的语言,包括 Python,如果您正在使用它开发后端系统,一些模块和包可以提供帮助。

您经常对数据库执行的许多操作之一是检索数据,在像 Redis 这样的数据库中,键对于实现此类操作很重要。

本文将讨论获取 Redis 数据库中的所有键。


使用 keys() 获取 Redis 数据库中的所有键

要使用 redis,我们需要安装它; 您可以查看 Redis 下载页面以了解操作方法。 对于 Linux 和 macOS 用户来说,这要容易得多; 但是,对于 Windows 用户,您可能必须使用适用于 Linux 的 Windows 子系统 (WSL2),并且您可以按照他们的说明视频指南进行操作。

假设您已经设置了 Redis 数据库,我们将安装 redis 包,它提供对 Redis 数据库的客户端访问。 要安装它,我们将使用 pip 命令。

pip install redis

输出:

Collecting redis
  Downloading redis-4.3.4-py3-none-any.whl (246 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 246.2/246.2 kB 794.4 kB/s eta 0:00:00
Collecting deprecated>=1.2.3
  Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)
Collecting async-timeout>=4.0.2
  Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting packaging>=20.4
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 kB 1.9 MB/s eta 0:00:00
Collecting wrapt<2,>=1.10
  Downloading wrapt-1.14.1-cp310-cp310-win_amd64.whl (35 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
  Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 624.8 kB/s eta 0:00:00
Installing collected packages: wrapt, pyparsing, async-timeout, packaging, deprecated, redis
Successfully installed async-timeout-4.0.2 deprecated-1.2.13 packaging-21.3 pyparsing-3.0.9 redis-4.3.4 wrapt-1.14.1

因此,redis 包使用 wrapt、pyparsing、async-timeout、打包和不推荐使用的模块来为其模块提供支持。

要使用 redis 包,我们需要导入它。

import redis

进入正题,我们可以使用redis模块提供的keys()方法来访问并获取其中的所有key。

key() 方法从给定的 Redis 数据库返回一个与在其参数中传递的模式相匹配的键列表。 如果不传递任何参数,则有一个默认模式,即*,表示所有键。

为了展示工作中的方法,我们使用 +Key 按钮或以下代码手动预填充了别名 Temp 和一些键的 redis 数据库。

import redis

redisHost = 'localhost'
redisPort = 6379
redisDecodeRes = True

r = redis.StrictRedis(
            host=redisHost,
            port=redisPort,
            decode_responses=redisDecodeRes
        )

r.set("ConnectionPool", "Ox1212af34w3141")

上面的代码导致键 ConnectionPool 被添加到具有相应值的 Temp 数据库中。

set() 方法将键值对应用于数据库,而 StrictRedis() 方法创建一个 Redis 连接对象,使我们能够访问数据库。

要通过 GUI 显示数据库(使用别名 Temp)及其密钥,我们可以使用 RedisInsight 应用程序,如图所示。

RedisInsight

手动向数据库中添加了 11 个密钥以测试 key() 方法。

现在,对于 key() 方法,我们必须使用 StrictRedis() 方法创建一个 Redis 连接对象来访问键。 host、port 和 decode_responses 参数被传递来定义连接的参数。

host 和 port 定义主机名和端口号,decode_responses 定义将传递的数据解码为我们可以轻松使用的 Python 字符串。 keys() 方法然后访问所有可用的键,因为没有传递任何参数。

import redis

redisHost = 'localhost'
redisPort = 6379
redisDecodeRes = True

r = redis.StrictRedis(
    host=redisHost,
    port=redisPort,
    decode_responses=redisDecodeRes,
    db=0
    )

print(r.keys())

输出:

['bar-two', 'information', 'bar-one', 'details', 'foo', 'jinku', 'bar', 'User-One', 'delft', 'bar-three', 'ConnectionPool']

我们在 Temp 数据库中有一个所有键的列表,我们可以使用它。

如果我们有所需的键模式,我们可以将其作为参数传递。 让我们列出所有以 bar 开头的键。

print(r.keys(pattern="bar*"))

输出:

['bar-two', 'bar-one', 'bar', 'bar-three']

使用 scan_iter() 获取 Redis 数据库中的所有键

对于大型数据库,scan_iter() 允许我们在 Python 应用程序中更好地管理数据。 此外,key() 方法会阻塞服务器并阻止其他使用操作,而对于 scan_iter(),其基于批处理的操作允许其他使用操作。

尽管 keys() 可能更快,但它对于多个基于请求的系统来说并不是很好。

现在,让我们看看它的实际效果。

import redis

redisHost = 'localhost'
redisPort = 6379
redisDecodeRes = True

try:
    r = redis.StrictRedis(
        host=redisHost,
        port=redisPort,
        decode_responses=redisDecodeRes,
        db=0
    )
    for key in r.scan_iter(match="bar*"):
        print(key)
except Exception as e:
    print(e)

输出:

bar-three
bar-one
bar-two
bar

当我们尝试使用数据库时,使用 try/except 有助于处理连接问题。 使用 StrictRedis() 连接后,我们使用 match 参数来定义我们正在寻找的键模式,并循环遍历结果以给出键。


使用 zip_longest 获取 Redis 数据库中的所有键

正如我们所说,对于具有大量键的大型数据库,scan_iter() 方法更好,但我们可以通过按指定数量的批次检索键来进一步改进它,以更好地管理结果。

要创建批处理,我们需要 itertools 模块,它提供可用于不同情况的不同迭代器(或方法)。 在 itertools 模块中,我们有 zip_longest 方法,它返回一个 zip_longest 对象,其 .next() 方法返回一个元组并聚合传递给它的 iterable 中的元素。

我们可以使用 zip_longest() 方法创建一个函数,该函数根据传递的参数创建一批指定数量的键。 比如我们创建一批2,可以用于很多情况。

import redis
from itertools import zip_longest

redisHost = 'localhost'
redisPort = 6379
redisDecodeRes = True

try:
    r = redis.StrictRedis(
        host=redisHost,
        port=redisPort,
        decode_responses=redisDecodeRes,
        db=0
    )

    def batch(iterable, num):
        initIter = [iter(iterable)] * num
        return zip_longest(*initIter)

    for keyBatch in batch(r.scan_iter('bar*'), 2):
        print(keyBatch)
except Exception as e:
    print(e)

输出:

('bar-three', 'bar-one')
('bar-two', 'bar')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见前端基础面试题(HTML,CSS,JS)(三)

JS 中如何进行数据类型的转换&#xff1f; 类型转换可以分为两种&#xff0c;隐性转换和显性转换 显性转换 主要分为三大类&#xff1a;数值类型、字符串类型、布尔类型 三大类的原始类型值的转换规则我就不一一列举了 数值类型&#xff08;引用类型转换&#xff09; Numbe…

攻防世界-reverse-no-strings-attached

题目描述 菜鸡听说有的程序运行就能拿Flag&#xff1f; 下载文件后&#xff0c;看下文件信息&#xff0c;是一个可执行程序 思路分析 逆向出代码&#xff0c;发现关键点在这里 这里有个解密函数&#xff0c;解密出v2和我们的输入v1进行对比&#xff0c;能够匹配上就OK&…

IO流知识点+(文件上传、下载+压缩文件等)

一 常见IO介绍 1 根据数据流向分类 输入流&#xff1a;把数据从其他设备读取到内存&#xff0c;以InputStream,Reader结尾 输出流&#xff1a;把数据从内存中写出到其他设备&#xff0c;以OutputStream、Writer结尾 2 根据数据类型分类 字节流&#xff1a;已字节为单位&#xf…

MATLAB R2022a 安装教程(超详细!附下载链接)

目录 1、Matlab下载2、安装3、破解 1、Matlab下载 感谢博主tianyvHon的分享&#xff01; 下载地址&#xff1a;https://pan.baidu.com/s/1iKaBGrWEFX13rG74K7ywRQ#list/path%2F 提取码&#xff1a;uicz 2、安装 下载完成后&#xff0c;右键点击R2022a_Windows.iso文件&#…

06-微信小程序-注册程序-场景值

06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例&#xff0c;绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…

【数据结构】栈和队列常见题目

文章目录 有效的括号用队列实现栈两个队列实现栈一个队列实现栈用栈实现队列设计循环队列最小栈栈的压入&弹出序列逆波兰表达式队列:先进先出 栈:后进先出 有效的括号 https://leetcode.cn/problems/valid-parentheses/ class Solution {public:bool isValid(string s) {…

YOLOv5、v8改进:引入SKAttention注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 论文链接&#xff1a;https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣&#xff0c;从字面的意思可以理解&…

跨境电商ERP源码大揭秘,让你少走弯路

本文将深入介绍跨境电商ERP源码的重要性以及如何选择和应用它们&#xff0c;让你的电商业务更高效、顺畅。 跨境电商ERP源码的重要性 提升管理效率 跨境电商运营面临着众多挑战&#xff0c;如订单管理、库存追踪和财务报告等。跨境电商ERP源码能够集成这些功能&#xff0c;帮…

《算法竞赛·快冲300题》每日一题:“树与排列”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 树…

Java云原生框架Quarkus初探

Java云原生框架Quarkus初探 Quarkus 介绍 Quarkus 是一个云原生&#xff0c;容器优先的Java应用框架&#xff0c;它号称是超音速和亚原子的框架&#xff0c;主要特点是构建速度、启动速度快和占用资源少等特点。它为OpenJDK HotSpot和GraalVM量身定制&#xff0c; 根据Java库和…

table表头颜色 element plus

原图 预期 css :deep(.el-table__header) {background-color: #F5F7FA;} :deep(.el-table tr) {background-color: rgba(0,0,0,0);} :deep(.el-table th.el-table__cell) {background-color: rgba(0,0,0,0);}

飞机打方块(一)菜单界面制作

一、创建项目 修改配置 新建anim&#xff0c;Prefabs&#xff0c;Scene&#xff0c;Script文件夹分别用于存放动画&#xff0c;预制资源&#xff0c;场景&#xff0c;脚本 新建场景和脚本&#xff0c; 1.游戏名称 新建title节点并修改属性&#xff1a; 2.开始游戏按钮 1.新建…

浙大mem项目备考上岸的三大“顽疾”

大家好&#xff01;不知道至今为止你是否已经在浙大mem项目的备考路上&#xff0c;随着今年提前批面试结束&#xff0c;相信有一部分考生已经获得了“优秀”资格&#xff0c;而有一部分考生则还没来得及申请&#xff0c;无论是哪种情况杭州达立易考教育都建议大家坚持自己的备考…

我能“C”——实用的调试技巧

什么是bug&#xff1f; 调试是什么&#xff1f;有多重要&#xff1f; debug和release的介绍。 windows环境调试介绍。 一些调试的实例。 如何写出好&#xff08;易于调试&#xff09;的代码。 编程常见的错误。 1.什么是bug&#xff1f; 世界上第一个bug是程序员赫柏发现的。 …

CSS和AJAX阶段学习记录

1、AJAX的工作原理&#xff1a; 如图所示&#xff0c;工作原理可以分为以下几步&#xff1a; 网页中发生一个事件&#xff08;页面加载、按钮点击&#xff09; 由 JavaScript 创建 XMLHttpRequest 对象 XMLHttpRequest 对象向 web 服务器发送请求 服务器处理该请求 服务器将响应…

openpnp - 板子上最小物料封装尺寸的选择

文章目录 openpnp - 板子上最小物料封装尺寸的选择概述END openpnp - 板子上最小物料封装尺寸的选择 概述 现在设备调试完了, 用散料飞达载入物料试了一下. 0402以上贴的贴别准, 贴片流程也稳, 基本不需要手工干预. 0201可以贴, 但是由于底部相机元件视觉识别成功率不是很高…

“Spring管理JavaBean的过程及Bean的生命周期“

目录 引言1.弹簧容器2. Bean的生命周期2.1 配置javaBean2.2. 解析Bean的定义2.3 检查是否需要添加自己的功能2.4 初始化2.5 实现Aware接口2.6 扩展2.7. 销毁 3. 单例模式和原型模式3.1. 单例模式3.2. 原型模式 4. 总结 引言 Spring框架是一个非常流行的Java应用程序框架&#…

Java之抽象类

Java之抽象类 抽象类概念抽象类如何使用抽象类的特性 作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a;zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f49…

Redis持久化:RDB和AOF机制详解

目录 1.Redis持久化简介 2.RDB持久化 2.1 什么是 RDB 持久化&#xff1f; 2.2 触发方式 2.3 Redis.conf中配置RDB 2.4 RDB 更深入理解 2.5 RDB优缺点 3.AOF持久化 3.1 什么是 AOF 持久化&#xff1f; 3.2 如何实现AOF 3.3 Redis.conf中配置AOF 3.4 深入理解AOF重写 4.RDB和…

Linux命令200例:zip和unzip用于压缩和解压文件(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…