• python Redis使用


     ubuntu安装Redis

    sudo vim /etc/redis/redis.conf

    把bind 127.0.0.1这行注释掉

    然后重启Redis

    sudo /etc/init.d/redis-server restart
     
    import redis
    
    r = redis.Redis(host='192.168.181.128', port=6379)
    r.set('foo', 'Bar')
    
    print(r.get('foo'))
    连接并操作

    连接池

    python操作redis,操作一次就请求一次连接,操作完成就断开连接,连接池把redis的连接请求放入池中,方便操作,避免每次建立、释放连接的开销

    import redis
    pool = redis.ConnectionPool(host='192.168.181.128', port=6379)
    
    r = redis.Redis(connection_pool=pool)
    r.set('foo', 'Bar')
    
    print(r.get('foo'))
    连接池

     1. String操作

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

    1
    2
    3
    4
    5
    6
    在Redis中设置值,默认,不存在则创建,存在则修改
    参数:
         ex,过期时间(秒)
         px,过期时间(毫秒)
         nx,如果设置为True,则只有name不存在时,当前set操作才执行
         xx,如果设置为True,则只有name存在时,岗前set操作才执行

    setnx(name, value)

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

    setex(name,time ,value) # time,过期时间(数字秒 或 timedelta对象)

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

    mset(*args, **kwargs)# mset(k1='v1', k2='v2')or mget({'k1''v1''k2''v2'})

    get(name)#获取值

    mget(keys, *args)# mget('ylr', 'wupeiqi') or rmget(['ylr''wupeiqi'])

    getset(name, value)#设置新值并获取原来的值

    getrange(key, start, end) # name,Redis 的 name    # start,起始位置(字节)    # end,结束位置(字节)

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

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

    bitcount(key, start=None, end=None)# 获取name对应的值的二进制表示中 1 的个数

    strlen(name)# 返回name对应值的字节长度(一个汉字3个字节)

    incr(self, name, amount=1)# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

    incrbyfloat(self, name, amount=1.0)# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。

    decr(self, name, amount=1)# 自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。

    append(key, value)# 在redis name对应的值后面追加内容

    2. Hash操作

    hash表现形式上有些像pyhton中的dict,可以存储一组关联性较强的数据 , redis中Hash在内存中的存储格式如下图:  

     hset(name, key, value)# name对应的hash中设置一个键值对(不存在,则创建;否则,修改)

     hmset(name, mapping)#在name对应的hash中批量设置键值对hmset('xx', {'k1':'v1', 'k2': 'v2'})

     hget(name,key)# 在name对应的hash中获取根据key获取value

     hmget(name, keys, *args)# 在name对应的hash中获取多个key的值

     hgetall(name)#获取name对应hash的所有键值

     hlen(name)## 获取name对应的hash中键值对的个数

     hkeys(name)# 获取name对应的hash中所有的key的值

     hvals(name)# 获取name对应的hash中所有的value的值

     hexists(name, key)# 检查name对应的hash是否存在当前传入的key,返回1是ture.0是false

     hdel(name,*keys)# 将name对应的hash中指定key的键值对删除

     hincrby(name, key, amount=1)# 自增name对应的hash中的指定key的值,不存在则创建key=amount

     hincrbyfloat(name, key, amount=1.0)# 自增name对应的hash中的指定key的值,不存在则创建key=amount

     hscan(name, cursor=0, match=None, count=None) 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆

     hscan_iter(name, match=None, count=None)# 利用yield封装hscan创建生成器,实现分批去redis中获取数据

    3. list

    List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:  

     lpush(name,values)# 在name对应的list中添加元素,每个新的元素都添加到列表的最左边

     lpushx(name,value)# 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边

     llen(name)# name对应的list元素的个数

     linsert(name, where, refvalue, value))# 在name对应的列表的某一个值前或后插入一个新值,实例:linsert username before pivot  fall

     lpop(name)# 在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素

     lset(name, index, value)# 对name对应的list中的某一个索引位置重新赋值

     lindex(name, index)#在name对应的列表中根据索引获取列表元素

     lrange(name, start, end)# 在name对应的列表分片获取数据

     ltrim(name, start, end)# 在name对应的列表中移除没有在start-end索引之间的值

     rpoplpush(src, dst)# 从一个列表取出最右边的元素,同时将其添加至另一个列表的最左边

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

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

    4.set集合操作

     Set操作,Set集合就是不允许重复的列表

     sadd(name,values)# name对应的集合中添加元素

     scard(name)#获取name对应的集合中元素个数

     sdiff(keys, *args)#在第一个name对应的集合中且不在其他name对应的集合的元素集合

     sdiffstore(dest, keys, *args)# 获取第一个name对应的集合中且不在其他name对应的集合,再将其新加入到dest对应的集合中

     sinter(keys, *args)# 获取多一个name对应集合的并集

     sinterstore(dest, keys, *args)# 获取多一个name对应集合的并集,再讲其加入到dest对应的集合中

     sismember(name, value)# 检查value是否是name对应的集合的成员

     smembers(name)# 获取name对应的集合的所有成员

     smove(src, dst, value)# 将某个成员从一个集合中移动到另外一个集合

     spop(name)# 从集合的右侧(尾部)移除一个成员,并将其返回

     srandmember(name, numbers)# 从name对应的集合中随机获取 numbers 个元素

     srem(name, values)# 在name对应的集合中删除某些值

     sunion(keys, *args)# 获取多一个name对应的集合的并集

     sunionstore(dest,keys, *args) #获取多一个name对应的集合的并集,并将结果保存到dest对应的集合中

     sscan(name, cursor=0, match=None, count=None)## 同字符串的操作,用于增量迭代分批获取元素,避免内存消耗太大
     sscan_iter(name, match=None, count=None)

    有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。

    zadd(name, *args, **kwargs)# 在name对应的有序集合中添加元素,# zadd('zz', 'n1', 1, 'n2', 2)

    zcard(name)# 获取name对应的有序集合元素的数量

    zcount(name, min, max)# 获取name对应的有序集合中分数 在 [min,max] 之间的个数

    zincrby(name, value, amount)# 自增name对应的有序集合的 name 对应的分数

    zrange( name, start, end, desc=False, withscores=False, score_cast_func=float) # 按照索引范围获取name对应的有序集合的元素

    zrank(name, value)# 获取某个值在 name对应的有序集合中的排行(从 0 开始)

    zrem(name, values)# 删除name对应的有序集合中值是values的成员

    zremrangebyrank(name, min, max)# 根据排行范围删除

    zremrangebyscore(name, min, max)# 根据分数范围删除

    zscore(name, value)# 获取name对应有序集合中 value 对应的分数

    zinterstore(dest, keys, aggregate=None)# 获取两个有序集合的交集,如果遇到相同值不同分数,则按照aggregate进行操作,# aggregate的值为:  SUM  MIN  MAX

    zunionstore(dest, keys, aggregate=None)# 获取两个有序集合的并集,如果遇到相同值不同分数,则按照aggregate进行操作

    zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
    zscan_iter(name, match=None, count=None,score_cast_func=float)# 同字符串相似,相较于字符串新增score_cast_func,用来对分数进行操作

    其他常用操作

    delete(*names)# 根据删除redis中的任意数据类型

    exists(name)# 检测redis的name是否存在

    keys(pattern='*')# 根据模型获取redis的name, keys n*

    expire(name ,time)# 为某个redis的某个name设置超时时间

    rename(src, dst)# 对redis的name重命名为

    move(name, db))# 将redis的某个值移动到指定的db下

    randomkey()# 随机获取一个redis的name(不删除)

    type(name)# 获取name对应值的类型

    scan(cursor=0, match=None, count=None)
    scan_iter(match=None, count=None)# 同字符串操作,用于增量迭代获取key

    注释:

    redis 一共用16个DB。

  • 相关阅读:
    C++程序设计实验-3
    函数
    C++简单程序设计
    C++程序设计实验-2
    C++程序设计实验-1
    项目总结
    团队测试计划
    第二阶段团队绩效评分
    第二阶段scrum-10
    第二阶段scrum-9
  • 原文地址:https://www.cnblogs.com/anhao-world/p/13897176.html
Copyright © 2020-2023  润新知