使用 Python 获取 Redis 数据库中的所有键
如果你了解 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 redisDownloading 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.3Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)
Collecting async-timeout>=4.0.2Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting packaging>=20.4Downloading 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.10Downloading wrapt-1.14.1-cp310-cp310-win_amd64.whl (35 kB)
Collecting pyparsing!=3.0.5,>=2.0.2Downloading 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 redisredisHost = 'localhost'
redisPort = 6379
redisDecodeRes = Truer = redis.StrictRedis(host=redisHost,port=redisPort,decode_responses=redisDecodeRes)r.set("ConnectionPool", "Ox1212af34w3141")
上面的代码导致键 ConnectionPool 被添加到具有相应值的 Temp 数据库中。
set()
方法将键值对应用于数据库,而 StrictRedis()
方法创建一个 Redis 连接对象,使我们能够访问数据库。
要通过 GUI 显示数据库(使用别名 Temp)及其密钥,我们可以使用 RedisInsight 应用程序,如图所示。
手动向数据库中添加了 11 个密钥以测试 key()
方法。
现在,对于 key()
方法,我们必须使用 StrictRedis()
方法创建一个 Redis 连接对象来访问键。 host、port 和 decode_responses 参数被传递来定义连接的参数。
host 和 port 定义主机名和端口号,decode_responses 定义将传递的数据解码为我们可以轻松使用的 Python 字符串。 keys()
方法然后访问所有可用的键,因为没有传递任何参数。
import redisredisHost = 'localhost'
redisPort = 6379
redisDecodeRes = Truer = 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 redisredisHost = 'localhost'
redisPort = 6379
redisDecodeRes = Truetry: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_longestredisHost = 'localhost'
redisPort = 6379
redisDecodeRes = Truetry:r = redis.StrictRedis(host=redisHost,port=redisPort,decode_responses=redisDecodeRes,db=0)def batch(iterable, num):initIter = [iter(iterable)] * numreturn 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')
相关文章:

使用 Python 获取 Redis 数据库中的所有键
如果你了解 JSON,就会熟悉 Redis 设计系统。 它使用键值结构和分布式内存方法来实现弹性数据库。 哈希、列表、集合、排序集合、字符串、JSON 和流是 Redis 支持的众多数据结构之一。 这个开源数据库支持不同的语言,包括 Python,如果您正在使…...

C的进阶C++学习方向
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…...

【仿写框架之仿写Tomact】二、初始化阶段加载项目中所有servlet类对象
文章目录 1、自定义MyWebServlet 注解2、创建HttpServlet文件3、加载项目中的所有以.java结尾的文件4、收集项目中带有MyWebServlet 的类对象 1、自定义MyWebServlet 注解 我们知道,tomcat是依据WebServlet注解去收集所有servlet类的。 import java.lang.annotati…...

Linux实用运维脚本分享
Linux实用运维脚本分享🍃 MySQL备份 目录备份 PING查询 磁盘IO检查 性能相关 进程相关 javadump.sh 常用工具安装 常用lib库安装 系统检查脚本 sed进阶 MySQL备份 #!/bin/bashset -eUSER"backup" PASSWORD"backup" # 数据库数据目录…...

JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例
文章目录 前言JMeter 特殊组件-逻辑控制器与BeanShell PreProcessor 使用示例1. 逻辑控制器使用1.1. While Controller 使用示例1.2. 如果(If)控制器 使用示例 2. BeanShell PreProcessor 使用示例 前言 如果您觉得有用的话,记得给博主点个赞…...

时序预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测
时序预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测 目录 时序预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测 程序设计 完整…...

Ubuntu 连接海康智能相机步骤(亲测,成功读码)
ubuntu20.04下连接海康智能相机 Ubuntu 连接海康智能相机步骤(亲测,已成功读码)输出的结果 Ubuntu 连接海康智能相机步骤(亲测,已成功读码) (就是按照海康的提供的步骤和源码连接相机,流水账) 安装Ubuntu20.04安装gcc和g,IDmvs只…...

