Python操作Redis(连接方式、通用操作、字符串操作、Hash操作、List操作)

Python操作Redis

目录

  • Python操作Redis
    • 普通连接
    • 连接池连接
    • 通用操作
    • 字符串操作
    • Hash操作
    • List操作

  • 安装:pip install redis

普通连接

每次连接都会创建新的连接

import redisconn = redis.Redis(host='127.0.0.1',port=6379,db=0,	# 数据库编号(Redis支持多数据库)password=None,decode_responses=True	# 自动解码为Unicode字符串 
)

连接池连接

连接池会维护一组可重用的连接,避免频繁的打开和关闭

import redisPOOL = redis.ConnectionPool(max_connections=10,host='127.0.0.1',port=6379,decode_responses=True)conn = redis.Redis(connection_pool=POOL)
conn.set('name','123')
res=conn.get('name')
print(res)	# 123
conn.close()
  • max_connections:最大连接数

通用操作

命令描述
delete(*names)删除一个或多个键
exists(name)检查键是否存在
keys(pattern='*')根据模式匹配获取键名列表
expire(name, time)设置键的过期时间(秒)
rename(src, dst)重命名键
move(name, db)将键移动到另一个数据库
randomkey()随机返回一个键名
type(name)获取键的数据类型

字符串操作

命令描述
ex过期时间(秒)
px过期时间(毫秒)
nx如果设置为True,则只有键值不存在时,当前set操作才执行
xx如果设置为True,则只有键值存在时,当前set操作才执行
getset获取值然后再取出值
mset批量添加
mget批量取出
getrange获取字符的起始位置到结束为止,索引
strlen获取字符串长度
incr自增,或增加指定数
incrbyfloat浮点自增
derc自减,和incr相反
  • set和get
# 存入键为key1,值为123
conn.set('key1', '123')
# 取出
conn.get('key1')
  • ex
# 存入键为key2,值为123,十秒后过期
conn.set('key2', '123', ex=10)
# 只是写法不同,功能相同
conn.setex('key3', 10, '123')
  • nx
# 当key4不存在时存入123,否则不存入
conn.set('key4', '123',nx=True)
# 不同写法
conn.setnx('key5', '123')
  • xx
# 当key6存在时将值替换为123,否则不会新建
conn.set('key6', '123',xx=True)
  • getset
conn.set('name','123')
print(conn.get('name'))	# 123
print(conn.getset('name','456')) # 123
print(conn.get('name')) # 456
  • getrange
conn.set('name','123')
print(conn.get('name'))
print(conn.getrange('name',1,2))
  • mset和mget
conn.mset({'name1':'张三','name2':'李四','name3':'陈五'})
names = conn.mget(['name1','name2','name3'])
print(names)
# ['张三', '李四', '陈五']
  • getrange和setrange
conn.set('key1','111')  # key1 = 111
conn.setrange('key1',2,'666')   # key1 = 11666conn.set('key2','123')  # key2 = 123
print(conn.getrange('key2',1,2))    # key2 = 23
  • strlen
conn.set('key1','111')
print(conn.strlen('key1'))  # 3
  • incr
conn.set('key1','1')
print(conn.incr('key1'))  # key1 = 2
  • incrbyfloat
conn.set('float_key', '1.5') # float_key = 1.5# 增加3.5
new_value = conn.incrbyfloat('float_key', 3.5)
print(new_value)  # 5.0

Hash操作

命令描述
hset(name, key, value)设置指定字段的值
hget(name, key)获取指定字段的值
hmget(name, keys, *args)获取一个或多个字段的值
hgetall(name)获取所有字段和值
hlen(name)获取字段数量
hkeys(name)获取所有字段
hvals(name)获取所有值
hexists(name, key)检查字段是否存在
hdel(name, *keys)删除一个或多个字段
hincrby(name, key, amount=1)字段值递增指定量
hincrbyfloat(name, key, amount=1.0)字段值递增指定浮点数量
hscan(name, cursor=0, match=None, count=None)迭代哈希表中的键值对,cursor:游标位置 默认0count:最大返回数match:匹配模式
hscan_iter(name, match=None, count=None)迭代哈希表中的键值对(返回迭代器)
  • hset
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
  • hget
