0
点赞
收藏
分享

微信扫一扫

非关系型数据库——Redis

 Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份

Redis 优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

RDBMS vs NoSQL

​NoSQL

代表着不仅仅是SQL

没有声明性查询语言

没有预定义的模式

键-值对存储,列存储,文档存储,图形数据库

最终一致性,而非ACID属性非结构化和不可预知的数据

CAP定理

高性能,高可用性和可伸缩性

RDBMS

高度组织化结构化数据

结构化查询语言(SQL) (SQL)

数据和关系都存储在单独的表中。

数据操纵语言,数据定义语言

严格的一致性

基础事务​

Redis单线程架构

r​edis是单线程来处理命令的,所以一条命令从客户端到达服务端不会立刻被执行,所有命令都会

进入一个队列中,然后被执行。当然发送命令、返回结果、命令排队并不是像排队那么简单,

redis采用了I/O多路复用的技术来解决I/O的问题

既然是单线程架构为什么redis还能这么快?

第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时间大约为100纳秒,这是

redis达到每秒万级别的访问的重要基础

第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处

理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间

第三,单线程避免了线程切换和竞态产生的消耗

客户端与服务端请求过程​

非关系型数据库——Redis_返回结果

所有命令在一个队列里等待被执行

非关系型数据库——Redis_redis_02

Redis应用场景

建过期功能:缓存,session会话保存,优惠券国企

列表:排行榜

天然计数器:帖子浏览数、视频播放数、评论留言数

集合:兴趣标签,广告投放

消息队列:ELK

文章列表

安装部署

软件安装

[root@localhost ~]# yum install epel-release.noarch -y 
[root@localhost ~]# yum install redis -y

配置文件介绍

[root@node1 ~]# cat /etc/redis.conf | grep -Ev "^$|^#" 
==================================基础配置
=============================================
bind 127.0.0.1 # 绑定IP地址
protected-mode yes
port 6379 # 监听端口
tcp-backlog 511
timeout 0 # 设置客户端连接超时时间
tcp-keepalive 300 # 检测客户端是否健康的周期时间
daemonize yes # 是否以守护进程方式启动
supervised no
pidfile /var/run/redis_6379.pid # PID文件
loglevel notice # 日志等级
logfile /var/log/redis/redis.log # 日志文件
databases 16 # 设置数据库的数目
==================================RDB触发条件
===========================================
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes # 当启用了RDB且最后一次后台保存数据失败,Redis是否
停止接收数据
rdbcompression yes # 对于存储到磁盘中的快照,可以设置是否进行压缩存储
rdbchecksum yes # 在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验
dbfilename dump.rdb # 设置快照的文件名
dir /var/lib/redis # 设置快照文件的存放路径
==================================主从复制
=============================================
slave-serve-stale-data yes
slave-read-only yes # 配置Redis的Slave实例是否接受写操作
repl-diskless-sync no # 主从数据复制是否使用无硬盘复制功能
repl-diskless-sync-delay 5 # 等待时间
repl-disable-tcp-nodelay no # 同步之后是否禁用从站上的TCP_NODELAY
slave-priority 100
==================================AOF相关配置
=============================================
appendonly no # 默认redis使用的是rdb方式持久化
appendfilename "appendonly.aof" # 文件名
appendfsync everysec # aof持久化策略的配置
no-appendfsync-on-rewrite no # 在aof重写或者写入rdb文件的时候,不执行持久化策略
auto-aof-rewrite-percentage 100 # 当目前aof文件大小超过上一次重写的aof文件大小的百分
之多少进行重写
auto-aof-rewrite-min-size 64mb # 设置允许重写的最小aof文件大小
aof-load-truncated yes # 当截断的aof文件被导入的时候,会自动发布一个log给客户端然后
load。
lua-time-limit 5000 # 一个lua脚本执行的最大时间

Redis启动、登录与关闭

启动时使用命令redis-server,参数是配置文件(可以指定参数配置文件,也可以不指定使其默认加 载)

[root@localhost ~]# redis-server /etc/redis.conf

登录使用redis-cli工具进行登录

[root@localhost ~]# redis-cli -h 127.0.0.1 -p 6379

关闭redis服务

127.0.0.1:6379> SHUTDOWN 
not connected>

redis基础命令

全局命令

KEYS *

查看所有键,该命令在生产环境中慎用,会一次性读取所有键,可能会导致阻塞

dbsize

查看当前数据库中的所有键的数量

exists key

检查某个键是否存在,存在返回1,不存在返回0

del key

删除键,可以只删除一个键也可以同时删除多个键,删除成功后会返回成功删除键的个数,删除失败会返回0

