目录
介绍
常用数据结构
安装
连接
String 字符串(键值对)
List 列表
Hash 哈希
Set 集合
Zset 有序集合
Bitmap 位图
全局函数
首页 数据库 Redis 怎么使用Python操作Redis数据库

怎么使用Python操作Redis数据库

May 30, 2023 pm 07:57 PM
python redis

介绍

Redis采用ANSI C语言编写,是一个开源的Key-Value数据库,可以在内存中进行操作并支持持久化。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。内存数据库读写非常快,可达10w/s的速率,因此通常用于数据变化快、实时通讯、缓存等应用场景。但内存数据库通常要考虑机器的内存大小。

Redis提供了16个逻辑数据库(db0-db15),每个逻辑数据库都是相互独立的,在未指定情况下,默认使用的是db0数据库。在Python中连接时,可以通过指定数据库来选择第2个数据库,例如使用命令 select 2。

常用数据结构

  • String-字符串

  • List-列表

  • Hash-哈希

  • Set-集合

  • ZSet-有序集合

  • Bitmap-位图

python中我们使用redis-py库来操作Redis数据库,下面将着重介绍。

前提:需安装Redis数据库,若没安装点这里

安装

pip3 install redis
登录后复制

连接

第一种方式:普通

import redis
 
redis_conn = redis.Redis(host='127.0.0.1', port= 6379, password= 'your pw', db= 0)
登录后复制

第二种方式:连接池

import redis
 
redis_pool = redis.ConnectionPool(host='127.0.0.1', port= 6379, password= 'your pw', db= 0)
redis_conn = redis.Redis(connection_pool= redis_pool)
登录后复制

redis中字符返回值类型都是字节(bytes)类型

String 字符串(键值对)

在redis中,一个键对应一个值

1.String set 设置单个键值

set(name, value, ex=None, px=None, nx=False, xx=False)

  • ex:过期时间(秒),时间到了后redis会自动删除

  • px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可

  • nx:如果设置为True,则只有name不存在时,当前set操作才执行

  • xx:如果设置为True,则只有name存在时,当前set操作才执行

redis_conn.set('name_2', 'Zarten_2')
登录后复制

2.String get 获取单个值

v = redis_conn.get('name_1')
print(v)
登录后复制

3.String mset 设置多个键值

mset(*args, **kwargs)

redis_conn.mset(name_1= 'Zarten_1', name_2= 'Zarten_2')
登录后复制

或者

name_dict = {
    'name_4' : 'Zarten_4',
    'name_5' : 'Zarten_5'
}
redis_conn.mset(name_dict)
登录后复制

4.String mget 获取多个值

mget(keys, *args)

m = redis_conn.mget('name_1', 'name_2')
#m = redis_conn.mget(['name_1', 'name_2']) 也行
print(m)
登录后复制

怎么使用Python操作Redis数据库

5.String getset 给已有的键设置新值,并返回原有的值

getset(name, value)

当所给的键不存在时,会设置其新值,但返回值为None

v = redis_conn.getset('name_1', 'hi')
登录后复制

6.String setrange 根据索引修改某个键的value值

setrange(name, offset, value)

返回值为:修改后的字符串长度

  • name:键,所给不存在时自动添加

  • offset:偏移量,以0开始

  • value:修改的字符或字符串,字符串时以offset向后顺延

length = redis_conn.setrange('name_2', 1, 'zhihu')
print(length)
登录后复制

怎么使用Python操作Redis数据库

7.String getrange 根据索引获取某个键的部分value值

若所给的键不存在时,返回空值 b''

getrange(key, start, end)

v = redis_conn.getrange('name_4', 0, 2)
登录后复制

结果为:

怎么使用Python操作Redis数据库

8.String strlen 获取value的长度

strlen(name)

所给的键不存在时,返回值为0

length = redis_conn.strlen('name_2')
登录后复制

9.String incr int类型的value自增(自减)

同理:自减,decr(name, amount=1)

所给的键对应的值必须是整数或字符串的数值,不然会报错。默认自增幅度为1

incr(name, amount=1)

返回值为:修改后的值,int类型

redis_conn.set('num_2', 2)
#redis_conn.set('num_2', '2') 都行
 
v = redis_conn.incr('num_2')
登录后复制

10.String incrbyfloat 浮点数类型的value自增

