Python 常规操作 Redis(不容错过)
off999 2024-11-04 13:16 46 浏览 0 评论
今日分享主题:Python 常规操作 redis 的内容
Part1:五种数据类型
Redis 支持5种数据类型:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)
1.String 字符串数据类型
String 是最常用的一种数据类型,普通的 key/value 存储都可以归为此类,即可以完全实现目前 Memcached 的功能,并且效率更高。
还可以享受 Redis 的定时持久化,操作日志及 Replication 等功能。
常用命令:
- get
- set
- incr
- decr
- mget
2.Hash哈希数据类型
Redis hash 是一个键值(key => value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
常用命令:
- hget
- hset
- hgetall
应用场景:
举个实例来描述下 hash 的应用场景,比如我们要存储一个用户信息对象数据,就可以使用 Redis hash。
3.List数据类型
Redis list 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
常用命令:
- lpush(添加左边元素)
- rpush(添加右边元素)
- lpop(移除左边第一个元素)
- rpop(移除右边第一个元素)
- lrange(获取列表片段,LRANGE key start stop)
应用场景:
Redis list 的应用场景非常多,也是 Redis 最重要的数据结构之一。
比如 twitter 的关注列表,粉丝列表等都可以用 Redis 的 list 结构来实现。
4.Set 数据类型
Redis set 是 string 类型的无序集合。集合是通过 hashtable 实现的,概念和数学中的集合基本类似,可以交集,并集,差集等等,set中的元素是没有顺序的。
常用命令:
- sadd
- spop
- smembers
- sunion
应用场景:
Redis set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的。
当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。
5.zset 有序集合数据类型
Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。
zadd 命令:添加元素到集合,元素在集合中存在则更新对应score。
常用命令:
- zadd
- zrange
- zrem
- zcard
使用场景:
Redis sorted set 的使用场景与 set 类似,区别是 set 不是自动有序的,而 sorted set 可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。
Part2:代码内容
import redis
#使用连接池方式连接redis
redis_pool=redis.ConnectionPool(host="127.0.0.1",port=6379,db=15,decode_responses=True)
redis_conn=redis.Redis(connection_pool=redis_pool)
#2.1 String字符串
#字符串数据类型的相关命令用于管理 redis 字符串值
#设置指定 key 的值
redis_conn.set("name","tony")
redis_conn.set("age",33)
redis_conn.set('strtest','{"addr":"北京good","phone":13300000000}')
#Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值
redis_conn.setnx("job","computer")
#获取指定 key 的值
print(redis_conn.get('name'))
print(redis_conn.get('age'))
print(redis_conn.get('strtest'))
#Incr 命令将 key 中储存的数字值增一
# 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作
# 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
print(redis_conn.incr("age"))
# Decr 命令将 key 中储存的数字值减一
# 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作
# 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
print(redis_conn.decr("age"))
print(redis_conn.get("job"))
#Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误
print(redis_conn.strlen("strtest"))
print("*"*10)
#2.2 Hash哈希
#hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
#Hmget 命令用于返回哈希表中,一个或多个给定字段的值
redis_conn.hset('myhash','f1','v1')
redis_conn.hset('myhash','f2','v2')
#Hget 命令用于返回哈希表中指定字段的值,如果给定的字段或 key 不存在时,返回 None
print(redis_conn.hget("myhash","testhash"))
print(redis_conn.hmget('myhash','f1','f2'))
#Hgetall 命令用于返回哈希表中,所有的字段和值
redis_conn.hset("hashstrtest","student2",'idcard:123456,sex:man,age:33')
print(redis_conn.hgetall("hashstrtest"))
# Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中
redis_conn.hmset('hashjsontest', {'student3': '{"perform": "game","num":123456789}'})
redis_conn.hmset('jsontest',{"id":1,"name":"张三丰","birth":"2000-07-07","age":17,"clazz":"一年1班","createTm":1504856483000})
print(redis_conn.hgetall("hashjsontest"))
print(redis_conn.hgetall("jsontest"))
#获取所有哈希表中的字段
print(redis_conn.hkeys("jsontest"))
#Hvals 命令返回哈希表所有的值
print(redis_conn.hvals("jsontest"))
#获取哈希表中字段的数量
print(redis_conn.hlen("jsontest"))
print("*"*20)
#2.3 List列表
# 是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边
# 将一个或多个值插入到列表头部
redis_conn.lpush("teachkey","redis")
redis_conn.lpush("teachkey","mysql")
redis_conn.lpush("teachkey","mongodb")
redis_conn.lpush("teachkey","mq")
redis_conn.lpush("teachkey","job")
#获取列表指定范围内的元素
print(redis_conn.lrange('teachkey',1,10))
#Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
#列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回None
print(redis_conn.lindex("teachkey",-1))
#获取列表长度
print(redis_conn.llen("teachkey"))
#移出并获取列表的第一个元素
print(redis_conn.lpop("teachkey"))
#将一个或多个值插入到列表头部
print(redis_conn.lpush("teachkey","goodjob"))
print(redis_conn.lrange('teachkey',1,10))
print("*"*30)
#2.4 Set集合
#Set是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
#向集合添加一个或多个成员
redis_conn.sadd('lovekey','booking')
redis_conn.sadd('lovekey','booking')
redis_conn.sadd('lovekey','eating')
redis_conn.sadd('lovekey','runing')
redis_conn.sadd('lovekey','jumping','fishing')
redis_conn.sadd("dokey","working","thinking","runing","doing","fishing")
#Scard 命令返回集合中元素的数量,当集合 key 不存在时,返回 0
print(redis_conn.scard("lovekey"))
#Sdiff 命令返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集
print(redis_conn.sdiff("lovekey","dokey"))
#Sinter 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集
print(redis_conn.sinter("lovekey","dokey"))
#Sismember 命令判断成员元素是否是集合的成员
print(redis_conn.sismember("lovekey","eating"))
#Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合
print(redis_conn.smembers("dokey"))
#Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素
print(redis_conn.spop("dokey",2))
#Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略,被成功移除的元素的数量,不包括被忽略的元素
print(redis_conn.srem("dokey","ok","isok","doing"))
#Sunion 命令返回给定集合的并集。不存在的集合 key 被视为空集
print(redis_conn.sunion("dokey","lovekey"))
#Sunionstore 命令将给定集合的并集存储在指定的集合 destination 中。如果 destination 已经存在,则将其覆盖,结果集中的元素数量
print(redis_conn.sunionstore("destkey","dokey","lovekey"))
print("*"*40)
#2.5 sorted set有序集合
# 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员
# 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序
# 有序集合的成员是唯一的,但分数(score)却可以重复
dict1=dict(lenovo=1)
redis_conn.zadd('computerkey',dict1)
dict2=dict(dell=2)
dict3=dict(asus=2)
redis_conn.zadd('computerkey',dict2)
redis_conn.zadd('computerkey',dict3)
dict4=dict(asustest=4,goodjob=3)
redis_conn.zadd('computerkey',dict4)
#通过索引区间返回有序集合指定区间内的成员
print(redis_conn.zrange('computerkey',0,10))
#Zcard 命令用于计算集合中元素的数量
print(redis_conn.zcard("computerkey"))
#Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil
print(redis_conn.zscore("computerkey","dell"))
#Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列
print(redis_conn.zrank("computerkey","goodjob"))
# Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误, 当key存在时,返回被成功移除的成员的数量,不包括被忽略的成员
print(redis_conn.zrem("computerkey","goodjob"))
Part3:控制台输出内容
tony
33
{"addr":"北京good","phone":13300000000}
34
33
computer
41None
['v1', 'v2']
{'student2': 'idcard:123456,sex:man,age:33'}
{'student3': '{"perform": "game","num":123456789}'}
{'id': '1', 'name': '张三丰', 'birth': '2000-07-07', 'age': '17', 'clazz': '一年1班', 'createTm': '1504856483000'}
['id', 'name', 'birth', 'age', 'clazz', 'createTm']
['1', '张三丰', '2000-07-07', '17', '一年1班', '1504856483000']
6['mq', 'mongodb', 'mysql', 'redis']
redis
5
job
5
['mq', 'mongodb', 'mysql', 'redis']5
{'eating', 'booking', 'jumping'}
{'fishing', 'runing'}
True
{'fishing', 'runing', 'doing', 'thinking', 'working'}
['thinking', 'working']
1
{'jumping', 'fishing', 'runing', 'booking', 'eating'}
5['lenovo', 'asus', 'dell', 'goodjob', 'asustest']
5
2.0
3
1相关推荐
- diskdigger官网入口(diskinfo官网)
-
打开LaunchCenterPro,创建一个叫Omnifocus的操作组,然后再往这个操作组添加新的操作。如果你要在Omnifocus创建新收件箱项,添加URL到LaunchCenter...
- 最新英特尔处理器排名(最新英特尔处理器排名第几)
-
一、英特尔酷睿i7670。这款英特尔CPU采用的是超频新芯,最大程度的提升处理器的超频能力。二、英特尔酷睿i74790kCPU:这款CPU采用22纳米制程工艺的框架,它的默认频率是4.0到4.4Ghz...
-
- nvidia旧版本驱动下载(nvidia新版本驱动)
-
没法装,n卡本身不具备装旧版驱动的功能一、首先在本机电脑内鼠标左键双击打开“驱动人生”(若电脑上无此软件,可以在各大软件市场内下载安装)。二、打开驱动人生软件后,点击“立即体检”进行驱动扫描。三、驱动扫描完成后,点击显卡右边的“箭头”打开驱...
-
2025-12-18 20:51 off999
- 怎么解开别人的wifi密码(如何解开别人的wifi密码)
-
别人的无线网络密码是很不容易破解的,如果人家是愿意分享的,可以在手机上下载"Wifi万能钥匙"注册登陆成功后连接其无线wifi1、以现有的技术手段,是没有办法破解WPA的加密方式(现在...
-
- 电脑突然关机(电脑突然关机像断电了一样 再也打不开)
-
如果是插电源的电脑开着突然就关机了,可能是线路接触不良或者是没电了,导致的开着就关机了,如果是你的电脑是充电的那一种可能是你的电池的电量用完了或者是电池的线路接触不良导致的开着突然就关机了,你可以排查一下线路。1、如果你使用的是笔记本电脑,...
-
2025-12-18 19:51 off999
- win7重装系统一直反复重启(win7重装系统无限重启)
-
WIN7的系统装重复了,可以将原安装的系统删除,方法如下:1、如果以前的windows是安装在C盘上的话,点击桌面上的计算机,选中C盘,鼠标右键选择属性;2、点磁盘清理;3、点清理系统文件,点确定;4...
- 电脑如何格式化sd卡(电脑格式化sd卡,提示写有保护)
-
要在电脑上格式化SD卡,可以按照以下步骤:1.将SD卡插入计算机的SD卡读卡器中。2.打开“我的电脑”或“此电脑”,找到SD卡在计算机上的驱动器号(比如E盘)。3.右键单击SD卡驱动器,选择“格...
- 系统检测不到机械硬盘(系统检测不到机械硬盘怎么办)
-
第一,我们需要确认一下机械硬盘是否连接正常。可以检查一下硬盘的电源线和数据线是否插紧,是否松动或者断开。如果发现有松动或者断开的情况,可以重新插上并确保插紧。如果硬盘连接正常,但电脑仍然无法读取,那么...
- 路由器管理平台登录(路由器管理平台登录网址)
-
路由器的用户登录入口地址是:tplogin.cn电信运营商定制款登录地址是:192.168.2.1或者192.168.8.12、华为(容易)路由器华为路由器跟荣耀路由器只有IP地址,没有域名,它是...
- directx修复(DirectX修复工具官网下载)
-
使用DirectX修复工具很简单。首先需要下载并安装工具,然后打开工具并按照界面提示进行操作即可。工具的作用是自动检测系统中可能存在的DirectX问题,并尝试修复它们,从而保证计算机游戏等应用程序的...
-
- 网易邮箱app官方下载安装(网易邮箱163)
-
有些东西调用外部下载软件(如迅雷)是无法下载的,有时下载后不能正常打开,请尝试:在所要下载的文件上点击右键,选择“目标另存为”,也许就能成功下载。下载从网易163邮箱发来的云附件的步骤如下:1.成功登录网易邮箱后,我们点击页面左上角的“收件...
-
2025-12-18 16:51 off999
- 产品密钥是什么意思(产品密钥有什么用处)
-
产品密钥是产品授权的证明,有了它才能使用这个产品。软件商在生产自己产品时,为每个产品输入一个序列号(注册号/密钥),如“KH2J9-PC326-T44D4-39H6V-TVPBY”,用户要通过这个序列...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
