天津建设网站哪家好,百度指数官方版,拓客公司联系方式,ppt超链接至网站怎么做Redis 作为常用的 NoSql 数据库#xff0c;主要用于缓存数据#xff0c;提高数据读取效率#xff0c;那在 Python 中应该如果连接和操作 Redis 呢#xff1f;今天就为大概简单介绍下#xff0c;在 Python 中操作 Redis 常用命令。
安装 redis
首先还是需要先安装 redis …Redis 作为常用的 NoSql 数据库主要用于缓存数据提高数据读取效率那在 Python 中应该如果连接和操作 Redis 呢今天就为大概简单介绍下在 Python 中操作 Redis 常用命令。
安装 redis
首先还是需要先安装 redis 模块使用如下命令
$ pip3 install redis
创建 redis 连接池
安装成功后就可以在代码中导入模块然后通过创建连接池的方式连接到 Redis 服务器创建代码如下
import redis #导入redis模块
# 建议使用以下连接池的方式# 设置decode_responsesTrue写入的KV对中的V为string类型不加则写入的为字节类型。pool redis.ConnectionPool(host127.0.0.1, port6379, db0, decode_responsesTrue)rs redis.Redis(connection_poolpool)需要注意的是设置 decode_responsesTrue写入的 Key/Value 对中的 Value 为 string 类型不加则写入的为字节类型。 Redis 操作方法
Redis 支持五种类型的数据操作分别为字符串、 List、 Hash、 Set、 zSet类型还有一些方法是不区分类型操作的。上面我们已经连接到 Redis 服务器接下来为大家介绍各类型基本的操作方法。
字符串类型方法 单键值操作
set(name, value, exNone, pxNone, nxFalse, xxFalse) 参数说明 ex过期时间秒 px过期时间毫秒 nx如果设置为True则只有name不存在时当前set操作才执行 xx如果设置为True则只有name存在时当前set操作才执行 使用方法如下
# keycolor,valuered设置过期时间5秒rs.set(color, red, ex5# 与rs.set(color, red, ex5)相同rs.setex(color, 5, red)# 打印获取color键对应的值超时后获取值为Noneprint(rs.get(color))# 如果color存在输出None如果不存在则输出Trueprint(rs.set(color, green, nxTrue))# 如果color存在输出True如果不存在则输出Noneprint(rs.set(color, yellow, xxTrue)) 批量键值操作
可以批量对多个 key 赋值也可以同时获取多个 key 的值使用方法如下
# 批量赋值rs.mset({key1:value1, key2:value2, key3:value3})# 批量获取值rs.mget(key1, key2, key3) 其他操作
除了基础的赋值和取值可以在赋新值时返回旧值还可将返回值通过索引来截取也可以在 key 对应值后追回值等具体使用可见以下代码
# 设置新值为blue同时返回设置前的值print(rs.getset(color, blue))rs.set(lang, Chinese)# 取索引为1-3字符print(rs.getrange(lang, 1, 3)) #返回结果hin# 从索引号为4字符开始向后替换rs.setrange(lang, 4, a is great) #返回结果14# 在lang对应值后面追加字符 !rs.append(lang, !) #返回结果15print(rs.get(lang)) #返回结果China is great!# 返回lang对应值的长度print(rs.strlen(lang)) #返回结果15# 如果total对应值不存在则total当前值设置为10rs.incr(total, amount10)# 当前total对应值增加1rs.incr(total) #结果为11# 当前total对应值减少1rs.decr(total) #结果为10
list 类型方法
list 的特点一个有序的列表列表中的元素可以重复并且可以在列表前后或中间任意位置插入新元素具体使用方式见如下代码
# 每个新增元素都插入到list最左边如果list不存在则会新建rs.lpush(leftList, 1,2,3,4,5)print(rs.lrange(leftList, 0, -1)) #返回结果[5, 4, 3, 2, 1]# 新插入元素在右侧如果list不存在则新建rs.rpush(rightList, 6,7,8,9,10)print(rs.lrange(rightList, 0, -1)) #返回结果[6, 7, 8, 9, 10]# 在list左边新增元素如果list不存在则不创建rs.lpushx(noList, apple)print(rs.llen(noList)) #返回结果0# 在list中从左遍历出第一个为7的元素在它后面(如果是在前面插入则用before)插入元素08rs.linsert(rightList, after, 7, 08) print(rs.lrange(rightList, 0, -1)) #返回结果[6, 7, 08, 8, 9, 10]# 将list中索引号为1的元素修改为-7rs.lset(rightList, 1, -7)print(rs.lrange(rightList, 0, -1)) #返回结果[6, -7, 08, 8, 9, 10]# 删除list中从左遍历第一个为8的元素rs.lrem(rightList, 8, 1)print(rs.lrange(rightList, 0, -1)) #返回结果[6, -7, 08, 9, 10]# 弹出左侧第一个元素rs.lpop(rightList) #返回值为6print(rs.lrange(rightList, 0, -1)) #返回结果[-7, 08, 9, 10]#取出list中索引编号为1的值print(rs.lindex(rightList, 1)) #返回结果08
hash 类型方法
hash 的特点一个 key 对应一个 value并且 key 不允许重复可以单个操作也可以批量键值操作下面列举了常用方法的使用方法
# 单键值操作# 设置hash名为hName的键和值rs.hset(hName, key1, value1)rs.hset(hName, key2, value2)# 取hName的key1对应的值print(rs.hget(hName, key1)) #返回结果value1#批量键值操作rs.hmset(hName, {key3: value3, key5: value5})print(rs.hmget(hName, key1, key2, key3)) #返回结果[value1, value2, value3]# 取出hName所有键值print(rs.hgetall(hName)) #返回结果{key1: value1, key2: value2, key3: value3, key5: value5}# 取hName中所有的keysprint(rs.hkeys(hName)) #返回结果[key1, key2, key3, key5]# 取hName中所有的valuesprint(rs.hvals(hName)) #返回结果[value1, value2, value3, value5]# 获取hName对应hash键值对个数print(rs.hlen(hName)) #返回结果4# 判断key2是否存在print(rs.hexists(hName, key2)) #返回结果True# 删除key2对应键值对rs.hdel(hName, key2)# 再次判断key2是否存在print(rs.hexists(hName, key2)) #返回结果False
set 类型方法
set 的特点一个无序的元素集合集合中元素不能重复可以随机 pop 元素两个集合可以取交集并集差集运算。
# 增加集合元素如集合不存在则新建rs.sadd(mySet, one, two, 3)# 返回集合元素个数print(rs.scard(mySet))# 返回所有元素print(rs.smembers(mySet)) #结果{two, one, 3}# 返回所有成员print(rs.sscan(mySet)) #结果(0, [3, one, two])# 再次创建一个集合mySet2rs.sadd(mySet2, 3, 5, 7)# 获取两个集合交集print(rs.sinter(mySet, mySet2)) #返回结果{3}# 获取两个集合并集print(rs.sunion(mySet, mySet2)) #返回结果{5, two, one, 7, 3}# 获取两个集合差集print(rs.sdiff(mySet, mySet2)) #返回结果{two, one# 取mySet和mySet2的并集将结果存到storeSet集合中print(rs.sunionstore(sotreSet, mySet, mySet2))print(rs.smembers(sotreSet)) #返回结果{5, two, one, 7, 3}# 判断one元素是否存在集合中print(rs.sismember(sotreSet, one))# 随机删除并返回集合中的一个元素print(rs.spop(sotreSet))# 删除集合中元素值为5的元素print(rs.srem(sotreSet, 5))
zset 类型方法
zset 的特点一个不允许重复的集合集合中元素是有序的每个元素有两个值值和分数分数专门用来做排序。
# 增加集合元素如集合不存在则新建rs.zadd(fruits, {apple:1, banana:3, orange:5})
# 遍历所有元素print(rs.zrange(fruits, 0, -1)) #结果[apple, banana, orange]# withscoresTrue指带上分数print(rs.zrange(fruits, 0, -1, withscoresTrue)) #结果[(apple, 1.0), (banana, 3.0), (orange, 5.0)]# 根据分数由大到小遍历所有元素print(rs.zrevrange(fruits, 0, -1)) #结果[orange, banana, apple]# 获取orange元素对应的分数rs.zscore(fruits, orange) #结果5.0# 取出分数3 and 分数5的元素print(rs.zrangebyscore(fruits, 3, 5))# 取出分数5 and 分数3的元素根据分数从大到小排序print(rs.zrevrangebyscore(fruits, 5, 3))# 遍历所有元素返回一个元组print(rs.zscan(fruits)) #结果(0, [(apple, 1.0), (banana, 3.0), (orange, 5.0)])# 打印集合元素个数print(rs.zcard(fruits)) #结果3# 返回集合中分数1 and 分数3元素个数print(rs.zcount(fruits, 1, 3))# 将集合中apple元素的分数5rs.zincrby(fruits, 5, apple)print(rs.zrange(fruits, 0, -1, withscoresTrue)) #返回结果[(banana, 3.0), (orange, 5.0), (apple, 6.0)]# 返回orange元素在集合中的索引号rs.zrank(fruits, orange) #结果1# 按分数从大到小排序取出banana元素索引号rs.zrevrank(fruits, banana) #结果2# #删除集合中apple元素rs.zrem(fruits, apple)print(rs.zrange(fruits, 0, -1)) #返回结果[banana, orange]# #删除集合索引号0 and 索引号2的元素rs.zremrangebyrank(fruits, 0, 2)# 删除集合分数1 and 分数5的元素rs.zremrangebyscore(fruits, 1, 5)
其他操作方法
以下操作方法针对 redis 任意数据类型字符串listhashsetzset可以删除 key 查询 key 是否存在还可设置超时重命名 key 的名称等
# 删除key为color的对象rs.delete(color)# 查询key为color的对象是否存在print(rs.exists(color)) #结果Falsers.sadd(mySet5, one, two)# 设置key的超时时间rs.expire(mySet5, time5) #单位秒# 重命名key的值rs.rename(mySet5, set5)# 随机返回当前库中一个key但不会删除print(rs.randomkey())# 查看某个key对应值的类型print(rs.type(mySet)) #返回结果set# 通过模糊匹配出满足条件的keyprint(rs.keys(my*)) #返回结果[mySet, mySet2]#各类型元素迭代方式#hash类型迭代for i in rs.hscan_iter(hName): print(i)#set类型迭代for j in rs.sscan_iter(mySet): print(j)#zset类型迭代for k in rs.zscan_iter(fruits): print(k)总结
本文为大家介绍了 Python 中如何创建连接 Redis 数据库并通过代码的方式展示了 Redis 支持的各数据类型的操作方法通过学习发现操作起来还是很方便的接下来还会为大家介绍其他数据库的操作。