python对redis的增删查改

python对redis的增删查改

  • 安装 redis-py 库
  • 连接 Redis 服务器
    • 1. 字符串(String)
    • 2. 列表(List)
    • 3. 哈希(Hash)
    • 4. 集合(Set)
    • 5. 有序集合(Sorted Set)
    • 1. 删除键
    • 2. 从列表中删除元素
    • 3. 从哈希中删除字段
    • 4. 从集合中删除元素
    • 5. 从有序集合中删除元素
    • 1. 获取字符串
    • 2. 获取列表
    • 3. 获取哈希
    • 4. 获取集合
    • 5. 获取有序集合
    • 1. 更新字符串
    • 2. 更新列表
    • 3. 更新哈希
    • 4. 更新集合
    • 5. 更新有序集合
  • 完整示例

安装 redis-py 库

需要安装 redis-py 库,可以使用 pip 安装:

pip install redis

连接 Redis 服务器

在使用 redis-py 之前,需连接到 Redis 服务器,可使用 Redis 类来创建一个连接实例

import redis# 创建连接
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
#r = redis.StrictRedis(host='localhost',port=6379)

1. 字符串(String)

# 设置一个键值对
r.set('key1', 'value1')# 获取值
value = r.get('key1')
print(value)  # Output: value1

2. 列表(List)

# 在列表的左侧插入值
r.lpush('list1', 'item1')
r.lpush('list1', 'item2')# 在列表的右侧插入值
r.rpush('list1', 'item3')# 获取列表的所有值
values = r.lrange('list1', 0, -1)
print(values)  # Output: ['item2', 'item1', 'item3']

3. 哈希(Hash)

# 设置一个哈希的字段
r.hset('hash1', 'field1', 'value1')
r.hset('hash1', 'field2', 'value2')# 获取哈希的所有字段和值
fields_values = r.hgetall('hash1')
print(fields_values)  # Output: {'field1': 'value1', 'field2': 'value2'}

4. 集合(Set)

# 添加元素到集合
r.sadd('set1', 'item1')
r.sadd('set1', 'item2')
r.sadd('set1', 'item3')# 获取集合的所有元素
members = r.smembers('set1')
print(members)  # Output: {'item1', 'item2', 'item3'}

5. 有序集合(Sorted Set)

# 添加元素到有序集合
r.zadd('sorted_set1', {'item1': 1, 'item2': 2, 'item3': 3})# 获取有序集合的所有元素
members_scores = r.zrange('sorted_set1', 0, -1, withscores=True)
print(members_scores)  # Output: [('item1', 1.0), ('item2', 2.0), ('item3', 3.0)]

1. 删除键

# 删除键
r.delete('key1')

2. 从列表中删除元素

# 从列表中删除指定元素
r.lrem('list1', 0, 'item2')

3. 从哈希中删除字段

# 从哈希中删除字段
r.hdel('hash1', 'field1')

4. 从集合中删除元素

# 从集合中删除元素
r.srem('set1', 'item1')

5. 从有序集合中删除元素

# 从有序集合中删除元素
r.zrem('sorted_set1', 'item1')

1. 获取字符串

# 获取字符串值
value = r.get('key1')
print(value)

2. 获取列表

# 获取列表的所有值
values = r.lrange('list1', 0, -1)
print(values)

3. 获取哈希

# 获取哈希的所有字段和值
fields_values = r.hgetall('hash1')
print(fields_values)

4. 获取集合

# 获取集合的所有元素
members = r.smembers('set1')
print(members)

5. 获取有序集合

# 获取有序集合的所有元素
members_scores = r.zrange('sorted_set1', 0, -1, withscores=True)
print(members_scores)

1. 更新字符串

# 更新字符串值
r.set('key1', 'new_value')
value = r.get('key1')
print(value)  # Output: new_value

2. 更新列表

# 在列表的右侧插入新值
r.rpush('list1', 'item4')
values = r.lrange('list1', 0, -1)
print(values)  # Output: ['item2', 'item1', 'item3', 'item4']

3. 更新哈希

