Python 之redis模块

一、安装redis模块

下面以 Windows 系统为例,使用包管理工具安装 redis 模块,命令如下:
python -m pip install redis
如果您是 Linux 系统,需要执行以下命令来安装:
sudo pip3 install redis

二、Python Redis连接

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

1) 直连模式

  1. import redis
  2. # 本地连接,创建数据库连接对象
  3. 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 实例共享一个连接池,代码如下:
  1. import redis
  2. #创建连接池并连接到redis,并设置最大连接数量;
  3. conn_pool = redis.ConnectionPool(host='127.0.0.1',port=6379,max_connections=10)
  4. # 第一个客户端访问
  5. re_pool = redis.Redis(connection_pool=conn_pool)
  6. # 第二个客户端访问
  7. re_pool2 = redis.Redis(connection_pool=conn_pool)
  8. ...
连接池的作用:当有新的客户端请求连接时,只需要去连接池获取一个连接即可,实际上就是把一个连接共享给多个客户端使用,这样就节省了每次连接所耗费的时间。

三、Python Redis通用操作

下面是 Python 操作 Redis 数据库的通用命令。
  1. import redis
  2. r = redis.Redis(host='127.0.0.1',port=6379,db=0)
  3. print(r.keys('*'))
  4. key_list = r.keys('*')
  5. #转换为字符串
  6. for key in key_list:
  7.   print(key.decode())
  8. #查看key类型
  9. print(r.type('webname'))
  10. # 返回值: 0 或者 1
  11. print(r.exists('username'))
  12. # 删除key
  13. r.delete('webname')
  14. if "age"  in key_list:
  15.     print("删除失败")
  16. else:
  17.     print("删除成功")
输出结果:
[b'username', b'webname', b'age', b'password']
username
webname
age
password
b'string'
1
删除成功

四、Python Redis字符串

示例如下:
  1. import redis
  2. #连接redis服务器
  3. r = redis.Redis(host='127.0.0.1',port=6379,db=0)
  4. #key为database
  5. r.set('webname','www.biancheng.net')
  6. print(r.get('webname'))
  7. #mset参数为字典
  8. r.mset({'username':'jacak','password':'123'})
  9. print(r.mget('username','password'))
  10. #查看value长度
  11. print(r.strlen('username'))
  12. #数值操作
  13. r.set('age','15')
  14. r.incrby('age',5)
  15. r.decrby('age',5)
  16. r.incr('age')
  17. r.decr('age')
  18. r.incrbyfloat('age',5.2)
  19. r.incrbyfloat('age',-10.5)
  20. print(r.get('age'))
  21. #删除key
  22. r.delete('username')
输出结果如下:
b'www.biancheng.net'
[b'jacak', b'123']
5
b'9.69999999999999929'
注意:输出结果为 bytes 形式,需要使用 decode() 方法进行转换。

五、Python Redis列表

示例如下:
  1. import redis
  2. #建立redis连接
  3. r = redis.Redis(host='127.0.0.1',port=6379,db=0)
  4. r.lpush('database','sql','mysql','redis')
  5. r.linsert('database','before','mysql',',mongodb')
  6. print(r.llen('database'))
  7. print(r.lrange('database',0,-1))
  8. print(r.rpop('database'))
  9. #保留指定区间内元素,返回True
  10. print(r.ltrim('database',0,1))
  11. while True:
  12.   # 如果列表中为空时,则返回None
  13.   result = r.brpop('database',1)
  14.   if result:
  15.       print(result)
  16.   else:
  17.       break
  18. 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)
命令演示:
  1. import redis
  2. r = redis.Redis(host='127.0.0.1',port=6379,db=0)
  3. # 设置一条数据
  4. r.hset('user1','name','www.baidu.com')
  5. # 更新数据
  6. r.hset('user1','name','www.biancheng.net')
  7. # 获取数据
  8. print(r.hget('user1','name'))
  9. # 一次性设置多个field和value
  10. user_dict = {
  11.   'password':'123',
  12.   'gender':'M',
  13.   'height':'175cm'
  14. }
  15. r.hmset('user1',user_dict)
  16. # 获取所有数据,字典类型
  17. print(r.hgetall('user1'))
  18. # 获取所有fields字段和所有values值
  19. print(r.hkeys('user1'))
  20. print(r.hvals('user1'))
输出结果:
b'www.biancheng.net'
{b'name': b'www.biancheng.net', b'password': b'123', b'gender': b'M', b'height': b'175cm'}
[b'name', b'password', b'gender', b'height']
[b'www.biancheng.net', b'123', b'M', b'175cm']

七、Python Redis集合

Python 操作 Set 集合常用方法如下:
#1、给name对应的集合中添加元素
sadd(name,values)
e.g.
r.sadd("set_name","tom")
r.sadd("set_name","tom","jim")
​
#2、获取name对应的集合的所有成员
smembers(name)
e.g.
r.smembers('set_name')
​
#3、获取name对应的集合中的元素个数
scard(name)
e.g.
r.scard("set_name")
​
#4、检查value是否是name对应的集合内的元素,返回值为True或False
sismember(name, value)
e.g.
r.sismember('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")
posted @ 2023-04-14 09:26  样子2018  阅读(182)  评论(0编辑  收藏  举报