zoukankan      html  css  js  c++  java
  • Python&Redis

    一、单机

      1、安装redis模块

    sudo pip3 install redis
    或
    sudo easy_install redis

         源码地址:https://github.com/WoLpH/redis-py  、https://github.com/redis/redis-py

      2、单机连接

        redis模块提供两个类Redis和StrictRedis用于实现大部分官方的命令。

        Redis是StrictRedis的子类,用于向后兼用旧版本

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

    import redis # 导入redis模块
    
    if __name__ == '__main__':
        # StrictRedis
        r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True)
        # Redis
        # r = redis.Redis(host='localhost', port=6379, decode_responses=True)
        r.set('name', 'yangyongjie')
        test = r.get('name')
        print(test)

      3、连接池

        redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。

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

    import redis    # 导入redis 模块
    
    pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(connection_pool=pool)  
    r.set('name', 'runoob')  # 设置 name 对应的值
    print(r.get('name'))  # 取出键 name 对应的值

      4、基本命令

        1)String

          ①:set

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

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

          参数:

            ex - 过期时间(秒)

            px - 过期时间(毫秒)

            nx - 如果设置为True,则只有name不存在时,当前set操作才执行

            xx - 如果设置为True,则只有name存在时,当前set操作才执行

          ②:setnx

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

          ③:setex(name, time, value):设置值并设置过期时间,单位秒

          ④:mset(*args, **kwargs):批量设置值

          ⑤:mget(keys, *args):批量获取

          

        2)hash

          ①:hset(name, key, value)

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

           参数:

            name - redis的name

            key - name对应的hash中的key

            value - name对应的hash中的value

          ②:hmset(name, mapping)

            在name对应的hash中批量设置键值对

            参数:

              在name对应的hash中批量设置键值对

              mapping - 字典,如:{'k1':'v1', 'k2': 'v2'}

          ③:hgetall(name)

            取出所有的键值对

      5、管道(pipeline)

        redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作

        如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作

        管道(pipeline)是redis在提供单个请求中缓冲多条服务器命令的基类的子类。它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的功能  

    import redis
    
    pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(connection_pool=pool)
    
    # pipe = r.pipeline(transaction=False)    # 默认的情况下,管道里执行的命令可以保证执行的原子性,执行pipe = r.pipeline(transaction=False)可以禁用这一特性。
    # pipe = r.pipeline(transaction=True)
    pipe = r.pipeline() # 创建一个管道
    
    pipe.set('name', 'jack')
    pipe.sadd('faz', 'baz')
    pipe.incr('num')    # 如果num不存在则vaule为1,如果存在,则value自增1
    pipe.execute()
    # 管道的命令可以写在一起
    # pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()

    二、集群

      python的redis库是不支持集群操作的,推荐库:redis-py-cluster

      文档地址:https://redis-py-cluster.readthedocs.io/en/master/

       1、安装 

      pip install redis-py-cluster

       2、连接

    from rediscluster import RedisCluster
    
    
    def redis_cluster():
        redis_nodes = [{'host': '127.0.0.1', 'port': 6379},
                       {'host': '127.0.0.1', 'port': 6379},
                       {'host': '127.0.0.1', 'port': 6379}
                       ]
        redis_connect = None
        try:
            redis_connect = RedisCluster(startup_nodes=redis_nodes, password='cluster_password', decode_responses=True)
        except Exception as e:
            print(e)
        return redis_connect
    
    
    if __name__ == '__main__':
        redis = redis_cluster()
        redis.set('name', 'yangyongjie')
        print(redis.get('name'))

    END.

  • 相关阅读:
    Macaca初体验-Android端(Python)
    Macaca初体验-Android端(Python)
    Macaca初体验-Android端(Python)
    什么是流媒体技术
    什么是流媒体技术
    什么是流媒体技术
    什么是流媒体技术
    设备可以和人说话了 就问你怕不怕?
    设备可以和人说话了 就问你怕不怕?
    你都有什么副业?
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/15665653.html
Copyright © 2011-2022 走看看