python连接redis

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介:

一、安装服务

下载、编译安装

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,如需转载请自行联系原作者
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5天前
|
NoSQL Redis 数据库
|
7天前
|
NoSQL 算法 Java
诡异!Redis Proxy RT上升后连接倾斜
本文细致地描述了关于Redis Proxy RT上升后连接倾斜问题的排查过程和根本原因,最后给出了优化方案。
|
7天前
|
NoSQL Ubuntu 安全
RedisDesktopManager连接Ubuntu的Redis失败解决办法
通过仔细检查您的系统配置与网络设置,您通常可以解决RDM连接到Ubuntu服务器上的Redis实例的问题。始终牢记在公开或者不信任的网络上,以安全为先,避免泄露敏感信息。
13 2
|
20天前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
20天前
|
弹性计算 NoSQL 网络安全
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
|
10天前
|
JSON 数据挖掘 API
在会议系统工程中,Python可以用于多种任务,如网络请求(用于视频会议的连接和会议数据的传输)、数据分析(用于分析会议参与者的行为或会议效果)等。
在会议系统工程中,Python可以用于多种任务,如网络请求(用于视频会议的连接和会议数据的传输)、数据分析(用于分析会议参与者的行为或会议效果)等。
|
12天前
|
Unix Linux Python
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
|
20天前
|
NoSQL JavaScript Redis
若依后端部署---若依部署,Redis在D盘的project的应用工具当中,在连接过程中,先用Xshell连接若依,RDM在应用工具里,同时host的主机也要写好
若依后端部署---若依部署,Redis在D盘的project的应用工具当中,在连接过程中,先用Xshell连接若依,RDM在应用工具里,同时host的主机也要写好
|
20天前
|
NoSQL Java 关系型数据库
软件开发常用之若依修改之添加数据库,添加redis,利用RDM连接宝塔
软件开发常用之若依修改之添加数据库,添加redis,利用RDM连接宝塔
|
20天前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码