expire key seconds

给键设置过期时间,当超过过期时间后会自动删除键

ttl命令会返回键过期时间

大于等于0的整数,键剩余过期的时间

-2:键不存在

-1:永久存在

字符串命令

设置值

set   key   value

获取值

get   key

批量设置值,批量获取值:  

mget key1 value1 key2 value2
mset key1 key2

计数:

incr key

incr命令用于对值做自增操作,返回结果分为三种情况:

·值不是整数,返回错误。

·值是整数,返回自增后的结果。

·键不存在,按照值为0自增,返回结果为1

不常用命令:

(1)追加值:可以向字符串尾部追加值

append key value

(2)字符串长度

strlen key

(3)设置并返回原值

getset key value

getset和set一样会设置值,但是不同的是,它同时会返回键原来的值

(4)设置指定位置的字符,offeset位置从0开始

setrange key offeset value

(5)获取部分字符串 getrange key start end start和end分别是开始和结束的偏移量,偏移量从0开始计算

getrange key start end

列表命令

列表(list)类型是用来存储多个有序的字符串,是一种线性结构可以充当栈和队列的角色

添加操作:

(1)从右边插入元素:

rpush key value [value ...]

(2)从左边插入元素:

lpush key value [value ...]

(3)向某个元素前或者后插入元素:

linsert key before|after pivot(元素) value

查找:

(1)获取指定范围内的元素列表(从左向右):

lrange key start end(0~n-1  -1~-n)

(2)获取列表指定索引下标的元素:

lindex key index

(3)获取列表长度:

llen key

删除:

(1)从列表左侧弹出元素:

lpop key

(2)从列表右侧弹出:

rpop key

(3)删除指定元素:

lrem key count value

·count>0,从左到右,删除最多count个元素。

·count<0,从右到左,删除最多count绝对值个元素。

·count=0,删除所有。

(4)按照索引范围修剪列表:

ltrim key start end

只保留列表listkey第start+1个到第end+1个元素

修改指定索引下标的元素:

lset key index newValue

哈希命令

设置值:

hset   key   field(属性)   value

获取值:

hget   key   field (属性)

删除field:

hdel   key   field   [field ...]

hdel会删除一个或多个field,返回结果为成功删除field的个数

计算field个数:

hlen key

批量设置或获取field-value:  

hmget key field [field ...]    
hmset key field value [field value ...]

判断field是否存在:

hexists   key  field

获取所有field:

hkeys  key

获取所有value:

hvals  key

获取所有的field-value:

hgetall key

集合命令

添加元素:

sadd key element [element ...]

删除元素:

srem key element [element ...]

计算元素个数:

scard key

判断元素是否在集合中:

sismember key element

随机从集合中返回指定元素个数:

srandmember key [count]

从集合随机弹出元素:

spop   key

获取所有元素:

smembers   key

交集运算:

sinter   key   [key ...]

并集运算:

suinon key [key ...]

差集运算:

sdiff key [key ...]

将交集、并集、差集的结果保存:

sinterstore destination key [key ...] 
suionstore destination key [key ...]
sdiffstore destination key [key ...]

有序集合命令

有序集合保留了集合不能有重复成员的特性,不同的是有序集合中的元素是可以排序的。但是它和列表使用索引下标作为排序依据不同的是它给每个元素设置一个分数(score)作为排序的依据

添加成员:

zadd key score member [score member ...]

计算成员个数:

zcard  key

计算某个成员的分数:

zscore key member

计算某个成员的排名:

zrank key member(从低到高)   
zrevrank key member (从高到低)

删除成员:

zrem  key  member [member ...]

增加成员的分数:

zincrby  key  increment   member

返回指定排名范围的成员:

zrange key start end [withscores]      
zrevrange key start end [withscores]

返回指定分数范围的成员:

zrangebyscore key min max [withscores] [limit offset count] 
zrevrangebyscore key max min [withscores] [limit offset count]

其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。例如 下面操作从低到高返回200到221分的成员,withscores选项会同时返回每个 成员的分数。[limit offset count]选项可以限制输出的起始位置和个数。

返回指定分数范围的成员个数:

zcount key min max

删除指定排名内的升序元素:

zremrangebyrank  key  start  end

删除指定分数范围的成员:

zremrangebyscore   key   min   max

交集运算:

zinterstore destination numkeys(需要做交集计算键的个数) key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]

并集运算:

zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]

Redis丰富特性

Redis除了提供五大基本数据类型,还提供了丰富的功能强大的附加功能

慢查询分析:通过慢查询分析,找到有问题的命令进行优化。

