开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

python连接redis

简介:
+关注继续查看

一、安装服务

下载、编译安装

1
2
3
4
wget http://download.redis.io/releases/redis-3.0.1.tar.gz
tar -zxvf redis-3.0.1.tar.gz
cd redis-3.0.1
make


二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:

1
$ src/redis-server &


客户端也可以如下安装:

1
pip install redis



二、redis连接示例

    redis是以key-value的形式存储的。首先我们将redis所在主机的ip和发布端口作为参数实例化了一个对象r,然后去设置set和取出get值。


例子:

1
2
3
4
5
6
7
8
9
import redis
redis_config = {
"host""192.168.2.230",
"port"6379
}
= redis.Redis(**redis_config)
r.set("name","huangzhenping")
print(r.keys())
print(r.get("name"))


运行结果:

name

huangzhenping



三、连接池

    redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池


例子:

1
2
3
4
5
6
7
8
9
import redis
redis_config = {
    "host""192.168.2.230",
    "port"6379
}
pool = redis.ConnectionPool(**redis_config)
= redis.Redis(connection_pool=pool)
r.set("age","27")
print(r.get("age"))


运行结果:

27


或者将连接池包装成一个函数,方便调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import redis
def get_redis_connect():
    redis_config = {
        "host""192.168.2.230",
        "port"6379
    }
     
    pool = redis.ConnectionPool(**redis_config)
    = redis.Redis(connection_pool=pool)
    return r
     
if __name__ == "__main__":
    = get_redis_connect()
    print(r.keys())



四、管道

    redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。需要注意到是redis必须在处理完所有命令前先缓存起所有命令的处理结果,打包的命令越多,缓存消耗内存也越多。


例子:对比使用管道和不使用管道处理的时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import redis
import datetime
def withpipe(r):
    pipe = r.pipeline(transaction=True)
    for in xrange(11000):
        key = "key1_" + str(i)
        value = "value1_" + str(i)
        pipe.set(key, value)
    pipe.execute()
     
def withoutpipe(r):
    for in xrange(11000):
        key = "key2_" + str(i)
        value = "value2_" + str(i)
        r.set(key, value)
         
redis_config = {
    "host""192.168.2.230",
    "port"6379,
    "db"0
}
 
if __name__ == "__main__":
    pool = redis.ConnectionPool(**redis_config)
    r1 = redis.Redis(connection_pool=pool)
    r2 = redis.Redis(connection_pool=pool)
    start = datetime.datetime.now()
     
    withpipe(r1)
    end = datetime.datetime.now()
    t_time = (end - start).microseconds
    print("withpipe time is: {0}".format(t_time))
    start = datetime.datetime.now()
     
    withoutpipe(r2)
    end = datetime.datetime.now()
    t_time = (end - start).microseconds
    print("withoutpipe time is: {0}".format(t_time))


运行结果:

withpipe time is: 17000

withoutpipe time is: 105000










本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/2043948,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python 连接 mysql 错误
python 连接 mysql 错误
51 0
python编程-22:BeautifulSoup库入门
python编程-22:BeautifulSoup库入门
20 0
python编程-17:turtle绘制时钟程序
python编程-17:turtle绘制时钟程序
21 0
python编程-16:tkinter绘制聊天窗口_
python编程-16:tkinter绘制聊天窗口_
19 0
python编程-14:tkinter绘制接收事件的图形
python编程-14:tkinter绘制接收事件的图形
6 0
python编程-13:面向对象的特点
python编程-13:面向对象的特点
12 0
python编程-12:类的定义-面向对象
python编程-12:类的定义-面向对象
7 0
python编程-11:程序设计方法_
python编程-11:程序设计方法_
12 0
python编程:计算词频的函数绘制图形-8
python编程:计算词频的函数绘制图形-8
21 0
python编程:合并文本_利用列表或字典将两个通讯录文本合并-7
python编程:合并文本_利用列表或字典将两个通讯录文本合并-7
33 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Redis Cluster的基本原理
立即下载
Redis的开发规范和常见问题
立即下载
Python系列直播第一讲——Python中的一切皆对象
立即下载