【第四章 客户端】4.3、Python客户端redis-py

in with 0 comment

Python客户端redis-py

因为本书主要使用Java语言作为编程语言,所以对Python的客户端redis-py不会太详细介绍,主要介绍以下几个方面:

  1. 获取redis-py

    Redis官网提供了很多Python语言的客户端 ( http://redis.io/clients#python ),但最被广泛认可的客户端是 redis-py。redis-py需要Python2.7以上版本,有关Python的安装这里不会介 绍,主要介绍一下如何获取安装redis-py,方法有三种:

    • 第一,使用pip进行安装:

    pip install redis

    • 第二,使用easy_install进行安装:

    easy_install redis

    • 第三,使用源码安装:以2.10.5版本为例子进行说明,只需要如下四步:
    wget https://github.com/sndymccurdy/redis-py/archive/2.10.5.zip
    unzip redis-2.10.5.zip
    cd redis-2.10.5
    # 安装 redis-py
    python setup.py install
    
  2. redis-py的基本使用方法

    redis-py的使用方法也比较简单,下面将逐步介绍。

    1)导入依赖库:

    import redis

    2)生成客户端连接:需要Redis的实例IP和端口两个参数:

    client = redis.StrictRedis(host='127.0.0.1', port=6379)

    3)执行命令:redis-py的API保留了RedisAPI的原始风格,所以使用起来不会有 不习惯的感觉:

    # True
    client.set(key, "python-redis")
    # world
    client.get(key)
    

    下面代码给出redis-py操作Redis五种数据结构的实例,输出结果写在注释中:

    #1.string
    #输出结果:True
    client.set("hello", "world")
    #输出结果:world
    client.get("hello")
    #输出结果 1
    clinet.incr("counter")
    
    #2.hash
    client.hset("myhash", "f1", "v1")
    client.hset("myhash", "f2", "v2")
    #输出结果:{'f1': 'v1', 'f2': 'v2'}
    client.hgetall("myhash")
    
    #3.list
    client.rpush("mylist", "1")
    client.rpush("mylist", "2")
    client.rpush("mylist", "3")
    #输出结果:['1', '2', '3']
    client.lrange("mylist", 0, -1)
    
    #4.set
    client.sadd("myset", "a")
    clinet.sadd("myset", "b")
    client.sadd("myset", "a")
    #输出结果:set(['a', 'b'])
    client.smembers("myset")
    
    #5.zset
    client.zadd("myzset", "99", "tom")
    client.zadd("myzset", "66", "peter")
    client.zadd("myzset", "33", "james")
    #输出结果:[('james", 33.0), ('peter', 66.0), ('tom', 99.0)]
    client.zrange("myzset", 0, -1, withscores=True)
    
  3. redis-py中Pipeline的使用方法

    redis-py支持Redis的Pipeline功能,下面用一个简单的示例进行说明。

    1)引入依赖,生成客户端连接:

    import redis
    client = redis.StrictRedis(host='127.0.0.1', port=6379)
    

    2)生成Pipeline:注意client.pipeline包含了一个参数,如果 transaction=False代表不使用事务:

    pipeline = client.pipeline(transaction=False)
    

    3)将命令封装到Pipeline中,此时命令并没有真正执行:

    pipeline.set("hello", "world")
    pipeline.incr("counter")
    

    4)执行Pipeline:

    #[True, 3]
    result = pipeline.execute()
    

    下面将用redis-py的Pipeline实现mdel功能:

    import redis
    def mdel( keys ):
        client = redis.StrictRedis(host='127.0.0.1', port=6379)
        pipeline = client.pipeline(transaction=False)
        for key in keys:
            print pipeline.delete(key)
        return pipeline.execute();
    
  4. redis-py中的Lua脚本使用方法

    redis-py中执行Lua脚本和redis-cli十分类似,redis-py提供了三个重要的函 数实现Lua脚本的执行:

    eval(String script, int keyCount, String... params)
    script_load(String script)
    evalsha(String sha1, int keyCount, String... params)
    

    eval函数有三个参数:分别是:

    • script:Lua脚本内容
    • keyCount:键的个数
    • params:相关参数KEYS和ARGV

    script_load和evalsha函数要一起使用,首先使用script_load将脚本加载到 Redis中,然后evalsha函数用来执行脚本的哈希值,它需要三个参数:

    • scriptSha:脚本的SHA1。
    • keyCount:键的个数。
    • params:相关参数KEYS和ARGV。