# 更新哈希的字段值
r.hset('hash1', 'field2', 'new_value2')
fields_values = r.hgetall('hash1')
print(fields_values)  # Output: {'field2': 'new_value2'}

4. 更新集合

集合中的元素是唯一的,不能直接更新,如果需要更新,可以先删除再插入

# 删除元素后重新插入
r.srem('set1', 'item1')
r.sadd('set1', 'new_item1')
members = r.smembers('set1')
print(members)  # Output: {'new_item1', 'item2', 'item3'}

5. 更新有序集合

有序集合中的元素也可以通过修改分数来更新

# 更新有序集合的分数
r.zadd('sorted_set1', {'item2': 4})
members_scores = r.zrange('sorted_set1', 0, -1, withscores=True)
print(members_scores)  # Output: [('item1', 1.0), ('item3', 3.0), ('item2', 4.0)]

完整示例

import redis# 创建连接
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)# 增
r.set('key1', 'value1')
r.lpush('list1', 'item1')
r.hset('hash1', 'field1', 'value1')
r.sadd('set1', 'item1')
r.zadd('sorted_set1', {'item1': 1})# 查
print(r.get('key1'))  # Output: value1
print(r.lrange('list1', 0, -1))  # Output: ['item1']
print(r.hgetall('hash1'))  # Output: {'field1': 'value1'}
print(r.smembers('set1'))  # Output: {'item1'}
print(r.zrange('sorted_set1', 0, -1, withscores=True))  # Output: [('item1', 1.0)]# 改
r.set('key1', 'new_value1')
r.rpush('list1', 'item2')
r.hset('hash1', 'field1', 'new_value1')
r.srem('set1', 'item1')
r.sadd('set1', 'new_item1')
r.zadd('sorted_set1', {'item1': 2})# 查
print(r.get('key1'))  # Output: new_value1
print(r.lrange('list1', 0, -1))  # Output: ['item1', 'item2']
print(r.hgetall('hash1'))  # Output: {'field1': 'new_value1'}
print(r.smembers('set1'))  # Output: {'new_item1'}
print(r.zrange('sorted_set1', 0, -1, withscores=True))  # Output: [('item1', 2.0)]# 删
r.delete('key1')
r.lrem('list1', 0, 'item1')
r.hdel('hash1', 'field1')
r.srem('set1', 'new_item1')
r.zrem('sorted_set1', 'item1')# 查
print(r.get('key1'))  # Output: None
print(r.lrange('list1', 0, -1))  # Output: ['item2']
print(r.hgetall('hash1'))  # Output: {}
print(r.smembers('set1'))  # Output: {}
print(r.zrange('sorted_set1', 0, -1, withscores=True))  # Output: []

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

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

相关文章

电影动画shader解析与实现

着色器代码解析 大家好!我是 [数擎AI],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:…

代码随想录算法【Day11】

