python读取redis中的值_Python操作Redis数据库

本文详细介绍了Python如何使用redis库操作Redis数据库,包括设置、获取、批量操作、自增自减、集合与有序集合等命令,以及如何处理字符串、哈希、列表、集合和有序集合的数据。实例涵盖了各种场景,如设置过期时间、批量设置键值对、自增自减、集合操作等。
摘要由CSDN通过智能技术生成

3、redis基本命令 String

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

在Redis中设置值,默认,不存在则创建,存在则修改

参数:

ex,过期时间(秒)

px,过期时间(毫秒)

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

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

1.ex,过期时间(秒) 这里过期时间是3秒,3秒后p,键food的值就变成None

importredis

pool= redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

r= redis.Redis(connection_pool=pool)

r.set('food', 'mutton', ex=3) #key是"food" value是"mutton" 将键值对存入redis缓存

print(r.get('food')) #mutton 取出键food对应的值

2.px,过期时间(豪秒) 这里过期时间是3豪秒,3毫秒后,键foo的值就变成None

importredis

pool= redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

r= redis.Redis(connection_pool=pool)

r.set('food', 'beef', px=3)print(r.get('food'))

3.nx,如果设置为True,则只有name不存在时,当前set操作才执行 (新建)

importredis

pool= redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

r= redis.Redis(connection_pool=pool)print(r.set('fruit', 'watermelon', nx=True)) #True--不存在#如果键fruit不存在,那么输出是True;如果键fruit已经存在,输出是None

4.xx,如果设置为True,则只有name存在时,当前set操作才执行 (修改)

print((r.set('fruit', 'watermelon', xx=True))) #True--已经存在#如果键fruit已经存在,那么输出是True;如果键fruit不存在,输出是None

5.setnx(name, value)

设置值,只有name不存在时,执行设置操作(添加)

print(r.setnx('fruit1', 'banana')) #fruit1不存在,输出为True

6.setex(name, value, time)

设置值

参数:

time,过期时间(数字秒 或 timedelta对象)

importredisimporttime

pool= redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

r= redis.Redis(connection_pool=pool)

r.setex("fruit2", "orange", 5)

time.sleep(5)print(r.get('fruit2')) #5秒后,取值就从orange变成None

7.psetex(name, time_ms, value)

设置值

参数:

time_ms,过期时间(数字毫秒 或 timedelta对象)

r.psetex("fruit3", 5000, "apple")

time.sleep(5)print(r.get('fruit3')) #5000毫秒后,取值就从apple变成None

8.mset(*args, **kwargs)

批量设置值

如:

r.mget({'k1': 'v1', 'k2': 'v2'})

r.mset(k1="v1", k2="v2") #这里k1 和k2 不能带引号 一次设置对个键值对

print(r.mget("k1", "k2")) #一次取出多个键对应的值

print(r.mget("k1"))

9.mget(keys, *args)

批量获取

如:

print(r.mget('k1', 'k2'))print(r.mget(['k1', 'k2']))print(r.mget("fruit", "fruit1", "fruit2", "k1", "k2")) #将目前redis缓存中的键对应的值批量取出来

10.getset(name, value)

设置新值并获取原来的值

print(r.getset("food", "barbecue")) #设置的新值是barbecue 设置前的值是beef

11.getrange(key, start, end)

获取子序列(根据字节获取,非字符)

参数:

name,Redis 的 name

start,起始位置(字节)

end,结束位置(字节)

如: "君惜大大" ,0-3表示 "君"

r.set("cn_name", "君惜大大") #汉字

print(r.getrange("cn_name", 0, 2)) #取索引号是0-2 前3位的字节 君 切片操作 (一个汉字3个字节 1个字母一个字节 每个字节8bit)

print(r.getrange("cn_name", 0, -1)) #取所有的字节 君惜大大 切片操作

r.set("en_name","junxi") #字母

print(r.getrange("en_name", 0, 2)) #取索引号是0-2 前3位的字节 jun 切片操作 (一个汉字3个字节 1个字母一个字节 每个字节8bit)

print(r.getrange("en_name", 0, -1)) #取所有的字节 junxi 切片操作

12.setrange(name, offset, value)

修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)

参数:

offset,字符串的索引,字节(一个汉字三个字节)

value,要设置的值

r.setrange("en_name", 1, "ccc")print(r.get("en_name")) #jccci 原始值是junxi 从索引号是1开始替换成ccc 变成 jccci

13.setbit(name, offset, value)

对name对应值的二进制表示的位进行操作

参数:

name,redis的name

offset,位的索引(将值变换成二进制后再进行索引)

value,值只能是 1 或 0

注:如果在Redis中有一个对应: n1 = "foo",

那么字符串foo的二进制表示为:01100110 01101111 01101111所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,

那么最终二进制则变成01100111 01101111 01101111,即:"goo"扩展,转换二进制表示:

source= "陈思维"source= "foo"

for i insource:

num=ord(i)print bin(num).replace('b','')

特别的,如果source是汉字"陈思维"怎么办?

答:对于utf-8,每一个汉字占 3 个字节,那么 "陈思维"则有 9个字节

对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000

14.getbit(name, offset)

获取name对应的值的二进制表示中的某位的值 (0或1)

print(r.getbit("foo1", 0)) #0 foo1 对应的二进制 4个字节 32位 第0位是0还是1

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

获取name对应的值的二进制表示中 1 的个数

参数:

key,Redis的name

start 字节起始位置

end,字节结束位置

print(r.get("foo")) #goo1 01100111

print(r.bitcount("foo",0,1)) #11 表示前2个字节中,1出现的个数

16.bitop(operation, dest, *keys) 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值 参数: operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或) dest, 新的Redis的name *keys,要查找的Redis的name 如:

bitop("AND", 'new_name', 'n1', 'n2', 'n3')

获取Redis中n1,n2,n3对应的值,然后讲所有的值做位运算(求并集),然后将结果保存 new_name 对应的值中

r.set("foo","1") #0110001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值