python操作redis,看这篇就够了

举报
芥末拌个饭吧 发表于 2022/11/15 09:25:02 2022/11/15
【摘要】 对于后端来说,使用Redis的频率很高,我们会用redis配合MySQL做缓存用,也会用redis实现简单的消息队列。对于初学者来说,需要知道Redis如何使用,然后才是深入了解Redis的原理和注意点。这篇就来总结一下在Python中如何使用Redis吧。

前言

对于后端来说,使用Redis的频率很高,我们会用redis配合MySQL做缓存用,也会用redis实现简单的消息队列。对于初学者来说,需要知道Redis如何使用,然后才是深入了解Redis的原理和注意点。这篇就来总结一下在Python中如何使用Redis吧。

redis的连接

Redis的连接通常有2种方式,可分为普通连接和连接池的连接方式。

  • 普通连接
import redis

red = redis.Redis(host='{host}', port={port}, password={pwd}, db = {db})
  • 连接池方式
import redis

pool = redis.ConnectionPool(host='{host}', port={port}, password={pwd}, db = {db})

r = redis.Redis(connection_pool=pool)

redis的操作

Redis有多种丰富的数据类型,以满足我们不同场景的使用。主要有string、hash、list、set、sortedset等,下面介绍下常用的操作。

通用操作

  • exists(key) 查看key是否存在
  • expire(key, second) 对key设置过期时间
  • del(key) 删除key

1. string

字符串的使用比较简单,一个key对应一个value。

string写入数据

写入单个数据用get()方法,批量写数据用mset()方法。

set写单个数据

用法为:set(key, value, ex=None, px=None, nx=False, xx=False)

  • ex:过期时间(秒)
  • ps:过期时间(毫秒),一般用ex即可
  • nx:设置为True时,只有key不存在才会写入。
  • xx:设置为True时,只有key存在才会写入。

set默认不检查库中的key是否存在,如果key存在,不加nx参数的话会覆盖数据。

示例:

red.set('name', 'YaoMing')
# 设置一个小时后过期
red.set('name', 'YaoMing', ex=3600)
mset批量写数据

用法:mset(*args, **kwargs)

使用时多使用字典的形式传值

示例:

str_dic = {
    "name": "YaoMing",
    "name1": "Yi"
}
red.mset(str_dict)

string获取数据

和写入类似,有获取单个get()和批量获取mget()方法。直接看例子:

# 获取单个数据
val = red.get("name")
# 批量获取
vals = red.mget(['name', 'name1'])

2. hash

hash也是高频使用的数据类型,使用上除了读写,还有键值对个数获取hlen()、键获取hkeys()、值获取hvals()等用法。

hash写入

和string写入类型,也有单个键值对写入和批量写入。

用法:hset(name, key, value)

hmset(name, mapping)

看例子:

# 单个写入(res返回的是写入成功的个数)
res = red.hset('nba', 'name', 'Curry')
# 批量写入(res返回的是bool类型)
res1 = red.hmset('nba', {'name': 'Curry', 'age': 34})

hash读取

读取有多种用法,分别是:

  • hget(name, key) 获取指定key的value
  • hmget(name, keys, *args) 获取多个键值对的value
  • hgetall(name) 获取哈希的所有键值对
  • hlen(name) 获取哈希中键值对的个数
  • hkeys(name) 获取哈希中所有的键
  • hvals(name) 获取哈希中所有的值

操作例子:

# 获取name的value
val = red.hget('nba', 'name')
# 获取多个键的value
vals = red.hmget('nba', ['name', 'age'])
# 获取nba的所有键值对
val = red.hgetall('nba')
# 获取键值对个数
len = red.hlen('nba')
# 获取所有键
keys = red.hkeys('nba')
# 获取所有值
vals = red.hvals('nba')

hash其他操作

除了上述常规操作,hash还有如检查键是否存在hexists()、对自增key加减hincrby()等操作。

  • hexists(name, key) 判断是否有key
  • hdel(name, *keys) 删除键值对
  • hincrby(name, key, amount=1) 对自增key加减
# 判断nba中是否有name键
res = red.hexists('nba', 'name')
# 删除age键值对
res = red.hdel('nba', 'age')
# 对age键加1(如果要减就传负数)
res = red.hincrby('nba', 'age', 1)

3. List

list通常用作简单的队列,支持左边和右边操作列表。

  • lpush/rpush(name, *values) 从列表左边/右边添加值。
  • lpushx/rpushx(name, value) 只有键存在时,从左边/右边添加
  • llen(name) 返回列表长度
  • lindex(name, index) 通过索引获取值
  • lrange(name, start, end) 获取区间内的值
  • lpop/rpop(name) 删除左边/右边第一个值
  • lrem(name, value, num=0) 删除列表中范围之外的所有值
  • lpop/rpop(keys) 从列表左边/右边删除一个值并返回到客户端
  • rpoplpush(name, name1) 从一个列表最右边删除一个值并将值添加到另一列表的最左边

操作都比较常规,主要说说rpoplpush。因pop后列表就没有该值了,为确保值被客户端成功消费,可以将pop出来的值插入到另一个列表中,这样可降低pop的值未消费成功的概率。

res = res.rpoplpush('alist', 'blist')

4. set

顾名思义,set中的元素不能重复,通常我们会用来过滤数据。

  • sadd(name, *values) 插入元素
  • scard(name) 获取元素个数
  • smembers(name) 获取所有元素
  • srem(name, *values) 删除一个或多个元素
  • sdiff(keys, *args) 返回在集合a中但不在其他集合的元素
  • sunion(keys, *args) 返回一个集合与其他集合的并集
  • sunionstore(name, keys, *args) 返回一个集合与其他集合的并集,并存到另一集合中

set很多时候会用来过滤和聚合操作,比如sunion操作就可以取2个集合的并集。

res = red.sunion('aset', 'bset')

5. zset

zset和set的区别就是zset是有序的,解决了set无序的问题。我们可以对集合的元素设置权重score,这样在使用时就能直接对权重过滤,达到类似list取下标的操作。

  • zadd(name, *args, **kwargs) 添加元素
  • zcard(name) 返回集合中的元素个数
  • zcount(name, min, max)返回score范围的元素个数
  • zscore(name, value) 返回元素的分数
  • zrange(name, start, end, desc, withscores) 返回集合内的数据,可设置分数和排序
  • zremrangebyrank(name, min, max) 删除分数范围内的元素
# 返回score 3-10之间的元素
res = red.zrange('zset1', 3, 10)

小结

本篇总结了Python对redis的一些基本操作,我们在使用redis时,需熟悉各个数据类型的运用场景及使用方法,这样才能更好的将redis利用起来。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。