sass笔记
声明变量 通过$标识符进行命名及引用混合器 类似vue中的函数 通过 mixin标识定义 include 标识调用& 父选择器标识extend 进行继承可嵌套可导入 通过 import 文件位置’ 、进行导入 <style> //1 声明变量 $name: 15px; $color: skyblue;mixin border-radius($num) {/…...
C/C++中volatile关键字详解
1. 为什么用volatile? C/C 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C Programming Language" 对 volatile 修饰词的说明: A volatile specifier is a hint to a…...

Linux:shell脚本:基础使用(4)《正则表达式-grep工具》
正则表达式定义: 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串 正则表达式的组成: 普通字符串: 大小写字母,数字,标点符号及一些其他符号 元字符:在正则表达式中具有特殊意义的专用字符 正则表…...
如何建立单元测试
快速开始 zixun-quickstart-mk3生成的项目已经配置好了基础的BaseTest,各个测试类只需要继承BaseTest就可以开始进行单元测试的编写了。 如何进行Mock 为了保证独立性和可重复执行,所有的外部依赖都需要进行Mock,SpringTest引入了Mockito作为单测Mock组件, Mickito官方文…...
typeScript 接口和类
工具: PlayGround 接口 接口用来定义对象的结构和类型,描述对象应该具有哪些属性和方法。 它仅用于声明,而不是实现; 这对于编写可重用的代码非常有用。它可用于: 关键字是interface, 注意:它…...

这项与越来越多企业有关的行业标准,网易云信深度参与制定!
近日,由中国信息通信研究院主办的 2023 数字生态发展大会暨中国信通院“铸基计划”年中会议在北京召开。本次大会发布了中国信通院在行业数字化转型中的观察和实践,并发布了中国信通院在数字化转型领域的多项工作成果。大会定向邀请了来自通信、云计算、…...
C语言,malloc使用规范
malloc 是 C 语言中用于分配内存的函数。它的名称是“memory allocation”的缩写。malloc 是在 <stdlib.h> 头文件中定义的。 malloc 的基本语法是: void* malloc(size_t size); 其中 size_t是要分配的字节数。如果分配成功,malloc返回一个指向分配…...

广度优先遍历与最短路径(Java 实例代码源码包下载)
目录 广度优先遍历与最短路径 Java 实例代码 src/runoob/graph/ShortestPath.java 文件代码: 广度优先遍历与最短路径 广度优先遍历从某个顶点 v 出发,首先访问这个结点,并将其标记为已访问过,然后顺序访问结点v的所有未被访问…...
南大通用数据库(Gbase 8s) 创建UDR外部函数
一、在使用 date_format、from_unixtime、to_days、yearweek 函数时,Gbase 8s 数据库不支持,可以使用创建 UDR 外部函数来实现 二、登录命令控制台或者使用 navicat 连接 Gbase 数据库 这里使用 navicat ,点击新增连接选择 PostGreSql 驱动…...

步入React正殿 - State进阶
目录 扩展学习资料 State进阶知识点 状态更新扩展 shouldComponentUpdate PureComponent 为何使用不变数据【保证数据引用不会出错】 单一数据源 /src/App.js /src/components/listItem.jsx 状态提升 /src/components/navbar.jsx /src/components/listPage.jsx src/A…...

【QT+ffmpeg】QT+ffmpeg 环境搭建
1.qt下载地址 download.qt.io/archive/ 2. win10sdk 下载 https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 安装 debug工具路径 qtcreater会自动识别 调试器选择...
责任链模式解决多个ifelse问题
责任链定义 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,直到其中一个对象能够处理该请求为止。 在责任链模式中,通常有一个抽象处理者(Handler&a…...

Lnton羚通关于PyTorch的保存和加载模型基础知识
SAVE AND LOAD THE MODEL (保存和加载模型) PyTorch 模型存储学习到的参数在内部状态字典中,称为 state_dict, 他们的持久化通过 torch.save 方法。 model models.shufflenet_v2_x0_5(pretrainedTrue) torch.save(model, "../../data/ShuffleNetV2_X0.5.pth…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...

如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...