Redis Shell:功能强大的Redis Shell会有意想不到的实用功能。

Pipeline:通过Pipeline(管道或者流水线)机制有效提高客户端性能。

事务与Lua:制作自己的专属原子命令。

Bitmaps:通过在字符串数据结构上使用位操作,有效节省内存,为开 发提供新的思路。

HyperLogLog:一种基于概率的新算法,难以想象地节省内存空间。 ·发布订阅:基于发布订阅模

式的消息通信机制。

GEO:Redis3.2提供了基于地理位置信息的功能。​

慢查询分析

可以通过config set命令动态修改参数,并使配置持久化到配置文件中

config set slowlog-log-slower-than 20000 # 单位为微秒 
config set slowlog-max-len 1000
config rewrite

获取慢查询日志

slowlog get [n] 操作返回当前Redis的慢查询,参数n可以指定条数

可以看到每个慢查询日志有4个属性组成,分别是慢查询日志的标识 id、发生时间戳、命令耗时、执行命令和参数

获取慢查询日志列表当前的长度

slowlog len

慢查询日志重置

slowlog reset

redis-cli 详解

-r(repeat)选项代表将命令执行多次

redis-cli -r 次数 命令

-i(interval)选项代表每隔几秒执行一次命令,但是-i选项必须和-r选 项一起使用

redis-cli -r 次数 -i 间隔时间 命令

-x选项代表从标准输入(stdin)读取数据作为redis-cli的最后一个参数,例如下面的操作会将字符

串world作为set hello的值​

echo "world" | redis-cli -x set hello

-c(cluster)选项是连接Redis Cluster节点时需要使用的,-c选项可以防 止moved和ask异常

如果Redis配置了密码,可以用-a(auth)选项,有了这个选项就不需要 手动输入auth命令

redis-server 详解

redis-server- -test-memory可以用来检测当前操作系统能否稳定地分配指定容量的内存给 Redis, 通过这种检测可以有效避免因为内存问题造成Redis崩溃,例如下面 操作检测当前操作系统能否提 供1G的内存给Redis

redis-server --test-memory 1024

消息队列

消息队列: 把要传输的数据放在队列中

功能: 可以实现多个系统之间的解耦,异步,削峰/限流等

常用的消息队列应用: kafka,rabbitMQ,redis

非关系型数据库——Redis_redis_03

消息队列主要分为两种,这两种模式Redis都支持

生产者/消费者模式

发布者/订阅者模式

生产者消费者模式

在生产者/消费者(Producer/Consumer)模式下,上层应用接收到的外部请求后开始处理其当前步骤的操

作,在执行完成后将已经完成的操作发送至指定的频道(channel,逻辑队列)当中,并由其下层的应用监听

该频道并继续下一步的操作,如果其处理完成后没有下一步的操作就直接返回数据给外部请求,如果还

有下一步的操作就再将任务发布到另外一个频道,由另外一个消费者继续监听和处理。此模式应用广泛 ​

模式介绍

生产者消费者模式下,多个消费者同时监听一个队列,但是一个消息只能被最先抢到消息的消费者消

费,即消息任务是一次性读取和处理,此模式在分布式业务架构中很常用,比较常用的消息队列软件还

有RabbitMQ、Kafka、RocketMQ、ActiveMQ等。

非关系型数据库——Redis_返回结果_04

队列介绍

队列当中的消息由不同的生产者写入,也会有不同的消费者取出进行消费处理,但是一个消息一定是只

能被取出一次也就是被消费一次。

非关系型数据库——Redis_redis_05

生产者发布消息

[root@localhost ~]# redis-cli 
127.0.0.1:6379> lpush channel1 msg1 (integer) 1

消费者消费

127.0.0.1:6379> rpop channel1 "msg1"

发布订阅

​Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布 者和订阅者不进行直接通信,发

布者客户端向指定的频道(channel)发布消 息,订阅该频道的每个客户端都可以收到该消息

发布消息​

publish channel message 
下面操作会向channel:sports频道发布一条消息“Tim won the
championship”,返回结果为订阅者个数,因为此时没有订阅,所以返回结果
为0:
127.0.0.1:6379> publish channel:sports "Tim won the championship"
(integer) 0

订阅消息

subscribe channel [channel ...] 
订阅者可以订阅一个或多个频道,下面操作为当前客户端订阅了
channel:sports频道:
127.0.0.1:6379> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:sports"
3) (integer) 1

取消订阅

unsubscribe [channel [channel ...]] 
客户端可以通过unsubscribe命令取消对指定频道的订阅,取消成功后,
不会再收到该频道的发布消息:
127.0.0.1:6379> unsubscribe channel:sports
1) "unsubscribe"
2) "channel:sports"
3) (integer) 0