conn.hset('A1','name','张三')
print(conn.hmget('A1','name'))
# ['张三']
  • hmget
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hmget('A1',['name','age']))
# ['张三', '18']
  • hgetall
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hgetall('A1'))
# {'name': '张三', 'age': '18'}
  • hlen
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hlen('A1'))
# 2
  • hkeys
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hkeys('A1'))
# ['name', 'age']
  • hvals
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
print(conn.hvals('A1'))
# ['张三', '18']
  • hexists
conn.hset('A1','name','张三')
print(conn.hexists('A1','name')) # True
print(conn.hexists('A1','age'))  # False
  • hdel
conn.hset('A1','name','张三')
conn.hset('A1','age','18')
conn.hdel('A1','name')
print(conn.hgetall('A1'))
# {'age': '18'}
  • hincrby
conn.hset('A1','age','18')
print(conn.hincrby('A1','age'))
# 19
  • hincrbyfloat
conn.hset('A1','age','18.1')
print(conn.hincrbyfloat('A1','age',0.2))
# 18.3
  • hscan
for i in range(10):conn.hset('鸡蛋盒',i,f'鸡蛋{i}')
print(conn.hscan('鸡蛋盒'))
# (0, {'0': '鸡蛋0', '1': '鸡蛋1', '2': '鸡蛋2', '3': '鸡蛋3', '4': '鸡蛋4', '5': '鸡蛋5', '6': '鸡蛋6', '7': '鸡蛋7', '8': '鸡蛋8', '9': '鸡蛋9'})
  • hscan_iter
for item in conn.hscan_iter('鸡蛋盒',count=10):print(item) # ('0', '鸡蛋0').......

List操作

命令描述
lpush(name, values)从列表左侧(头部)插入值
rpush(name, values)从列表右侧(尾部)插入值
lpop(name)从列表左侧(头部)移除并返回元素
rpop(name)从列表右侧(尾部)移除并返回元素
lpushx(name, value)仅当列表存在时,在列表左侧插入值
rpushx(name, value)仅当列表存在时,在列表右侧插入值
llen(name)获取列表长度
linsert(name, where, refvalue, value)在指定值前或后插入新值
lset(name, index, value)设置指定索引位置的值
lrem(name, value, num)移除列表中与给定值相等的元素
lindex(name, index)获取指定索引位置的元素值
lrange(name, start, end)获取指定范围内的元素值列表
ltrim(name, start, end)保留指定范围内的元素,移除其他元素
rpoplpush(src, dst)从一个列表右侧弹出元素并插入另一个列表左侧
blpop(keys, timeout)从多个列表的左侧弹出元素(阻塞式)timeout:阻塞超时时间
brpop(keys, timeout)从多个列表的右侧弹出元素(阻塞式)
brpoplpush(src, dst, timeout=0)从一个列表右侧弹出元素并插入另一个列表左侧(阻塞式)
  • lpush和rpush
conn.lpush('names','张三')
conn.lpush('names','李四')
# 李四 张三conn.rpush('names','张三')
conn.rpush('names','李四')
# 张三 李四
  • lpop和rpop
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.lpop('names'))   # 李四conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.rpop('names'))   # 张三
  • lpushx和rpushx
conn.lpush('names','张三')
conn.lpushx('names','李四')
print(conn.lpop('names'))   # 李四conn.lpushx('names','李四') # names为空,不会存入李四
conn.lpush('names','张三')
print(conn.rpop('names'))   # 张三
  • llen
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.llen('names'))   # 2
  • linsert
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.linsert('names','before','张三','陈五'))for i in range(conn.llen('names')):print(conn.lpop('names'))
# 李四 陈五 张三conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.linsert('names','after','张三','陈五'))for i in range(conn.llen('names')):print(conn.lpop('names'))
# 李四 张三 陈五
  • lset
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lset('names','0','陈五')for i in range(conn.llen('names')):print(conn.lpop('names'))
# 陈五 张三
  • lrem
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lrem('names','0','李四')for i in range(conn.llen('names')):print(conn.lpop('names'))
# 张三
  • lindex
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.lindex('names','0'))
# 李四
  • lrange
