Python redis模块的使用教程指南

2022-10-21 18:25:46
目录
1.安装模块2.连接池3.redis 基本命令 String4.redis 基本命令 hash5.redis基本命令 list6.redis基本命令 set7.其他常用操作8.管道

1.安装模块

Python>

pip install redis

测试安装:

redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('name', 'dahezhiquan')  # 设置 name 对应的值
print(r['name'])  # dahezhiquan
print(r.get('name'))  # dahezhiquan
print(type(r.get('name')))  # <class 'str'>

2.连接池

redis-py>

默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池。

redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('name', 'dahe')
print(r.get('name'))  # dahe

3.redis>

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

语法:

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

参数:

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

    案例1:(3秒后,name的值就会变为None)

    redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(host='localhost', port=6379, decode_responses=True)
    r.set('name', 'xiaoqian', ex=3)  # 设置过期时间为3秒
    print(r.get('name'))  # xiaoqian
    

    三秒后再次获取name的值:

    print(r.get('name'))  # None
    

    mset,批量获取值:

    redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(host='localhost', port=6379, decode_responses=True)
    r.set("name1", "xiaoqian")
    r.set("name2", "xiaoguo")
    print(r.mget('name1', 'name2'))  # ['xiaoqian', 'xiaoguo']
    

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

    redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(host='localhost', port=6379, decode_responses=True)
    print(r.getset("name1", "heihei"))  # xiaoqian
    print(r.get("name1"))  # heihei
    

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

    print(r.strlen("name"))
    

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

    参数:

      name - Redis的nameamount - 自增数(必须是整数)
      redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
      r = redis.Redis(host='localhost', port=6379, decode_responses=True)
      r.set("like", 521)
      r.incr("like", amount=1)
      print(r.get("like"))  # 522
      

      可以使用incrbyfloat方法自增浮点数类型

      使用decr进行自减操作

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

      参数:

        key - redis的namevalue - 要追加的字符串
        r.append("name1", "world")
        print(r.get("name1"))
        

        4.redis>

        hset(name, key, value),单个增加–修改:

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

        参数:

          name - redis的namekey - name对应的hash中的keyvalue - name对应的hash中的value
          redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
          r = redis.Redis(host='localhost', port=6379, decode_responses=True)
          r.hset("dahe", "name", "guo")
          r.hset("dahe", "age", 28)
          # 获取dahe的所有key
          print(r.hkeys("dahe"))  # ['name', 'age']
          print(r.hget("dahe", "name"))  # guo
          print(r.hmget("dahe", "name", "age"))  # ['guo', '28']
          

          hmset(name, mapping),在name对应的hash中批量设置键值对:

          redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
          r = redis.Redis(host='localhost', port=6379, decode_responses=True)
          r.hmset("hash1", {"k1": "v1", "k2": "v2", "k3": "v3"})
          print(r.hmget("hash1", "k1", "k2", "k3"))  # ['v1', 'v2', 'v3']
          

          hgetall(name),取出所有的键值对:

          print(r.hgetall("dahe"))  # {'name': 'guo', 'age': '28'}
          

          hvals(name),得到所有的value:

          print(r.hvals("dahe"))  # ['guo', '28']
          

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

          r.hdel("hash1", "k1")
          print(r.hgetall("hash1"))  # {'k2': 'v2', 'k3': 'v3'}
          

          hincrby(name, key, amount=1),自增自减整数:

          参数:

          name - redis中的name

          key - hash对应的key

          amount - 自增数(整数,负数表示自减)

          hincrbyfloat(name, key, amount=1.0)表示自增自减浮点数

          5.redis基本命令>

          lpush(name,values),增加:

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

          redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
          r = redis.Redis(host='localhost', port=6379, decode_responses=True)
          r.lpush("score", 10, 20, 30, 40)
          print(r.lrange("score", 0, -1))  # ['40', '30', '20', '10']
          

          rpush表示从右边增加

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

          参数:

            name - redis的nameindex - list的索引位置value - 要设置的值
            redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
            r = redis.Redis(host='localhost', port=6379, decode_responses=True)
            r.lset("score", 0, 521)
            print(r.lrange("score", 0, 4))  # ['521', '30', '20', '10', '40']
            

            r.lrem(name, value, num),删除:

            参数:

            name - redis的name

            value - 要删除的值

            num - num=0,删除列表中所有的指定值;

              num=2 - 从前到后,删除2个, num=1,从前到后,删除左边第1个num=-2 - 从后向前,删除2个
              r.lrem("list2", "11", 1)    # 将列表中左边第一次出现的"11"删除
              print(r.lrange("list2", 0, -1))
              r.lrem("list2", "99", -1)    # 将列表中右边第一次出现的"99"删除
              print(r.lrange("list2", 0, -1))
              r.lrem("list2", "22", 0)    # 将列表中所有的"22"删除
              print(r.lrange("list2", 0, -1))
              

              lindex(name, index),取值:

              print(r.lindex("list2", 0))  # 取出索引号是0的值
              

              自定义增量迭代:

              由于redis类库中没有提供对列表元素的增量迭代,如果想要循环name对应的列表的所有元素,那么就需要获取name对应的所有列表。

              但是,如果列表非常大,那么就有可能在第一步时就将程序的内容撑爆,所有有必要自定义一个增量迭代的功能:

              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('list2'): # 遍历这个列表
                  print(item)
              

              6.redis基本命令>

              sadd(name,values),新增:

              pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
              r = redis.Redis(connection_pool=pool)
              r.sadd("set1", 33, 44, 55, 66)  # 往集合中添加元素
              print(r.scard("set1"))  # 4(集合长度)
              print(r.smembers("set1"))  # {'66', '44', '55', '33'}(取出集合所有元素)
              

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

              r.srem("set1", 66)
              print(r.smembers("set1"))  # {'44', '33', '55'}
              

              python-redis set支持集合的所有操作,请参考官方文档

              7.其他常用操作

              delete(*names),删除:

              根据删除redis中的任意数据类型(string、hash、list、set、有序set)

              pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
              r = redis.Redis(connection_pool=pool)
              r.delete("set2")
              

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

              r.expire("set1", time=3)
              

              rename(src, dst),重命名:

              r.rename("dahe", "dahe-1")
              

              8.管道

              redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline是原子性操作

              实例:

              pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
              r = redis.Redis(connection_pool=pool)
              pipe = r.pipeline()  # 创建一个管道
              pipe.set('name', 'jack')
              pipe.set('role', 'sb')
              pipe.sadd('age', '18')
              pipe.execute()

              以上就是Python redis模块的使用教程指南的详细内容,更多关于Python redis模块的资料请关注易采站长站其它相关文章!