Python使用Redis

2年前 (2024-04-27)
Python 使用 Redis 相对比较简单,Python 专门提供了操作 Redis 的第三方模块,即 redis 模块,该模块可以直接使用 Python 包管理工具pip来安装。本节内容适 Python 开发人员阅读。

安装redis模块

下面以 Windows 系统为例,使用包管理工具安装 redis 模块,令如下:

python -m pip install redis

如果您是 Linux 系统,需要执行以下令来安装:

sudo pip3 install redis

Python Redis连接

redis 模块采用了两种连接模式:直接模式和连接池模式,它们都可以操作 Redis。

1) 直连模式

import redis

# 本地连接,创建数据库连接对象

r = redis.Redis(host='127.0.0.1',port=6379,db=0,password='123456')

上述代码中,db 表示当前选择的库,其参数值可以是 0-15;如果设置连接数据库的密码,那么就需要使用 password 进行验证,否则可以省略。

2) 连接池模式

redis 模块使用 connection pool(连接池)来管理 redis server 的所有连接,每个 Redis 实例都会维护一个属于自己的连接池,这样做的目的是为了减少每次连接或断开的性能消耗。

下面示例,实现了多个 Redis 实例共享一个连接池,代码如下:

import redis

#创建连接池并连接到redis,并设置连接数量;

conn_pool = redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=10)

# 个客户端访问

re_pool = redis.Redis(connection_pool=conn_pool)

# 第二个客户端访问

re_pool2 = redis.Redis(connection_pool=conn_pool)

...

连接池的作用:当有新的客户端请求连接时,只需要去连接池获取一个连接即可,实际上就是把一个连接共享给多个客户端使用,这样就节省了每次连接所耗费的时间。

Python Redis通用操作

下面是 Python 操作 Redis 数据库的通用令。

import redis

r = redis.Redis(host='127.0.0.1',port=6379,db=0)

print(r.keys('*'))

key_list = r.keys('*')

#转换为字符串

for key in key_list:

  print(key.decode())

#查看key类型

print(r.type('webname'))

# 返回值: 0 或者 1

print(r.exists('username'))

# 删除key

r.delete('webname')

if "age"  in key_list:

    print("删除失败")

else:

    print("删除成功")

输出结果:

[b'username', b'webname', b'age', b'password']

username

webname

age

password

b'string'

1

删除成功

Python Redis字符串

示例如下:

import redis

#连接redis服务器

r = redis.Redis(host='127.0.0.1',port=6379,db=0)

​#key为database

r.set('webname','www.biancheng网站站点" rel="nofollow" />

b'www.biancheng网站站点" rel="nofollow" />

import redis

#建立redis连接

r = redis.Redis(host='127.0.0.1',port=6379,db=0)

r.lpush('database','sql','mysql','redis')

r.linsert('database','before','mysql',',mongodb')

print(r.llen('database'))

print(r.lrange('database',0,-1))

print(r.rpop('database'))

#保留指定区间内元素,返回True

print(r.ltrim('database',0,1))

while True:

  # 如果列表中为空时,则返回None

  result = r.brpop('database',1)

  if result:

      print(result)

  else:

      break

r.delete('database')

输出结果如下:

4

[b'redis', b',mongodb', b'mysql', b'sql']

b'sql'

True

(b'database', b',mongodb')

(b'database', b'redis')

Python Redis散列

Python 操作 Hash 散列常用方法如下:

# 1、更新一条数据的value,若不存在时,则新建这条数据

hset(key, field, value)

# 2、读取数据的指定字段属性,返回值为字符串类型

hget(key, field)

# 3、批量更新字段属性,参数mapping为字典类型

hmset(key, mapping)

# 4、批量读取数据的字段属性

hmget(key, fields)

# 5、获取这条数据的所有属性字段和对应的值,返回值为字典类型

hgetall(key)

# 6、获取这条数据的所有属性字段,返回值为列表类型

hkeys(key)

# 7、删除这条数据的指定字段

hdel(key, field)

令演示:

import redis

r = redis.Redis(host='127.0.0.1',port=6379,db=0)

# 设置一条数据

r.hset('user1','name','www.baidu.com')

# 更新数据

r.hset('user1','name','www.biancheng网站站点" rel="nofollow" />

b'www.biancheng网站站点" rel="nofollow" />

#1、给name对应的中添加元素

sadd(name,values)

e.g.

r.sadd("set_name","tom")

r.sadd("set_name","tom","jim")

#2、获取name对应的的所有成员

embers(name)

e.g.

r.embers('set_name')

#3、获取name对应的中的元素个数

scard(name)

e.g.

r.scard("set_name")

#4、检查value是否是name对应的内的元素,返回值为True或False

siember(name, value)

e.g.

r.siember('set_name','tom')

#5、随机删除并返回指定的一个元素

spop(name)

e.g.

member = r.spop('set_name')

#6、删除中的某个元素

srem(name, value)

r.srem("set_name", "tom")

#7、获取多个name对应的交集

sinter(keys, *args)

e.g.​

r.sadd("set_name","a","b")

r.sadd("set_name1","b","c")

r.sadd("set_name2","b","c","d")

print(r.sinter("set_name","set_name1","set_name2"))

#输出:{b'b'}

#8、获取多个name对应的的并集

sunion(keys, *args)

e.g.

r.sunion("set_name","set_name1","set_name2")