incrbyfloat(name, amount=1.0)

返回值为:浮点数类型float

v = redis_conn.incrbyfloat('num_2')
登录后复制

11.String append value后面追加

append(key, value)

若所给的键不存在,则设置新值

返回值为修改后的字符串的长度

length = redis_conn.append('name_5', '666')
登录后复制

结果为:

怎么使用Python操作Redis数据库

List 列表

在redis中,一个键对应一个列表

12.List lpush 列表左边添加值 rpush(右边)

lpush(name, *values)

value值有多个时,从左到右依次向列表左边添加,类型可以不同

所给的键不存在时,新建一个列表

返回值:列表的大小

v = redis_conn.lpush('Zarten', 1,2,3,4,5)
#v = redis_conn.lpush('Zarten', 6)
登录后复制

怎么使用Python操作Redis数据库

13.List lpushx 键存在时,添加到列表左边 rpushx(最右边)

lpushx(name, value)

只有键存在时,才添加。若键不存在则不添加,也不新创建列表

返回值为:列表大小

v = redis_conn.lpushx('Zarten_1', 'hehe')
登录后复制

14.List llen 获取所给键的列表大小

llen(name)

v = redis_conn.llen('Zarten')
登录后复制

15.List linsert 在列表中间插入新值

linsert(name, where, refvalue, value)

  • name:键名

  • where:位置,前面(BEFORE)或后面(AFTER)

  • refvalue:指定哪个值的前后插入

  • value:插入的新值

返回值:插入后列表的长度,若返回-1,则refvalue不存在

插入前的数据:

怎么使用Python操作Redis数据库

v = redis_conn.linsert('Zarten', 'AFTER', 6, 'b')
登录后复制

插入后的数据:

怎么使用Python操作Redis数据库

16.List lset 列表中通过索引赋值

lset(name, index, value)

返回值:成功 True 否则 False

v = redis_conn.lset('Zarten', 2, 'cc')
登录后复制

17.List lindex 通过索引获取列表值

lindex(name, index)

v = redis_conn.lindex('Zarten', 2)
登录后复制

18.List lrange 列表中获取一段数据

lrange(name, start, end)

返回值:List类型的一段数据

v = redis_conn.lrange('Zarten', 2, 5)
登录后复制

19.List lpop 删除左边的第一个值 rpop(右边)

lpop(name)

返回值:被删除元素的值

v = redis_conn.rpop('Zarten')
登录后复制

20.List lrem 删除列表中N个相同的值

lrem(name, value, num=0)

  • name:键名

  • value:需删除的值

  • num:删除的个数 整数表示从左往右 负数表示从右往左 例如:2 -2

返回值:返回删除的个数

v = redis_conn.lrem('Zarten', 'hehe', -2)
登录后复制

21.List ltrim 删除列表中范围之外的所有值

ltrim(name, start, end)

返回值:成功 True

v = redis_conn.ltrim('Zarten', 5, 10)
登录后复制

22.List blpop 删除并返回列表最左边的值 brpop(最右边)

blpop(keys, timeout=0)

  • keys:给定的键

  • timeout:等待超时时间,默认为0,表示一直等待

返回值:tuple类型 形如: (键名, 删除的值) (b'Zarten', b'hehe')

v = redis_conn.blpop('Zarten')
登录后复制

23.List rpoplpush 一个列表中最右边值取出后添加到另一个列表的最左边 brpoplpush阻塞版本

rpoplpush(src, dst)

brpoplpush(src, dst, timeout=0)为rpoplpush的阻塞版本,timeout为0时,永远阻塞

返回值:取出的元素值

v = redis_conn.rpoplpush('Zarten', 'Zhihu')
登录后复制

Hash 哈希

内部存储为各个键值对

怎么使用Python操作Redis数据库

24.Hash hset 哈希中添加一个键值对

hset(name, key, value)

key存在,则修改,否则添加

返回值:返回添加成功的个数 int

v = redis_conn.hset('Zarten', 'age', 10)
登录后复制

25.Hash hmset 设置哈希中的多个键值对

hmset(name, mapping)

mapping:dict 类型

返回值:成功 True

v = redis_conn.hmset('Zarten', {'sex':1, 'tel':'123'})
登录后复制

26.Hash hmget 获取哈希中多个键值对

hmget(name, keys, *args)

