set以及相关:
r.set("foo","bar") print(r.get("foo"))#b'bar' #在Redis中设置值,默认,不存在则创建,存在则修改 #set(name, value, ex=None, px=None, nx=False, xx=False) #ex过期时间秒,px过期时间毫秒 #默认后两个基本是无用的nx为true时,只有name不存在时,执行(添加),xx为true时,只有name存在时,执行(更新)
#setnx(name,value)和setex(name, value, time)《过期时间秒》psetex(name, time_ms, value)《过期时间毫秒》是set的子,用处不大
r.mset({"f1":"v1","f2":'v2'})设置多个值
get,getrange
相关:
r.set("name","我是在Py3保存的中文字符串") ret = r.get("name") #显示单字节,需要转码 print(chardet.detect(ret)) #chardet.detect检测的字符串越长越准确,越短越不准确。 print(ret.decode("utf-8")) ret = r.getrange("name",0,2) #我 ret = r.getrange("name",6,8) #(一个汉字三个字节)在 print(ret,ret.decode("utf-8"))
setrange(name, offset, value):从偏移量offset往后替换
r.set("n1","faafwgawg") print(r.get('n1')) #b'faafwgawg' r.setrange("n1",3,"fgagwaaw") print(r.get('n1')) #b'faafgagwaaw'
位操作setbit, getbit, bitcount, bitop
r.set('s1','1') #setbit(name, offset, value) print(ord(r.get('s1')),bin(ord(r.get('s1')))) #49 00110001 print(r.getbit('s1',2)) #0-7索引 获取索引为2的值(第三位)其中2,3,7为1,其他位为0 r.setbit('s1',1,1) #将索引为1的(第二位)设为1 print(ord(r.get('s1')),bin(ord(r.get('s1')))) #113 01110001 print(r.get('s1')) #bitcount(key, start=None, end=None) print(r.bitcount('s1',0,7))#4个1 print(r.bitcount('s1',0,2))#4所以这个start end还是可能有点坑,尽量不要使用 r.set('s2','1')#int类型存入也会转义为string类型49 print(r.get('s2'),bin(ord(r.get('s2'))))#获取的类型是bytes需要进行转换操作 #bitop(operation, dest, *keys) operation有与,或,非,异或 *key代表可以操作多个键值 r.bitop('and','s3','s1','s2') #s1:q 1110001 s2:'1' 110001 print(r.get('s3'),bin(ord(r.get('s3'))))#s3:'1' 110001
strlen(name),返回值得字节长度,对于汉字默认3位
incr(self, name, amount=1), incrbyfloat(self, name, amount=1.0)
decr(self, name, amount=1)其中值必须是数字
append(name,val)向字符后面添加,setrange可以设置范围
r.set('name','你好') print(r.strlen('name')) #6 utf-8 汉字3字节 英文1字节 r.set('name','你好a') print(r.strlen('name')) #7 r.set('num',99) print(r.get('num')) r.incr('num') #100 默认加一,可以自己设置步长 print(r.get('num')) r.incr('num',3) #103 默认加一,可以自己设置步长 print(r.get('num')) r.decr('num',9) print(r.get('num')) #94 r.incrbyfloat('num','2.3') print(r.get('num')) #'96.299999999999997' float操作也出现坑,少入 #append(key, value) r.append('num','fas') print(r.get('num')) #b'96.299999999999997fas'
其他操作:
删除单个键值:
delete(name)
r.delete('num')
判断每个键是否存在
exists(name)
r.exists('num')
单个键值的过期时间设置:
expire(name ,time)
r.expire('num',10)#10秒过期
rename(src, dst) 重命名某个键
move(name, db)) 将name的值移到db下
randomkey() 随机获取一个键
type(name) 判断name值类型
scan(cursor=0, match=None, count=None)
scan_iter(match=None, count=None)
迭代获取值
Hash ----> h开头函数, 主要用于字典
r.hset('d2','key1','val1') print(r.hget('d2','key1'))
List ----> l开头函数, 主要用于列表
r.lpush('ls1',1,2,3) r.lpush('ls1',9) print(r.lpop('ls1'),r.lpop('ls1'),r.lpop('ls1')) #弹出一个9,3,2 默认右到左 #r.lset(name, index, value) 对索引处重新赋值 r.lset('ls1',0,99) print(r.lpop('ls1')) #lindex(name, index)获取索引处值,不必弹出
列表循环获取值:
r.lpush('ls2',1,2,3) print( r.llen('ls2')) #方法一,range(列表长度) for i in range(r.llen('ls2')): print(r.lindex('ls2',i)) #方法二,生成器 def list_iter(name): """ 自定义redis列表增量迭代 :param name: redis中的name,即:迭代name对应的列表 :return: yield 返回 列表元素 """ list_count = r.llen(name) for index in range(list_count): yield r.lindex(name, index) for item in list_iter('ls2'): print(item)
Set ----> s开头函数, 主要用于集合(Set集合就是不允许重复的列表)
sadd(name,values)添加值
scard(name)获取值
其他更多操作Hash,Set,List可以查看: