因为本教程主要使用Java语言作为编程语言,所以对Python的客户端redis-
py不会太详细介绍,主要介绍以下几个方面:
·获取redis-py。
·redis-py的基本使用方法。
·redis-py的Pipeline的使用。
·redis-py的Lua脚本使用。

4.3.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/andymccurdy/redis-py/archive/2.10.5.zip
 unzip redis-2.10.5.zip
 cd redis-2.10.5
 # 安装 redis-py
 python setup.py install4.3.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保留了Redis API的原始风格,所以使用起
 来不会有不习惯的感觉:
 # True
 client.set(key, "python-redis")
 # world
 client.get(key)
 整个实例代码如下:
 import redis
 client = redis.StrictRedis(host='127.0.0.1', port=6379)
 key = "hello"
 setResult = client.set(key, "python-redis")
 print setResult
 value = client.get(key)
 print "key:" + key + ", value:" + value
 输出结果为:
 True
 key:hello, value:python-redis下面代码给出redis-py操作Redis五种数据结构的示例,输出结果写在注
 释中:#1.string
# 输出结果: True
client.set("hello","world")
# 输出结果: world
client.get("hello")
# 输出结果: 1
client.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")
client.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)4.3.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()
 和4.2.4小节一样,将用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.3.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。
 以一个最简单的Lua脚本为例进行说明:
 return redis.call('get',KEYS[1])
 在redis-py中执行,方法如下:
 import redis
 client = redis.StrictRedis(host='127.0.0.1', port=6379)
 script = "return redis.call('get',KEYS[1])"
 # 输出结果为 world
 print client.eval(script,1,"hello")
 script_load和evalsha函数要一起使用,首先使用script_load将脚本加载到
 Redis中,代码如下:
 scriptSha = client.script_load(script)evalsha函数用来执行脚本的哈希值,它需要三个参数:
 ·scriptSha:脚本的SHA1。
 ·keyCount:键的个数。
 ·params:相关参数KEYS和ARGV。
 执行效果如下:
 print jedis.evalsha(scriptSha, 1, "hello");
 完整代码如下:
 import redis
 client = redis.StrictRedis(host='127.0.0.1', port=6379)
 script = "return redis.call('get',KEYS[1])"
 scriptSha = client.script_load(script)
 print client.evalsha(scriptSha, 1, "hello");