1.Redis
1.1 安装
- 当前ubuntu虚拟机中已经安装好了redis,以下步骤可以跳过
- 以后自己安装过程如下:redis下载链接:x 指的是版本号 http://download.redis.io/releases/redis-x.x.x.tar.gz
- step1:下载
wget http://download.redis.io/releases/redis-x.x.x.tar.gz
- step2:解压
tar xzf redis-x.x.x.tar.gz
- step3:移动,放到usr/local⽬录下
sudo mv ./redis-x.x.x /usr/local/redis/
- step4:进⼊redis⽬录
cd /usr/local/redis/
- step5:生成
sudo make
- step6:测试,这段运⾏时间会较⻓
sudo make test
- step7:安装,将redis的命令安装到
/usr/local/bin/
⽬录
sudo make install
- step8:安装完成后,我们进入目录
/usr/local/bin
中查看
cd /usr/local/bin
ls -all
redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof AOF文件修复工具
redis-check-rdb RDB文件检索工具
- step9:配置⽂件,移动到
/etc/
⽬录下
配置⽂件⽬录为/usr/local/redis/redis.conf
sudo cp /usr/local/redis/redis.conf /etc/redis/
- step9:其他补充
Mac 上安装 Redis:https://brew.sh/
使用 brew 安装 Redis:https://www.cnblogs.com/cloudshadow/p/mac_brew_install_redis.html
1.2 配置
- Redis的配置信息在
/etc/redis/redis.conf
下
查看 sudo vi /etc/redis/redis.conf
- 绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
- bind 127.0.0.1
- 端⼝:默认为6379
- port 6379
- 是否以守护进程运⾏
- 如果以守护进程运行,则不会在命令⾏阻塞,类似于服务
- 如果以⾮守护进程运⾏,则当前终端被阻塞
- 设置为yes表示守护进程,设置为no表示⾮守护进程
- 推荐设置为yes daemonize yes
- 数据⽂件
- dbfilename dump.rdb
- 数据⽂件存储路径
- dir /var/lib/redis
- ⽇志⽂件
- logfile “/var/log/redis/redis-server.log”
- 数据库,默认有16个
- database 16
- 主从复制,类似于双机备份
- slaveof host port
- 参考资料
- redis配置信息http://www.gaodaima.com/ljphilp/article/details/52934933
1.3 服务器端和客户端命令
1.3.1 服务器端
- 服务器端的命令为redis-server
- 可以使⽤help查看帮助⽂档
- redis-server –help
- 个人习惯
- ps aux | grep redis 查看redis服务器进程
- sudo kill -9 pid 杀死redis服务器
- sudo redis-server /etc/redis/redis.conf 指定加载的配置文件
1.3.2 客户端
- 客户端的命令为redis-cli
- 可以使⽤help查看帮助⽂档
- redis-cli –help
- 连接redis
- redis-cli
- 运⾏测试命令
- ping
- 切换数据库
- 数据库没有名称,默认有16个,通过0-15来标识,连接redis默认选择第一个数据库
- select 10
1.4 数据操作
<span>键命令 </span>1)查看所有键:keys * 2)查看名称中包含a的键:keys a* 3<span>)判断键是否存在,如果存在返回1,不存在返回0:exists key1 </span>4<span>)查看键对应的value的类型:type key </span>5)删除键及对应的值:<span>del</span><span> key1 key2 ... </span>6<span>)设置过期时间,以秒为单位:expire key seconds </span>7)查看有效时间,以秒为单位:ttl key
www#gaodaima.com来源gao@!dai!ma.com搞$$代^@码!网搞代码
键命令
<span>hash类型: hash⽤于存储对象,对象的结构为属性、值 值的类型为string </span>1<span>、增加、修改 设置单个属性:hset key field value 设置多个属性:hmset key field1 value1 field2 value2 ... </span>2<span>、获取 获取指定键所有的属性:hkeys key 获取所有属性的值:hvals key 获取⼀个属性的值:hget key field 获取多个属性的值:hmget key field1 field2 ... </span>3<span>、删除 删除整个hash键及值,使⽤del命令:hdel key ...</span>
hash
<span>list类型 列表的元素类型为string 按照插⼊顺序排序 </span>1<span>、增加 在左侧插⼊数据:lpush key value1 value2 ... 在右侧插⼊数据:rpush key value1 value2 ... 在指定元素的前或后插⼊新元素: linsert key before或after 现有元素 新元素 </span>2<span>、获取 返回列表⾥指定范围内的元素:range key start stop 设置指定元素的值:lset key index value </span>3<span>、删除 删除指定元素 将列表中前count次出现的值为value的元素移除 count </span>><span> 0: 从头往尾移除 count </span><<span> 0: 从尾往头移除 count </span>=<span> 0: 移除所有 lrem key count value </span>4<span>、截取修剪 修剪(截取) 在[start stop]区间内的元素,区间外的元素全部删除 ltrim key start stop</span>
list
<span>set类型 </span>1<span>)⽆序集合 </span>2<span>)元素为string类型 </span>3<span>)元素具有唯⼀性,不重复 </span>4<span>)说明:对于集合没有修改操作 </span>1<span>、增加 </span>1<span>)添加元素:sadd key member1 member2 ... </span>2<span>、获取 </span>1<span>)返回所有的元素:smembers key </span>3<span>、删除 </span>1)删除指定元素:srem key values
set
<span>zset类型 </span>1<span>)sorted set,有序集合 </span>2<span>)元素为string类型 </span>3<span>)元素具有唯⼀性,不重复 </span>4<span>)每个元素都会关联⼀个double类型的score, 表示权重,通过权重将元素从⼩到⼤排序 </span>5<span>)说明:没有修改操作 </span>1<span>、增加 </span>1<span>)添加:zadd key score1 member1 score2 member2 ... </span>2<span>、获取 </span>1<span>)返回指定范围内的元素:zrange key start stop </span>2<span>)获取键a1的集合中权限值在min和max之间的成员 zrangebyscore a1 </span>5 6 3<span>)获取键a2的集合中元素zhangsan的权重 zscore a4 zhangsan </span>3<span>、删除 </span>1<span>)删除指定元素:zrem key member1 member2 ... </span>2)删除权重在指定范围的元素:zremrangebyscore key min max
zset
1.5 与python交互
安装包
安装Redis的有3种方式https://github.com/andymccurdy/redis-py
- 第一种:进⼊虚拟环境,联⽹安装包redis
- pip install redis
- 第二种:进⼊虚拟环境,联⽹安装包redis
- easy_install redis
- 第三种:到中⽂官⽹-客户端下载redis包的源码,使⽤源码安装
- 一步步执行 wget https://github.com/andymccurdy/redis-py/archive/master.zip
- unzip master.zip
- cd redis-py-master
- sudo python setup.py install
调用模块
- 引⼊模块
- from redis import StrictRedis
- 这个模块中提供了
StrictRedis对象
,⽤于连接redis服务器,并按照不同类型提供 了不同⽅法,进⾏交互操作
1.5.1 StrictRedis对象方法
-
-
- 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
-
sr = StrictRedis(host=<span>"</span><span>localhost</span><span>"</span>, port=6379, db=<span>0) sr</span>=StrictRedis()
- 根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致
-
1<span>、exists </span>2<span>、type </span>3<span>、delete </span>4<span>、expire </span>5<span>、getrange </span>6、ttl
keys
-
1<span>、set </span>2<span>、setex </span>3<span>、mset </span>4<span>、append </span>5<span>、get </span>6<span>、mget </span>7、key
string
-
1<span>、hset </span>2<span>、hmset </span>3<span>、hkeys </span>4<span>、hget </span>5<span>、hmget </span>6<span>、hvals </span>7、hdel
hash
-
1<span>、lpush </span>2<span>、rpush </span>3<span>、linsert </span>4<span>、lrange </span>5<span>、lset </span>6、lrem
list
-
1<span>、sadd </span>2<span>、smembers </span>3、srem
set
-
1<span>、zadd </span>2<span>、zrange </span>3<span>、zrangebyscore </span>4<span>、zscore </span>5<span>、zrem </span>6、zremrangebyscore
zset
-
-
1.5.2 举例 String
-
-
-
<span>⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False 编写代码如下: </span><span>from</span> redis <span>import</span> * <span>if</span> <span>__name__</span>==<span>"</span><span>__main__</span><span>"</span><span>: </span><span>try</span><span>: </span><span>#</span><span>创建StrictRedis对象,与redis服务器建⽴连接</span> sr=<span>StrictRedis() </span><span>#</span><span>添加键name,值为itheima</span> result=sr.set(<span>"</span><span>name</span><span>"</span>,<span>"</span><span>itheima</span><span>"</span><span>) </span><span>#</span><span>输出响应结果,如果添加成功则返回True,否则返回False</span> <span>print</span><span>(result) </span><span>except</span><span> Exception as e: </span><span>print</span>(e)
string–增加
-
1<span>)⽅法get,添加键对应的值,如果键存在则返回对应的值, 如果键不存在则返回None 编写代码如下: </span><span>from</span> redis <span>import</span> * <span>if</span> <span>__name__</span>==<span>"</span><span>__main__</span><span>"</span><span>: </span><span>try</span><span>: </span><span>#</span><span>创建StrictRedis对象,与redis服务器建⽴连接</span> sr=<span>StrictRedis() </span><span>#</span><span>获取键name的值</span> result = sr.get(<span>"</span><span>name</span><span>"</span><span>) </span><span>#</span><span>输出键的值,如果键不存在则返回None</span> <span>print</span><span>(result) </span><span>except</span><span> Exception as e: </span><span>print</span>(e)
string–获取
-
1<span>)⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加 编写代码如下: </span><span>from</span> redis <span>import</span> * <span>if</span> <span>__name__</span>==<span>"</span><span>__main__</span><span>"</span><span>: </span><span>try</span><span>: </span><span>#</span><span>创建StrictRedis对象,与redis服务器建⽴连接</span> sr=<span>StrictRedis() </span><span>#</span><span>设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加</span> result = sr.set(<span>"</span><span>name</span><span>"</span>,<span>"</span><span>itcast</span><span>"</span><span>) </span><span>#</span><span>输出响应结果,如果操作成功则返回True,否则返回False</span> <span>print</span><span>(result) </span><span>except</span><span> Exception as e: </span><span>print</span>(e)
string–修改
-
1<span>)⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数, 否则返回0 编写代码如下: </span><span>from</span> redis <span>import</span> * <span>if</span> <span>__name__</span>==<span>"</span><span>__main__</span><span>"</span><span>: </span><span>try</span><span>: </span><span>#</span><span>创建StrictRedis对象,与redis服务器建⽴连接</span> sr=<span>StrictRedis() </span><span>#</span><span>设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加</span> result = sr.delete(<span>"</span><span>name</span><span>"</span><span>) </span><span>#</span><span>输出响应结果,如果删除成功则返回受影响的键数,否则则返回0</span> <span>print</span><span>(result) </span><span>except</span><span> Exception as e: </span><span>print</span>(e)
string–删除
-
1<span>)⽅法keys,根据正则表达式获取键 编写代码如下: </span><span>from</span> redis <span>import</span> * <span>if</span> <span>__name__</span>==<span>"</span><span>__main__</span><span>"</span><span>: </span><span>try</span><span>: </span><span>#</span><span>创建StrictRedis对象,与redis服务器建⽴连接</span> sr=<span>StrictRedis() </span><span>#</span><span>获取所有的键</span> result=<span>sr.keys() </span><span>#</span><span>输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表</span> <span>print</span><span>(result) </span><span>except</span><span> Exception as e: </span><span>print</span>(e)
string–获取键
-
-
1.6 搭建主从
1.6.1 主从概念
-
-
- ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构
-
-
-
- master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1
-
-
-
- 通过主从配置可以实现读写分离
-
master和slave都是一个redis实例(redis服务)
-
1.6.2 主从配置
- 配置主
-
-
- 查看当前主机的ip地址
- ifconfig
- 查看当前主机的ip地址
-
-
-
- 修改
/etc/redis/redis.conf
文件
- 修改
-
sudo vi redis.conf
bind 192.168.26.128
-
-
- 重启redis服务
-
sudo service redis stop
sudo redis-server redis.conf
配置从
-
-
- 复制
/etc/redis/redis.conf
文件
- 复制
-
sudo cp redis.conf ./slave.conf
-
-
- 修改
redis/slave.conf
文件
- 修改
-
sudo vi slave.conf
-
-
- 编辑内容
-
bind 192.168.26.128
port 6378
slaveof 192.168.26.128 6379
-
-
- redis服务
-
sudo redis-server slave.conf
-
-
- 查看主从关系
-
redis-cli -h 192.168.26.128 info Replication
1.6.3 数据操作
-
-
- 在master和slave分别执⾏info命令,查看输出信息 进入主客户端
-
redis-cli -h 192.168.26.128 -p 6379
-
-
- 进入从的客户端
-
redis-cli -h 192.168.26.128 -p 6378
-
-
- 在master上写数据
-
set aa aa
-
-
- 在slave上读数据
-
get aa
1.6.4 与python交互
-
-
-
REDIS =<span> { </span><span>"</span><span>Master</span><span>"</span><span>:{ </span><span>"</span><span>host</span><span>"</span>:<span>"</span><span>192.168.56.100</span><span>"</span><span>, </span><span>"</span><span>port</span><span>"</span>: <span>"</span><span>6379</span><span>"</span><span>, </span><span>"</span><span>db</span><span>"</span><span>: 0 }, </span><span>"</span><span>Slave</span><span>"</span><span>:{ </span><span>"</span><span>host</span><span>"</span>:<span>"</span><span>192.168.56.100</span><span>"</span><span>, </span><span>"</span><span>port</span><span>"</span>: <span>"</span><span>6378</span><span>"</span><span>, </span><span>"</span><span>db</span><span>"</span><span>: 0 }, } </span><span>class</span><span> MSRedis(object): </span><span>"""</span><span>读写分离客户端(只针对程序中用到的命令)</span><span>"""</span> <span>def</span> <span>__init__</span><span>(self,conf): self.master </span>= StrictRedis(**conf[<span>"</span><span>Master</span><span>"</span><span>]) self.slave </span>= StrictRedis(**conf[<span>"</span><span>Slave</span><span>"</span><span>]) self.read_commands </span>=<span> [ </span><span>"</span><span>ttl</span><span>"</span>, <span>"</span><span>exist</span><span>"</span>, <span>"</span><span>expire</span><span>"</span>, <span>"</span><span>get</span><span>"</span>, <span>"</span><span>keys</span><span>"</span><span>, </span><span>"</span><span>hget</span><span>"</span>, <span>"</span><span>hgetall</span><span>"</span>, <span>"</span><span>hkeys</span><span>"</span>, <span>"</span><span>hmget</span><span>"</span><span>, </span><span>"</span><span>sismember</span><span>"</span>, <span>"</span><span>smembers</span><span>"</span>, <span>"</span><span>sdiff</span><span>"</span>, <span>"</span><span>sinter</span><span>"</span>, <span>"</span><span>sunion</span><span>"</span> <span>"</span><span>zrevrange</span><span>"</span>, <span>"</span><span>zrevrangebyscore</span><span>"</span>, <span>"</span><span>zrevrank</span><span>"</span>, <span>"</span><span>zscore</span><span>"</span><span> ] </span><span>def</span> <span>__getattribute__</span><span>(self, name): </span><span>if</span> name <span>in</span> [<span>"</span><span>master</span><span>"</span>, <span>"</span><span>slave</span><span>"</span>, <span>"</span><span>read_commands</span><span>"</span><span>]: </span><span>return</span> object.<span>__getattribute__</span><span>(self, name) </span><span>elif</span> name <span>in</span><span> self.read_commands: </span><span>print</span>(<span>"</span><span>选择了从库</span><span>"</span><span>) </span><span>return</span> self.slave.<span>__getattribute__</span><span>(name) </span><span>else</span><span>: </span><span>print</span>(<span>"</span><span>选择了主库</span><span>"</span><span>) </span><span>return</span> self.master.<span>__getattribute__</span><span>(name) rds </span>=<span> MSRedis(REDIS) res </span>= rds.get(<span>"</span><span>name2</span><span>"</span><span>) </span><span>#</span><span> res = rds.set("name2","lisi")</span> <span>print</span>(res)
redis_test.py
-
-
1.7 搭建集群
1.7.1 配置机器1
-
-
- 在演示中,192.168.56.100为当前ubuntu机器的ip
- 在192.168.56.100上进⼊Desktop⽬录,创建conf⽬录
- 在conf⽬录下创建⽂件7000.conf,编辑内容如下
-
port 7000<span> bind </span>192.168.56.100<span> daemonize yes pidfile </span>7000<span>.pid cluster</span>-<span>enabled yes cluster</span>-config-<span>file 7000_node.conf cluster</span>-node-timeout 15000<span> appendonly yes</span>
7000.conf
-
-
-
-
- 在conf⽬录下创建⽂件7001.conf,编辑内容如下
-
port 7001<span> bind </span>192.168.56.100<span> daemonize yes pidfile </span>7001<span>.pid cluster</span>-<span>enabled yes cluster</span>-config-<span>file 7001_node.conf cluster</span>-node-timeout 15000<span> appendonly yes</span>
7001.conf
-
- 在conf⽬录下创建⽂件7001.conf,编辑内容如下
-
-
-
- 在conf⽬录下创建⽂件7002.conf,编辑内容如下
-
port 7002<span> bind </span>192.168.56.100<span> daemonize yes pidfile </span>7002<span>.pid cluster</span>-<span>enabled yes cluster</span>-config-<span>file 7002_node.conf cluster</span>-node-timeout 15000<span> appendonly yes</span>
7002.conf
-
- 在conf⽬录下创建⽂件7002.conf,编辑内容如下
-
-
-
- 总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项
- 使⽤配置⽂件启动redis服务
-
redis-server 7000<span>.conf redis</span>-server 7001<span>.conf redis</span>-server 7002.conf
-
- 查看进程如下图
-
1.7.2 配置机器2
-
-
- 在演示中,192.168.56.100为当前ubuntu机器的ip
- 在192.168.56.100上进⼊Desktop⽬录,创建conf⽬录
-
port 7003<span> bind </span>192.168.56.100<span> daemonize yes pidfile </span>7003<span>.pid cluster</span>-<span>enabled yes cluster</span>-config-<span>file 7003_node.conf cluster</span>-node-timeout 15000<span> appendonly yes</span>
7003.con
在conf⽬录下创建⽂件7003.conf,编辑内容如下
-
-
-
- 在conf⽬录下创建⽂件7004.conf,编辑内容如下
-
port 7004<span> bind </span>192.168.56.100<span> daemonize yes pidfile </span>7004<span>.pid cluster</span>-<span>enabled yes cluster</span>-config-<span>file 7004_node.conf cluster</span>-node-timeout 15000<span> appendonly yes</span>
7004.conf
-
- 在conf⽬录下创建⽂件7004.conf,编辑内容如下
-
-
-
- 在conf⽬录下创建⽂件7005.conf,编辑内容如下
-
port 7005<span> bind </span>192.168.56.100<span> daemonize yes pidfile </span>7005<span>.pid cluster</span>-<span>enabled yes cluster</span>-config-<span>file 7005_node.conf cluster</span>-node-timeout 15000<span> appendonly yes</span>
7005.conf
-
- 在conf⽬录下创建⽂件7005.conf,编辑内容如下
-
-
-
- 总结:三个⽂件的配置区别在port、pidfile、cluster-config-file三项
- 使⽤配置⽂件启动redis服务
-
redis-server 7003<span>.conf redis</span>-server 7004<span>.conf redis</span>-server 7005.conf
-
- 查看进程如下图
-
1.7.3 创建集群
-
-
- redis的安装包中包含了redis-trib.rb,⽤于创建集群
- 接下来的操作在192.168.56.100机器上进⾏
- 将命令复制,这样可以在任何⽬录下调⽤此命令
-
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
- 安装ruby环境,因为redis-trib.rb是⽤ruby开发的
-
sudo apt-get install ruby
- 在提示信息处输⼊y,然后回⻋继续安装
- 运⾏如下命令创建集群
-
redis-trib.rb create --replicas 1 192.168.56.100:7000 192.168.56.100:7001 192.168.56.100:7002 192.168.56.100:7003 192.168.56.100:7004 192.168.56.100:7005
- 执⾏上⾯这个指令在某些机器上可能会报错,主要原因是由于安装的 ruby 不是最 新版本!
- 天朝的防⽕墙导致⽆法下载最新版本,所以需要设置 gem 的源
- 解决办法如下
-
--<span> 先查看⾃⼰的 gem 源是什么地址 gem source </span>-l -- 如果是https://rubygems.org/<span> 就需要更换 </span>--<span> 更换指令为 gem sources </span>--add https://gems.ruby-china.com/ --remove https://rubygems.org/ --<span> 通过 gem 安装 redis 的相关依赖 sudo gem install redis </span>-- 然后重新执⾏指令
-
redis-trib.rb create --replicas 1 192.168.56.100:7000 192.168.56.100:7001 192.168.56.100:7002 192.168.56.100:7003 192.168.56.100:7004 192.168.56.100:7005
- 提示如下主从信息,输⼊yes后回⻋
- 提示完成,集群搭建成功
-
1.7.4 数据验证
-
-
- 根据上图可以看出,当前搭建的主服务器为7000、7001、7002,对应的从服务器是7003、7004、7005
- 在192.168.56.100机器上连接7002,加参数-c表示连接到集群
-
redis-cli -h 172.16.179.131 -c -p 7002
- 写⼊数据
-
set name itheima
- ⾃动跳到了7003服务器,并写⼊数据成功
-
在7003可以获取数据,如果写入数据又重定向到7000(负载均衡)
-
1.7.5 在哪个服务器上写数据:CRC16
-
-
- redis cluster在设计的时候,就考虑到了去中⼼化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各⾃的数据和整个集 群的状态。每个节点都和其他所有节点连接,⽽且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意⼀个节点,就可以获取到其他节点的数据
-
-
-
- Redis集群没有并使⽤传统的⼀致性哈希来分配数据,⽽是采⽤另外⼀种叫做哈希 槽 (hash slot)的⽅式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set⼀个key 时,会⽤CRC16算法来取模得到所属的slot,然后将这个key 分到哈 希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的 时候看到set 和 get 的时候,直接跳转到了7000端⼝的节点
-
-
-
- Redis 集群会把数据存在⼀个 master 节点,然后在这个 master 和其对应的salve 之间进⾏数据同步。当读取数据时,也根据⼀致性哈希算法到对应的 master 节 点获取数据。只有当⼀个master 挂掉之后,才会启动⼀个对应的 salve 节点,充 当 master
-
-
-
- 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存 活的主节点数⼩于总节点数的⼀半时,整个集群就⽆法提供服务了
-
1.7.6 与python交互
-
-
-
<span>from</span> rediscluster <span>import</span> * <span>if</span> <span>__name__</span> == <span>"</span><span>__main__</span><span>"</span><span>: </span><span>try</span><span>: </span><span>#</span><span> 构建所有的节点,Redis会使⽤CRC16算法,将键和值写到某个节点上</span> startup_nodes =<span> [ {</span><span>"</span><span>host</span><span>"</span>: <span>"</span><span>192.168.56.100</span><span>"</span>, <span>"</span><span>port</span><span>"</span>: <span>"</span><span>7000</span><span>"</span><span>}, {</span><span>"</span><span>host</span><span>"</span>: <span>"</span><span>192.168.56.100</span><span>"</span>, <span>"</span><span>port</span><span>"</span>: <span>"</span><span>7001</span><span>"</span><span>}, {</span><span>"</span><span>host</span><span>"</span>: <span>"</span><span>192.168.56.100</span><span>"</span>, <span>"</span><span>port</span><span>"</span>: <span>"</span><span>7002</span><span>"</span><span>}, {</span><span>"</span><span>host</span><span>"</span>: <span>"</span><span>192.168.56.100</span><span>"</span>, <span>"</span><span>port</span><span>"</span>: <span>"</span><span>7003</span><span>"</span><span>}, {</span><span>"</span><span>host</span><span>"</span>: <span>"</span><span>192.168.56.100</span><span>"</span>, <span>"</span><span>port</span><span>"</span>: <span>"</span><span>7004</span><span>"</span><span>}, {</span><span>"</span><span>host</span><span>"</span>: <span>"</span><span>192.168.56.100</span><span>"</span>, <span>"</span><span>port</span><span>"</span>: <span>"</span><span>7005</span><span>"</span><span>}, ] </span><span>#</span><span> 构建StrictRedisCluster对象</span> src=RedisCluster(startup_nodes=startup_nodes,decode_responses=True) <span>#</span><span>decode_responses=True </span>
-
-