介绍使用同一VPC内弹性云主机ECS上的Python Redis客户端redis-py连接Redis实例的方法。更多的客户端的使用方法请参考Redis客户端。
说明连接单机、主备、Proxy集群实例建议使用redis-py,Cluster集群实例建议使用redis-py-cluster。
前提条件
- 已成功申请Redis实例,且状态为“运行中”。
- 已创建弹性云主机,创建弹性云主机的方法,请参见《弹性云主机用户指南》。
- 如果弹性云主机为Linux系统,该弹性云主机必须已经安装python编译环境。
操作步骤
步骤 1 查看并获取待连接Redis实例的IP地址和端口。
具体步骤请参见查看实例信息。
步骤 2 登录弹性云主机。
本章节以弹性云主机操作系统为centos为例介绍通过python redis客户端连接实例。
步骤 3 连接Redis实例。
如果系统没有自带Python,可以使用yum方式安装。
yum install python
说明要求系统python版本为3.6+,当默认python版本小于3.6时,可通过以下操作修改python默认版本。
- 删除python软链接文件: rm -rf python
- 重新创建新指向python:ln -s pythonX.X.X python,其中X为python具体版本号。
- 若是单机、主备、proxy集群实例。
a. 安装Python和Python Redis客户端redis-py。
i. 如果系统没有自带Python,可以使用yum方式安装。
ii. 下载并解压redis-py。
wget https://github.com/andymccurdy/redis-py/archive/master.zip
unzip master.zip
iii. 进入到解压目录后安装Python Redis客户端redis-py。
python setup.py install
安装后执行python命令,返回如下信息说明成功安装redis-py:
执行python
b. 使用redis-py客户端连接实例。以下步骤以命令行模式进行示例(也可以将命令写入python脚本中再执行):
i. 执行python命令,进入命令行模式。返回如下信息说明已进入命令行模式:
进入命令行模式
ii. 在命令行中执行以下命令,连接Redis实例。
r = redis.StrictRedis(host='XXX.XXX.XXX.XXX', port=6379, password='******');
其中,XXX.XXX.XXX.XXX为Redis实例的IP地址,“6379”为Redis实例的端口。IP地址和端口获取见步骤1,请按实际情况修改后执行。 ********** 为创建Redis实例时自定义的密码,请按实际情况修改后执行。
界面显示一行新的命令行,说明连接Redis实例成功。可以输入命令对数据库进行读写操作。
连接redis成功
- 若是Cluster集群实例。
b. 安装redis-py-cluster客户端。
i. 执行以下命令下载released版本。
wget https://github.com/Grokzen/redis-py-cluster/releases/download/2.1.3/redis-py-cluster-2.1.3.tar.gz
ii. 解压压缩包。
tar -xvf redis-py-cluster-2.1.3.tar.gz
iii. 进入到解压目录后安装Python Redis客户端redis-py-cluster。
python setup.py install
c. 使用redis-py-cluster客户端连接Redis实例。
以下步骤以命令行模式进行示例(也可以将命令写入python脚本中再执行):
i. 执行python命令,进入命令行模式。
ii. 在命令行中执行以下命令,连接Redis实例。如果实例为免密访问,则省略命令中的, password='******'
>>> from rediscluster import RedisCluster
>>> startup_nodes = [{"host": "192.168.0.143", "port": "6379"},{"host": "192.168.0.144", "port": "6379"},{"host": "192.168.0.145", "port": "6379"},{"host": "192.168.0.146", "port": "6379"}]
>>> rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True, password='******')
>>> rc.set("foo", "bar")
True
>>> print(rc.get("foo"))
'bar'