按照模式订阅和取消订阅

psubscribe pattern [pattern...] 
punsubscribe [pattern [pattern ...]]
除了subcribe和unsubscribe命令,Redis命令还支持glob风格的订阅命令
psubscribe和取消订阅命令punsubscribe,例如下面操作订阅以it开头的所有
频道:
127.0.0.1:6379> psubscribe it*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "it*"

查询订阅

(1)查看活跃的频道 
pubsub channels [pattern]
所谓活跃的频道是指当前频道至少有一个订阅者,其中[pattern]是可以 指定具体的模式
(2)查看频道订阅数
pubsub numsub [channel ...]
(3)查看模式订阅数
pubsub numpat

GEO

​Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置、摇一

摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来说是一大福音。 ​

增加地理位置信息

geoadd key longitude latitude member [longitude latitude member ...]
127.0.0.1:6379> geoadd cities:locations 116.28 39.55 beijing
(integer) 1

获取地理位置信息

geopos key member [member ...]
127.0.0.1:6379> geopos cities:locations tianjin
1) "117.12000042200088501"
2) "39.0800000535766543"

获取两个地理位置的距离

geodist key member1 member2 [unit] 
其中unit代表返回结果的单位,包含以下四种:
m(meters)代表米。
km(kilometers)代表公里。
mi(miles)代表英里。
ft(feet)代表尺。
127.0.0.1:6379> geodist cities:locations tianjin beijing km
"89.2061"

获取指定位置范围内的地理信息位置集合

georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] 
[withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist]
[withhash] [COUNT count] [asc|desc] [store key] [storedist key]
withcoord:返回结果中包含经纬度。
withdist:返回结果中包含离中心节点位置的距离。
withhash:返回结果中包含geohash,有关geohash后面介绍。
COUNT count:指定返回结果的数量。
asc|desc:返回结果按照离中心节点的距离做升序或者降序。
store key:将返回结果的地理位置信息保存到指定键。
storedist key:将返回结果离中心节点的距离保存到指定键
127.0.0.1:6379> georadiusbymember cities:locations beijing 150 km
1) "beijing"
2) "tianjin"
3) "tangshan"
4) "baoding"

删除地理位置信息

zrem key member

数据持久化

Redis支持RDB和AOF两种持久化机制,持久化功能能有效地避免因进程退出造成的数据丢失问题

RDB持久化

RDB持久是把当前数据生成快照保存到硬盘的过程

优点

RDB是一个非常紧凑(compact)的文件,它保存了redis 在某个时间点上的数据集。这种文件非常适合用于进行备份和灾难恢复。

RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

缺点

RDB方式数据没办法做到实时持久化/秒级持久化。(影响性能)

Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题(版本不兼容)

触发方式

自动触发:主配置文件中的save字段

分别表示每900秒数据发生一次改变、每300秒数据发生10次改变、每60秒数据发生10000 
次改变会自动触发rdb持久化机制
save 900 1
save 300 10
save 60 10000

手动触发:save 命令

非关系型数据库——Redis_返回结果_06

save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成 长时间阻塞,线上环境不建议使用。

bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后 自动结束。阻塞只发生在fork阶段,一般时间很短。

默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则 自动执行bgsave。

AOF持久化

以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。解决了数据持久化的实时性。

使用AOF

appendonly yes # 将配置文件中appendonly字段设置为yes即可重写机制

随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis 引入AOF重写机制压缩文件体积。

手动触发:直接调用bgrewriteaof命令

自动触发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参 数确定自动触发时机。

非关系型数据库——Redis_redis_07

架构——主从复制

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到 其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。

复制功能是高可用Redis 的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用的。

优点

满足故障和负载均衡等需求

缺点

若主节点出现问题,则不能提供服务,需要人工修改配置将从变主,无法实现高可用

主从复制主节点的写能力有限

单机节点的存储能力有限

数据同步方式

全量同步、增量同步、同步策略(全量同步、增量同步)

mkdir /usr/local/redis/{data,conf,log} -pv
主配置文件
bind 127.0.0.1
port 6380
daemonize yes
pidfile /usr/local/redis/redis_6380.pid
loglevel notice
logfile /usr/local/redis/log/redis_6380.log
dir /usr/local/redis/data/

mkdir /usr/local/redis/{data,conf,log} -pv
从配置文件
bind 127.0.0.1
port 6381
daemonize yes
pidfile /usr/local/redis/redis_6381.pid
loglevel notice
logfile /usr/local/redis/redis_6381.log
dir /usr/local/redis/data/
slaveof 127.0.0.1 6380