返回值:值的列表 list 形如: [b'1', b'123']

v = redis_conn.hmget('Zarten', ['sex', 'tel'])
#v = redis_conn.hmget('Zarten', 'sex', 'tel') 也ok
登录后复制

27.Hash hget 获取指定key的值

hget(name, key)

v = redis_conn.hget('Zarten', 'age')
登录后复制

28.Hash hgetall 获取哈希中所有的键值对

hgetall(name)

返回值:dict类型

v = redis_conn.hgetall('Zarten')
登录后复制

29.Hash hlen 获取哈希中键值对的个数

hlen(name)

v = redis_conn.hlen('Zarten')
登录后复制

30.Hash hkeys 获取哈希中所有的键key

hkeys(name)

返回值:list类型

v = redis_conn.hkeys('Zarten')
登录后复制

31.Hash hvals 获取哈希中所有的值value

hvals(name)

返回值:list类型

v = redis_conn.hvals('Zarten')
登录后复制

32.Hash hexists 检查哈希中是否有某个键key

hexists(name, key)

返回值:有 True ;否则 False

v = redis_conn.hexists('Zarten', 'b')
登录后复制

33.Hash hdel 删除哈希中键值对(key-value)

hdel(self, name, *keys)

返回值:int 删除的个数

v = redis_conn.hdel('Zarten', 'age')
登录后复制

34.Hash hincrby 自增哈希中key对应的value值(必须整数数值类型)

hincrby(name, key, amount=1)

若所给的key不存在则创建,amount默认增加1,可以为负数

返回值:int 增加后的数值

v = redis_conn.hincrby('Zarten', 'sex', -3)
登录后复制

35.Hash hincrbyfloat 自增浮点数 同上hincrby

hincrbyfloat(name, key, amount=1.0)

36.Hash expire 设置整个键的过期时间

expire(name, time)

time:秒,时间一到,立马自动删除

v = redis_conn.expire('Zarten', 10)
登录后复制

37.Hash hscan 增量迭代获取哈希中的数据

hscan(name, cursor=0, match=None, count=None)

  • name:redis的name

  • cursor:游标(基于游标分批取获取数据)

  • match:匹配指定key,默认None 表示所有的key

  • count:每次分片最少获取个数,默认None表示采用Redis的默认分片个数

返回值:tuple 类型 ;(扫描位置,所有dict数据)

v = redis_conn.hscan('Zarten')
登录后复制

38.Hash hscan_iter 返回hscan的生成器

hscan_iter(name, match=None, count=None)

参照上面函数hscan

v = redis_conn.hscan_iter('Zarten')
for i in v:
    print(type(i), i)
登录后复制

怎么使用Python操作Redis数据库

Set 集合

集合中的元素不重复,一般用于过滤元素

39.Set sadd 添加元素到集合中

sadd(name, *values)

若插入已有的元素,则自动不插入

v = redis_conn.sadd('Zarten', 'apple', 'a', 'b', 'c')
登录后复制

40.Set scard 返回集合中元素的个数

scard(name)

v = redis_conn.scard('Zarten')
登录后复制

41.Set smembers 获取集合中的所有元素

smembers(name)

返回值:set类型,形如: {b'a', b'apple', b'c', b'b'}

v = redis_conn.smembers('Zarten')
登录后复制

42.Set srandmember 随机获取一个或N个元素

srandmember(name, number=None)

  • name:键名

  • number:一个或N个,默认返回一个。若返回N个,则返回List类型

返回值:返回一个值或一个列表

v = redis_conn.srandmember('Zarten', 2)
登录后复制

43.Set sismember 判断某个值是否在集合中

sismember(name, value)

返回值:True 在 False 不在

v = redis_conn.sismember('Zarten', 'appl')
登录后复制

44.Set spop 随机删除并返回集合中的元素

spop(name)

v = redis_conn.spop('Zarten')
登录后复制

45.Set srem 删除集合中的一个或多个元素

srem(name, *values)

返回值:返回删除的个数 int

v = redis_conn.srem('Zarten', 'c', 'a')
登录后复制

46.Set smove 将一个集合中的值移动到另一个集合中

smove(src, dst, value)

若value不存在时,返回False

返回值:成功 True

v = redis_conn.smove('Zarten', 'Fruit', 'apple')
登录后复制

47.Set sdiff 返回在一个集合中但不在其他集合的所有元素(差集)