conn.lpush('names','张三')
conn.lpush('names','李四')
print(conn.lrange('names','0','100'))
# 超过索引不取,因此输出:['李四', '张三']
  • ltrim
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
print(conn.ltrim('names','0','1'))for i in range(conn.llen('names')):print(conn.lpop('names'))
# 陈五 李四
  • rpoplpush
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
conn.rpoplpush('names','names2')for i in range(conn.llen('names2')):print(conn.lpop('names2')) # 张三
# 此时张三在列表names2中
print('---------')
for i in range(conn.llen('names')):print(conn.lpop('names'))
# 陈五 李四
  • blpop和brpop
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
conn.blpop('names')
conn.brpop('names')for i in range(conn.llen('names')):print(conn.lpop('names'))
# 李四
  • brpoplpush
conn.lpush('names','张三')
conn.lpush('names','李四')
conn.lpush('names','陈五')
conn.brpoplpush('names','names2')for i in range(conn.llen('names')):print(conn.lpop('names'))
# 陈五 李四
print('-----------')
for i in range(conn.llen('names2')):print(conn.lpop('names2'))
# 张三

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

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

相关文章

SQL进阶(六):通关题:制作一个活动日历

目录 通关题&#xff1a;用 SQL 制作一个活动日历任务 1&#xff1a; 制作一个日历Q1: 在 2023 年当中&#xff0c;星期 2 出现的次数和星期 5 出现的次数的关系是&#xff1f;&#xff08;选择 > 或 < 或 &#xff09;Q2: 在 2023 年每个月的5号&#xff0c;10号&#x…

当CV遇上transformer(三)Clip模型及源码分析

当CV遇上transformer(三)Clip模型及源码分析 2020年10月&#xff0c;Dosovitskiy首次将纯Transformer的网络结构应用于图像分类任务中(ViT)&#xff0c;并取得了当时最优的分类效果&#xff0c;其研究成果是Transformer完全替代标准卷积的首次尝试。随着谷歌提出ViT之后&#…

Python 全栈体系【四阶】(四十五)

第五章 深度学习 十、生成对抗网络&#xff08;GAN&#xff09; 1. 图像生成技术概述 1.1 什么是图像生成技术 图像生成技术是指利用机器学习或深度学习等人工智能技术&#xff0c;通过训练模型来生成逼真的图像。这些技术可以根据给定的输入&#xff0c;生成与真实图像相似…

反序列化漏洞【1】

1.不安全的反序列化漏洞介绍 序列化&#xff1a;将对象转换成字符串&#xff0c;目的是方便传输&#xff0c;关键词serialize a代表数组&#xff0c;数组里有三个元素&#xff0c;第一个元素下标为0&#xff0c;长度为7&#xff0c;内容为porsche&#xff1b;第二个元素下标为1…

GPT-4o API 全新版本发布:提升性能,增加性价比

5月13日&#xff0c;OpenAI 发布了全新ChatGPT模型 GPT-4o&#xff0c;它在响应速度和多媒体理解上都有显著提升。在这篇文章中&#xff0c;我们将介绍 GPT-4o 的主要特点及其 API 集成方式。 什么是 GPT-4o&#xff1f; GPT-4o 是 OpenAI 于5月13日发布的最新多模态 AI 模型…

【简单介绍下在Ubuntu中如何设置中文输入法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

PgMP考试难度大吗?社会认可怎么样?

对于已经在职场摸爬滚打多年&#xff0c;或者对项目和项目集管理具有极高兴趣和追求的你来说&#xff0c;一定听说过PgMP&#xff08;项目集管理专业人士&#xff09;这个国际认证。那么PgMP很难考吗&#xff1f; 免费送备考资料。联系我们&#xff1a;18938656370 一、PgMP考…

国产化数据库_金仓_Linux版Docker版部署过程及简单使用

