• python---redis的python使用


    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可以查看:

    http://www.cnblogs.com/wupeiqi/articles/5132791.html

    https://www.cnblogs.com/melonjiang/p/5342505.html

  • 相关阅读:
    读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第三部分)
    Spring Boot进阶系列一
    职场进阶之七种武器
    大龄IT程序员的救赎之道
    Web Service
    生产者消费者问题
    SpringBoot集成Apache Shiro
    简单模拟医院叫号系统
    IT小团队管理者的突围之道
    内部推荐
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8606012.html
Copyright © 2020-2023  润新知