博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python连接redis
阅读量:6630 次
发布时间:2019-06-25

本文共 2611 字,大约阅读时间需要 8 分钟。

一、安装服务

下载、编译安装

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
(
1
1000
):
        
key 
= 
"key1_" 
+ 
str
(i)
        
value 
= 
"value1_" 
+ 
str
(i)
        
pipe.
set
(key, value)
    
pipe.execute()
     
def 
withoutpipe(r):
    
for 
in 
xrange
(
1
1000
):
        
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,如需转载请自行联系原作者
你可能感兴趣的文章
学术休假-破译密码
查看>>
IE浏览器表格内外边框不显示问题
查看>>
克利夫兰将保留詹姆斯巨幅海报 它已成总冠军象征
查看>>
PHP微信模板消息发送
查看>>
14.抽象类
查看>>
vue-pos : 子组件与子组件通讯
查看>>
停止冒泡
查看>>
Guid的生成和数据修整(去除空格和小写字符)
查看>>
3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
查看>>
关于NSMutableDictionary setValue:value forKey:key 以及 setobject:value forkey:key 的理解
查看>>
ORACLE 定时执行存储过程
查看>>
背包问题总结
查看>>
objects classes and metaclasses in Objective-C
查看>>
自行车需求预测
查看>>
状态机
查看>>
Linux学习第十一篇之压缩解压命令gzip、gunzip、tar、zip、unzip、bzip2、bunzip2
查看>>
php开发之LNMP环境搭建(PHP7+phalcon3)
查看>>
windows Server2012 IIS8.0配置安装完整教程
查看>>
Cap28_项目管理过程实践和案例分析
查看>>
杭电2037(今年暑假不AC)
查看>>