zoukankan      html  css  js  c++  java
  • Redis基础

    使用python操作redis

    数据库的连接:

    import redis
    #连接数据库
    db = redis.Redis('localhost',6379)
    #连接池
    # pool = redis.ConnectionPool(host='localhost',port=6379)
    # db = redis.Redis(connection_pool=pool)

    String操作:

    使用key-value的模式来存储,相当于每个name对应一个value

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

    ex,过期时间(秒)
    px,过期时间(毫秒)
    nx,如果设置为True,则只有name不存在时,当前set操作才执行
    xx,如果设置为True,则只有name存在时,岗前set操作才执行

    db.set('name','fml')
    print(db.get('name'))
    结果:fml

    setex(name,value,time)

    time:过期时间(秒)

    db.setex('name','1',2)
    time.sleep(2)
    print(db.get('name'))
    结果:None

    同样的还有

    setnx(name,value),相当于set()中的nx参数为True

    psetex(name.time,value),time为毫秒数

    mset(*args,**kwargs)  批量操作,可传入字典

    方式一

    db.mset(t1 = 1,t2 = 2)
    print(db.get('t1'))
    print(db.get('t2'))
    结果 1,2
    方式二

    d = {'name':'fml','age':22}
    db.mset(d)
    print(db.get('name'))
    print(db.get('age'))
    结果: fml , 22

    get(name):返回name的值

    mget(keys, *args):批量操作,返回多个值(列表的形式),可传入列表

    print(db.mget('name','age'))
    print(db.mget(['t1','t2']))


    getset(name,value):设置新的值并返回之前的值

    print(db.getset('name','test'))
    print(db.get('name'))

    getrange(key,start,end):获取子序列(根据字节获取,非字符)

    start:起始位,end结束位,值得注意的是这个是按照字节来计算而不是字符个数 在utf-8的编码中一个中文汉字占三个字节,一个字符只占一位

    db.set('name1','fml')
    print(db.getrange('name1', 0, 1).decode())
    db.set('name2','名字')
    print(db.getrange('name2', 0, 2).decode())

    setrange(name, offset, value):   从指定字符串索引开始向后替换(新值太长时,则向后添加)

    offset:字符串索引号

    db.set('name','test set range')
    db.setrange('name',1,'ls')  #从第二个字符开始替换
    print(db.get('name').decode())

    setbit(name, offset, value):和上面的一个功能类似,只不过是用bite方式来更改

    getbit(name, offset):获取name的二进制表示中的某一位值

    bitcount(key, start=None, end=None):统计name用二进制表示中的为1的个数

    start,位起始位置end,位结束位置

    db.set('name','f')
    print(db.bitcount('name'))
    #f对应的ASCII码的值为102,102转为二进制为 0110 0110 所以返回值为4
    strlen(name):返回name对于值的字节长度,汉字三字节

    db.set('name1','发生')
    db.set('name2','fml')
    print(db.strlen('name1'))
    print(db.strlen('name2'))

    incr(self, name, amount=1): name的对应值增加amount

    自增只适用于整数,当name不存在的时候会新建一个name值为amount

    db.set('num1',2)
    db.incr('num1', amount=2)
    db.incr('num2', amount=2)
    print(db.get('num1').decode())
    print(db.get('num2').decode())

    incrbyfloat(self, name, amount=1.0):同上只不过是浮点型

    decr(self, name, amount=1):同上功能为自减

    append(key, value) :在name对应值后面追加value的内容,如果没有name就会新建一个name=value

    db.set('name','fml')
    db.append('name','test')
    print(db.get('name').decode())


    Hash操作
    使用字典的方式来存储,name为字典名

    hset(name, key, value):

    db.hset('info','name','fml')
    db.hset('info','age',22)
    print(db.hget('info','name').decode())
    print(db.hget('info','age').decode())
    hmset(name, mapping):批量操作 ,mapping为字典

    db.hmset('info1',{'name1':'fml','age1':23})
    print(db.hget('info1','name1').decode())
    print(db.hget('info1','age1').decode())


    hget(name,key):同get操作

    hmget(name, keys, *args):同mget,可传入列表或者多个值

    hgetall(name):获取name的所有key-和value值

    hlen(name):获取name中key的个数

    hkeys(name):获取name中所有的key

    hvals(name):获取name中所有的value值

    hexists(name, key):判断name中是否存在传入的key

    hdel(name,*keys):删除name中的key,若不存在返回0,删除成功后返回1

    hincrby(name, key, amount=1):自增,同string操作一样

    hincrbyfloat(name, key, amount=1.0) 自增浮点型


    hscan(name, cursor=0, match=None, count=None) 过滤获取多个值

    cursor:起始位置,match:过滤方法 ,count:获取的个数

    过滤方法的例子:1:获取以n开头的key :n*

         2:获取包含a的key:*a*

         3:获取以e结尾的key:*e

    db.hset('info','name','fml')
    db.hset('info','age',22)
    print(db.hscan('info',cursor=0,match= 'n*'))
    print(db.hscan('info',cursor=0,match= '*e'))
    print(db.hscan('info',cursor=0,match= '*g*'))


    List操作


    lpush(name,values): 向name添加元素,从左边开始添加

    db.lpush('list','1','2','3')
    print(db.lrange('list',0,-1))

    lpush(name,values): 向name添加元素,从右边开始添加

    db.rpush('list3','1','2','3')
    print(db.lrange('list3',0,-1))


    lpushx(name,value):只有当name存在的时候才在左边添加,相同的还有rpushx(name.value)

    db.rpush('list3','1','2','3')
    db.lpushx('list3',4)
    print(db.lrange('list3',0,-1))

    llen(name): 返回name的存储的长度

    linsert(name, where, refvalue, value))  在name的refvalue前面或后面插入value,如果存在多个refvalue的时候只会在从左往右数第一个起作用

    where:BEFORE/AFTER

    db.rpush('list5','1','2','3')
    db.linsert('list5','BEFORE','2','5')
    db.linsert('list5','AFTER','2','6')
    print(db.lrange('list5',0,-1))


    lset(name, index, value):修改index索引的值

    db.rpush('list6','1','2','3')
    db.lset('list6',1,4)
    print(db.lrange('list6',0,-1))

    lrem(name, value, num):删除name中的value,num为需要删除的个数

    db.rpush('list7',1,2,3,4,1,2,4,5,7)
    db.lrem('list7',1,1)
    db.lrem('list7',2,2)
    print(db.lrange('list7',0,-1))

    lpop(name):删除左边第一个值并返回,同样的还有rpop(name):从右边弹出

    lindex(name, index):获取index索引的值

    lrange(name, start, end):返回切片获得的值

    ltrim(name, start, end):删除除start-end之外的所有值

    rpoplpush(src, dst) :删除src的最右的一个值,并把它添加到dst的最左边

    blpop(keys, timeout):将多个列表排列,按照从左到右去pop对应列表的元素  同brpop(keys, timeout)

    brpoplpush(src, dst, timeout=0):从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧


    set集合操作


    努力成为一名GEEK!
  • 相关阅读:
    python连接SMTP的TLS(587端口)发邮件python发邮件(带认证,587端口)202010
    JAVA抓取通过JS渲染的网站(动态)网页数据
    moviepy音视频剪辑:与大小相关的视频变换函数详解
    区块链知识博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
    MoviePy v2.0.0.dev1尚不成熟,不建议大家使用
    区块链学习2:一些概念性的基础知识笔记
    老猿学5G:3GPP 5G规范中的URI资源概念
    区块链学习1:Merkle树(默克尔树)和Merkle根
    老猿Python博客文章目录索引
    老猿学5G:融合计费场景的Nchf_ConvergedCharging_Create、Update和Release融合计费消息交互过程
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10501028.html
Copyright © 2011-2022 走看看