因为本教程主要使用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 install
4.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");