国产化数据库金仓Linux版部署过程 文档参考&#xff1a;https://help.kingbase.com.cn/v8/install-updata/install-linux/install-linux-3.html#id12 以下安装是在Centos7系统下进行 0.安装包准备 找到你的操作系统对应的平台所支持的软件包下载&#xff0c;我这里下载的是x…

react的多级路由定义

在写实验室项目的时候&#xff0c;有一个需求&#xff0c;在二级路由页面点击按钮&#xff0c;跳转到详情列表页面&#xff0c;同时三级路由不用在导航栏显示&#xff0c;效果图如下&#xff1a; 前期的尝试&#xff1a; 在route,js文件这样定义的&#xff1a; {path: music,…

mysql权限体系

提示&#xff1a;根据课程视频总结知识点------2024.05.15 文章目录 权限处理逻辑1、 能不能连接2、能不能执行操作 权限授予与回收1、创建用户2、授予权限3、查看权限4、回收权限5、 权限级别 账户安全管理1、用户权限设定原则2、历史文件泄密 用户权限设定原则1. 只读用户--数…

.net中的依赖注入框架Autofac

文章目录 前言1. 安装 Autofac2. 创建一个简单的控制台应用程序3. 创建组件和接口4. 多种注册方式4.1. 单例注册4.2. 生命周期范围注册4.3. 命名注册4.4. Lambda 表达式注册4.5. 泛型组件注册 5. 属性注入6. 使用多个ContainerBuilder合并注册7. 使用多个 ContainerBuilder 示例…

哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

平均工资数据分析之回归

链接: R语言实战——中国职工平均工资的变化分析——相关与回归分析 1、模型诊断和评估的方法 1. 残差分析 1、残差图 (Residual Plot)&#xff1a;用于检查残差是否存在非随机模式。理想情况下&#xff0c;残差应随机分布在零附近。 2、Q-Q 图 (Quantile-Quantile Plot)&am…

【liunx】yumvim

目录 Linux 软件包管理器 yum 关于 rzsz 注意事项 查看软件包 Linux开发工具 Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 简单vim配置 配置文件的位置 sudo提权 Linux 软件包管理器 yum 1.yum是什么&#xff1…

Transformer(2)--位置编码器

文章目录 一、嵌入表示层二、流程详解1.初始化位置编码器2.计算位置编码3.扩维&#xff0c;与输入张量匹配4.添加位置编码到输入张量上 三、完整代码 一、嵌入表示层 对于输入文本序列&#xff0c;首先通过输入嵌入层&#xff08;Input Embedding&#xff09;将每个单词转换为其…

Oracle数据库查询各表空间的占用比例

目录 1、查询各表数据记录和数据大小 2、查询数据库已有表空间的大小 3、查询某表空间下各表占用突然间的大小 1、查询各表数据记录和数据大小 select a.table_name "表名",a.num_rows "数据记录",b.total "总大小&#xff08;MB)" from us…

【前端】CSS基础(4)

文章目录 前言1、CSS常用属性1.1 文本属性1.1.1 文本对齐1.1.2 文本装饰1.1.3 文本缩进1.1.5 行高 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&…

golang http请求返回 io.ReadCloser 数据读取和编码转换为utf8 注意事项

在go语言中我们发送一个http请求后&#xff0c; 我们需要通过resp返回体中的Body对象&#xff08;是一个 io.ReadCloser对象&#xff09;来对请求返回的数据进行读取。 对于这类Reader的数据读取我们需要先定义一个byte切片, 然后通过循环来对reader中的数据进行读取&#xff…

Day_5

1. Apache ECharts Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 入门案例 快速入门&#x…

记录一下-排查免密登录过程

过程记录 2024-05-15 18:15:15 在本地机器上生成新的密钥对&#xff1a; ssh-keygen -t rsa -b 2048 -m PEM -f ~/.ssh/id_rsa_new2024-05-15 18:25:37 将新生成的公钥复制到服务器&#xff1a; ssh-copy-id -i ~/.ssh/id_rsa_new.pub xaykt10.24.17.52024-05-15 18:10:58 执…