启动则完成主从复制架构的部署

redis-server   /usr/local/redis/conf/redis6380.conf(配置文件路径)

验证:info replication

非关系型数据库——Redis_数据_08

架构——哨兵

Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多 应用场景这种故障处理的方式是无法接受的。

Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

哨兵数量和主从数量相同,分别分布在各个服务器上

非关系型数据库——Redis_redis_09

部署哨兵1:监听26378端口

配置文件

port 26378 (不同服务器不需要这个)
daemonize yes
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6380 2 #至少几个哨兵检测到主服务器故障了,才会进行故障迁移,全部指向masterIP
sentinel down-after-milliseconds mymaster 60000 #判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 #故障节的的最大超时时间为180000(180秒)
sentinel parallel-syncs mymaster 1 #指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步
logfile "/usr/local/redis/log/sentinel.log.26378"

启动哨兵服务:

redis-sentinel /usr/local/redis/conf/redis- sentinel26739.conf

验证:info sentinel


架构——集群(它的原理使用了分布的思想,其数据会均分到所有的主节点上。)

redis的哨兵模式基本已经可以实现高可用,读写分离,但是在这种模式下每台redis服务器都存储相同的数据,很 浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上存储不同的内容。

优点

将Redis的写操作分摊到了多个节点上,提高写的并发能力,扩容简单

缺点

每个Node承担着互相监听、高并发数据写入、高并发数据读出,工作任务繁重

非关系型数据库——Redis_返回结果_10

环境准备

yum install gcc-c++ -y 
wget http://download.redis.io/releases/redis​​-5.0.4.tar.gz
tar xzf redis-5.0.4.tar.gz
cd redis-5.0.4
make install PREFIX=/usr/local/redis
PATH=$PATH:/usr/local/redis/bin

部署

[root@node2 ~]# mkdir /usr/local/redis-cluster 
[root@node2 ~]# cd /usr/local/redis-cluster/
[root@node2 redis-cluster]# bash -x redis-cluster.sh
#!/bin/bash
mkdir /usr/local/redis-cluster/redis{7000..7005} -pv
touch /usr/local/redis-cluster/redis{7000..7005}/redis.conf
#!/bin/bash
for i in {7000..7005};
do
cat << EOF > /usr/local/redis-cluster/redis$i/redis.conf
daemonize yes
port $i
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/redis$i/nodes-$i.conf
cluster-node-timeout 5000
appendonly yes
EOF
redis-server /usr/local/redis-cluster/redis$i/redis.conf
done
#检查各进程是否ok
[root@node2 local]# ps -ef | grep redis
root 5761 1 0 03:46 ? 00:00:00 redis-server *:7000 [cluster]
root 5767 1 0 03:46 ? 00:00:00 redis-server *:7001 [cluster]
root 5773 1 0 03:46 ? 00:00:00 redis-server *:7002 [cluster]
root 5779 1 0 03:46 ? 00:00:00 redis-server *:7003 [cluster]
root 5785 1 0 03:46 ? 00:00:00 redis-server *:7004 [cluster]
root 5791 1 0 03:46 ? 00:00:00 redis-server *:7005 [cluster]
[root@node2 local]# redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001
\
> 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
> --cluster-replicas 1
#输入yes,即按照此方式分配master和slave
M: 511ba9acbff21c59de7654342dc3847a9c9309d7 127.0.0.1:7000
slots:[0-5460] (5461 slots) master
M: fb3ee7237c0a1e164469f312b8fd65379139e6f0 127.0.0.1:7001
slots:[5461-10922] (5462 slots) master
M: 970f5bbc15256edbdd4587dda6dd4050dc6c651a 127.0.0.1:7002
slots:[10923-16383] (5461 slots) master
S: 37bef4ed48428e9c530b5c963c3afc3975a7049b 127.0.0.1:7003
replicates fb3ee7237c0a1e164469f312b8fd65379139e6f0
S: fd4c06655852c01b5c850d438cf4eca71a101a70 127.0.0.1:7004
replicates 970f5bbc15256edbdd4587dda6dd4050dc6c651a
S: 86ef91e58e5736bcda38582d824242bbf74d2d25 127.0.0.1:7005
replicates 511ba9acbff21c59de7654342dc3847a9c9309d7

验证测试

[root@node2 local]# redis-cli -c -p 7000#查询集群信息
#查询集群各节点127.0.0.1:7000> cluster nodes
#查询集群各节点 127.0.0.1:7000> cluster nodes

举报

相关推荐

0 条评论