sdiff(keys, *args)

在keys集合中,不在其他集合中的元素

返回值:set类型 {b'2', b'4', b'3', b'1'}

v = redis_conn.sdiff('Zarten', 'Fruit')
登录后复制

48.Set sdiffstore 上面的sdiff的返回值(差集)保存在另一个集合中

sdiffstore(dest, keys, *args)

在keys集合中,不在其他集合中的元素保存在dest集合中

  • dest:新的集合,设置的新集合,旧集合会被覆盖

返回值:int 返回作用的个数

v = redis_conn.sdiffstore('Left', 'Zarten', 'Fruit')
登录后复制

49.Set sinter 返回一个集合与其他集合的交集

sinter(keys, *args)

返回值:set类型

v = redis_conn.sinter('Zarten', 'Fruit')
登录后复制

50.Set sinterstore 返回一个集合与其他集合的交集,并保存在另一个集合中

sinterstore(dest, keys, *args)

  • dest:另一个集合,设置新集合,旧集合元素会被覆盖

v = redis_conn.sinterstore('Left', 'Zarten', 'Fruit')
登录后复制

51.Set sunion 返回一个集合与其他集合的并集

sunion(keys, *args)

v = redis_conn.sunion('Zarten', 'Fruit')
登录后复制

52.Set sunionstore 返回一个集合与其他集合的并集,并保存在另一个集合中

sunionstore(dest, keys, *args)

  • dest:另一个集合,设置新集合,旧集合元素会被覆盖

返回值:新集合元素个数

v = redis_conn.sunionstore('Left', 'Zarten', 'Fruit')
登录后复制

Zset 有序集合

有序集合比集合多了一个分数的字段,可对分数升序降序

53.Zset zadd 有序集合中添加元素

zadd(name, *args, **kwargs)

添加元素时需指定元素的分数

返回值:返回添加的个数

2种方式如下:

v = redis_conn.zadd('Zarten', 'a', 3, 'b', 4)
#v = redis_conn.zadd('Zarten', c= 5, d= 6)
登录后复制

怎么使用Python操作Redis数据库

54.Zset zcard 返回有序集合中元素个数

zcard(name)

v = redis_conn.zcard('Zarten')
登录后复制

55.Zset zcount 返回有序集合中分数范围内的元素个数

zcount(name, min, max)

包含min max

返回值:个数 int

v = redis_conn.zcount('Zarten', 3, 5)
登录后复制

56.Zset zscore 返回有序集合中指定某个值的分数

zscore(name, value)

返回值:float 类型的分数;形如: -5.0

v = redis_conn.zscore('Zarten', 'zhi')
登录后复制

57.Zset zincrby 增加有序集合中某个值的分数

zincrby(name, value, amount=1)

  • value:若存在,则增加其amount分数;若不存在,则增加新值以及对应的分数

  • amount:增加的值,可以为负数

返回值:增加后的分数 float类型 ;形如: -5.0

v = redis_conn.zincrby('Zarten', 'zhi', -5)
登录后复制

58.Zset zrem 删除有序集合中的某个或多个值

zrem(name, *values)

返回值:返回删除的个数

v = redis_conn.zrem('Zarten', 'zhi', 'a')
登录后复制

59.Zset zremrangebyrank 删除有序集合元素根据排序范围

zremrangebyrank(name, min, max)

返回值:删除个数 int

怎么使用Python操作Redis数据库

v = redis_conn.zremrangebyrank('Zarten', 1, 3)
登录后复制

删除后如下图:

怎么使用Python操作Redis数据库

60.Zset zremrangebyscore 删除有序集合根据分数范围

zremrangebyscore(name, min, max)

返回值:删除个数 int

v = redis_conn.zremrangebyscore('Zarten', 8, 15)
登录后复制

61.Zset zrank 返回某个值在有序集合中的分数排名(从小到大) zrevrank(从大到小)

zrank(name, value)

返回值:value在name中的分数排名值,分数从小到大排名,从0开始

怎么使用Python操作Redis数据库

v = redis_conn.zrank('Zarten', 'b')
登录后复制

返回值如下图:

怎么使用Python操作Redis数据库

62.Zset zrange 返回有序集合分数排序的一段数据

zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)

  • name:redis的name

  • start:有序集合索引起始位置(非分数)

  • end:有序集合索引结束位置(非分数)

  • desc:排序规则,默认按照分数从小到大排序

  • withscores:是否获取元素的分数,默认只获取元素的值

  • score_cast_func:对分数进行数据转换的函数

返回值:list类型 [(b'tt', 10.0), (b'd', 6.0), (b'c', 5.0)]

怎么使用Python操作Redis数据库

v = redis_conn.zrange('Zarten', 1, 3, True, True, score_cast_func=float)
登录后复制

结果如图:

怎么使用Python操作Redis数据库

Bitmap 位图

bitmap中存放二进制的位0和1,类似位数组。典型应用是基于redis的布隆过滤器。

属于String字符串数据结构,固bit 映射被限制在 512 MB 之内(2^32)

63.Bitmap setbit 设置位图的值

setbit(name, offset, value)

  • name:redis键名

  • offset:偏移量,大于等于0。当偏移伸展时,空白位置以0填充

  • value:二进制值 0或1

v = redis_conn.setbit('Zarten_2', 100, 1)
登录后复制

64.Bitmap getbit 返回位图指定偏移量的值

getbit(name, offset)

返回0或1

v = redis_conn.getbit('Zarten_2', 101)
登录后复制

65.Bitmap bitcount 返回位图中二进制为1的总个数

bitcount(key, start=None, end=None)

start end指定开始和结束的位,默认整个位图

v = redis_conn.bitcount('Zarten_2', 100, 1000)
登录后复制

全局函数

全局函数对任何数据结构都适用

66.全局函数 delete 删除redis中一个或多个键的所有数据

delete(*names)

返回值:int 删除的个数

v = redis_conn.delete('name', 'name_1')
登录后复制

67.全局函数 exists 判断redis中是否存在某个键

exists(name)

返回值:存在True;反之False

v = redis_conn.exists('name')
登录后复制

68.全局函数 rename 重命名redis中键名

rename(src, dst)

返回值:成功True

v = redis_conn.rename('name_2', 'name_100')
登录后复制

69.全局函数 move 移动redis中某个键所有数据到某个db中

move(name, db)

返回值:成功True

v = redis_conn.move('name_100', 12)
登录后复制

70.全局函数 randomkey 随机获取redis中某个键名

randomkey()

返回值:形如: b'name_55'

v = redis_conn.randomkey()
登录后复制

71.全局函数 type 查看redis中某个键数据结构类型

type(name)

返回值:字符串(字节形式) 形如: b'hash'

  • none (key不存在)

  • string (字符串)

  • list (列表)

  • set (集合)

  • zset (有序集)

  • hash (哈希表)

v = redis_conn.type('name_4')
登录后复制

以上是怎么使用Python操作Redis数据库的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
如何利用Redis缓存方案高效实现产品排行榜列表的需求? 如何利用Redis缓存方案高效实现产品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis缓存方案如何实现产品排行榜列表的需求?在开发过程中,我们常常需要处理排行榜的需求,例如展示一个�...

Python vs. JavaScript:开发环境和工具 Python vs. JavaScript:开发环境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Laravel vs. Python(与框架):比较分析 Laravel vs. Python(与框架):比较分析 Apr 21, 2025 am 12:15 AM

Laravel适合团队熟悉PHP且需功能丰富的项目,Python框架则视项目需求而定。1.Laravel提供优雅语法和丰富功能,适合需要快速开发和灵活性的项目。2.Django适合复杂应用,因其“电池包含”理念。3.Flask适用于快速原型和小型项目,提供极大灵活性。

REDIS的角色:探索数据存储和管理功能 REDIS的角色:探索数据存储和管理功能 Apr 22, 2025 am 12:10 AM

Redis在数据存储和管理中扮演着关键角色,通过其多种数据结构和持久化机制成为现代应用的核心。1)Redis支持字符串、列表、集合、有序集合和哈希表等数据结构,适用于缓存和复杂业务逻辑。2)通过RDB和AOF两种持久化方式,Redis确保数据的可靠存储和快速恢复。

Golang vs. Python:利弊 Golang vs. Python:利弊 Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

REDIS:了解其架构和目的 REDIS:了解其架构和目的 Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。 Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显着提升其性能。

Python vs. JavaScript:比较用例和应用程序 Python vs. JavaScript:比较用例和应用程序 Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

See all articles