150. 逆波兰表达式求值 class Solution { public:int evalRPN(vector<string>& tokens) {// 力扣修改了后台测试数据&#xff0c;需要用longlongstack<long long> st; for (int i 0; i < tokens.size(); i) {if (tokens[i] "" || tokens[i] &…

让Qt 具有多选文件夹和记忆上一次打开位置的文件对话框

最近要做一个可以多选文件夹的功能&#xff0c;在网上查阅了多个资料&#xff0c;发现github有一段代码可以实现该功能&#xff0c;于是将其收入进行改造。另外qt自带的 getExistingDirectory 和 getOpenFileNames 不具有记忆上一次打开的文件夹位置。要实现多选文件夹和记忆上…

【杂谈】-50+个生成式人工智能面试问题(一)

50个生成式人工智能面试问题 文章目录 50个生成式人工智能面试问题1、生成式人工智能面试问题与神经网络相关Q1. 什么是Transformers&#xff1f;Q2. 什么是注意力机制&#xff1f;有哪些类型的注意力机制&#xff1f;Q3. 为什么Transformer比RNN架构更好&#xff1f;Q4. Trans…

【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector&#xff5e;简单实现&#xff08;10 /100&#xff09; 【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果&#xff08;12 /100&#xff09; 上效果&#xff1a; 这个在知乎里找到的效果&…

原型模式详解与实践

在软件开发的奇妙世界里&#xff0c;我们常常面临重复创建相似对象的任务。如果每次创建都要从头开始设置各种属性和状态&#xff0c;不仅繁琐&#xff0c;还可能降低效率。原型模式就像一位神奇的魔法师&#xff0c;为我们提供了一种通过复制现有对象来创建新对象的优雅方式。…

比较procfs 、 sysctl和Netlink

procfs 文件系统和 sysctl 的使用: procfs 文件系统(/proc) procfs 文件系统是 Linux 内核向用户空间暴露内核数据结构以及配置信息的一种方式。`procfs` 的挂载点是 /proc 目录,这个目录中的文件和目录呈现内核的运行状况和配置信息。通过读写这些文件,可以查看和控制内…

【Rust自学】11.1. 编写和运行测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.1.1. 什么是测试 在Rust里一个测试就是一个函数&#xff0c;它被用于验证非测试代码的功能是否和预期一致。 在一个测试的函数体里通…

数据分析思维(八):分析方法——RFM分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…

有关Redis的相关概述

一、Redis概述 1.1 Redis简介 Redis是一个开源的高性能键值对数据库&#xff0c;使用C语言编写&#xff0c;支持多种数据结构&#xff0c;如字符串&#xff08;String&#xff09;、列表&#xff08;List&#xff09;、哈希&#xff08;Hash&#xff09;、集合&#xff08;Set…

_controller_validate

在 controller 中我们首先对所有的请求进行日志记录&#xff0c;身份校验&#xff0c;参数校验之后直接把过滤后的数据丢给 logic(serviceImpl) 。这样子一来 controller 只是充当了 路由 过滤器 的作用&#xff0c;如果之后修改 API &#xff0c;前端的请求地址不需要修改&am…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea

MyBatis面试-1

1、什么是MyBatis&#xff1f; MyBatis是一个半ORM框架(对象关系映射)。---》Hibernate全ORM框架 ---》基于JDBC封装的框架 专注于SQL语句&#xff0c;不用关心JDBC操作的其他流程 2、MyBatis有什么优点 基于SQL语句的编程&#xff0c;相对来说会更加的灵活和JDBC相比&#…

Unity:删除注册表内的项目记录

然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中&#xff0c;删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…

历代iPhone运行内存大小和电池容量信息

系列设备名称充电端口标配充电线PD快充无线充电 (W)标配充电器电池容量 (mAh)发布时间RAM运存iPhone 16iPhone 16 Pro MaxUSB Type-CUSB-C to USB-C支持25无47472024/9/108GB LPDDR5XiPhone 16 ProUSB Type-CUSB-C to USB-C支持25无35772024/9/108GB LPDDR5XiPhone 16 PlusUSB …

JAVA学习记录3

文章为个人学习记录&#xff0c;仅供参考&#xff0c;如有错误请指出。 上期说到使用记事本编写Java程序太过繁琐&#xff0c;所以我们后面都将使用IDEA进行代码的编写、编译和运行。 如何下载安装IDEA&#xff1f; 这个的下载途径也很多&#xff0c;我还是推荐去官网下载(h…

CSS——22.静态伪类(伪类是选择不同元素状态)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>静态伪类</title> </head><body><a href"#">我爱学习</a></body> </html>单击链接前的样式 左键单击&#xff08;且…

如何在 Hive SQL 中处理复杂的数据类型?

目录 一、复杂数据类型简介 二、创建表时使用复杂数据类型 三、插入数据到复杂数据类型的表 四、查询复杂数据类型

Mysql 性能优化:索引条件下推(ICP)

MySQL 索引下推&#xff08;Index Condition Pushdown&#xff0c;ICP&#xff09;是一种查询优化技术&#xff0c;旨在提高使用索引的查询效率。它是在 MySQL 5.6 中引入的&#xff0c;通过将部分 WHERE 子句的过滤条件下推到索引扫描阶段来减少不必要的回表操作&#xff0c;从…