Redis Cluster 分布式集群

一.什么是Redis Cluster

1)Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。

2)Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为。

3)Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

4)Redis集群有将数据自动切分(split)到多个节点的能力。

二.Redis Cluster的特点

高性能

1.在多分片节点中,将16384个槽位,均匀分布到多个分片节点中
2.存数据时,将key做crc16(key),然后和16384进行取模,得出槽位值(0-16384之间)
3.根据计算得出的槽位值,找到相对应的分片节点的主节点,存储到相应槽位上
4.如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储

高可用
在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof功能,同时当主节点down,实现类似于sentinel的自动failover的功能。

三.Redis Cluster客户端连接任意节点


如图所示,当我们用客户端连接A分片时,如果按照数据的取模,我们想要访问的数据,不在A分片中,那么集群会自动将请求进行转发。

四.redis集群数据共享

Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

1.节点 A 负责处理 0 号至 5500 号哈希槽。
2.节点 B 负责处理 5501 号至 11000 号哈希槽。
3.节点 C 负责处理 11001 号至 16384 号哈希槽。


五.Redis Cluster运行机制

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
节点的fail是通过集群中超过半数的master节点检测失效时才生效.
客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

六.Redis Cluster如何做集群复制

为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。

在之前列举的节点 A 、B 、C 的例子中, 如果节点 B 下线了, 那么集群将无法正常运行, 因为集群找不到节点来处理 5501 号至 11000 号的哈希槽。

假如在创建集群的时候(或者至少在节点 B 下线之前), 我们为主节点 B 添加了从节点 B1 , 那么当主节点 B 下线的时候, 集群就会将 B1 设置为新的主节点, 并让它代替下线的主节点 B , 继续处理 5501 号至 11000 号的哈希槽, 这样集群就不会因为主节点 B 的下线而无法正常运作了。

不过如果节点 B 和 B1 都下线的话, Redis 集群还是会停止运作。

集群的复制特性重用了 SLAVEOF 命令的代码,所以集群节点的复制行为和 SLAVEOF 命令的复制行为完全相同。

七.Redis Cluster故障转移

1)在集群里面,节点会对其他节点进行下线检测。

2)当一个主节点下线时,集群里面的其他主节点负责对下线主节点进行故障移。

3)换句话说,集群的节点集成了下线检测和故障转移等类似 Sentinel 的功能。

4)因为 Sentinel 是一个独立运行的监控程序,而集群的下线检测和故障转移等功能是集成在节点里面的,它们的运行模式非常地不同,所以尽管这两者的功能很相似,但集群的实现没有重用 Sentinel 的代码。

八.Redis Cluster中执行命令的两种情

1)命令发送到了正确的节点:命令要处理的键所在的槽正好是由接收命令的节点负责,那么该节点执行命令,就像单机 Redis 服务器一样。
2)命令发送到了错误的节点:接收到命令的节点并非处理键所在槽的节点,那么节点将向客户端返回一个转向(redirection)错误,告知客户端应该到哪个节点去执行这个命令,客户端会根据错误提示的信息,重新向正确的节点发送命令。

九.Redis Cluster 手动安装部署

1.部署Redis Cluster

环境规划以及地址分配
6个redis实例,一般会放到3台硬件服务器
注意:在规划中,一个分片的主从分片分到不同的物理机,防止硬件主机宕机造成的整个分片数据丢失。

2.三台服务器安装redis

#安装依赖
[root@redis01 ~]# install gcc -y
#创建目录
[root@redis01 ~]# mkdir -p /data/soft
[root@redis01 ~]# mkdir -p /data/redis_6379
[root@redis01 ~]# mkdir -p /opt/redis_6379/{conf,pid,logs}
#下载
[root@redis01 ~]# cd /data/soft/
[root@redis01 ~]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz
#解压
[root@redis01 ~]# tar zxf redis-3.2.9.tar.gz -C /opt/
#做软链接
[root@redis01 ~]# ln -s /opt/redis-3.2.9/ /opt/redis
#编译安装
[root@redis01 ~]# cd /opt/redis
[root@redis01 ~]# make && make install

3.单台多实例部署

##redis01操作
#创建安装目录和数据保存目录
[root@redis01 ~]# mkdir -p /opt/redis_{6380,6381}/{conf,logs,pid}
[root@redis01 ~]# mkdir -p /data/redis_{6380,6381}
#配置文件
[root@redis01 ~]# cat >/opt/redis_6380/conf/redis_6380.conf<<EOF
> bind 10.0.0.73
> port 6380
> daemonize yes
> pidfile "/opt/redis_6380/pid/redis_6380.pid"
> logfile "/opt/redis_6380/logs/redis_6380.log"
> dbfilename "redis_6380.rdb"
> dir "/data/redis_6380/"
> cluster-enabled yes
> cluster-config-file nodes_6380.conf
> cluster-node-timeout 15000
> EOF
#复制配置文件
[root@redis01 ~]# cd /opt/
[root@redis01 /opt]# cp redis_6380/conf/redis_6380.conf redis_6381/conf/redis_6381.conf
#替换端口
[root@redis01 /opt]# sed -i 's#6380#6381#g' redis_6381/conf/redis_6381.conf 
#将当前的配置文件发送到其他两台服务器
[root@redis01 /opt]# rsync -avz /opt/redis_638* 10.0.0.74:/opt/
[root@redis01 /opt]# rsync -avz /opt/redis_638* 10.0.0.75:/opt/
#启动节点
[root@redis01 /opt]# redis-server /opt/redis_6380/conf/redis_6380.conf
[root@redis01 /opt]# redis-server /opt/redis_6381/conf/redis_6381.conf
#检测是否启动成功
[root@redis01 /opt]# ps -ef|grep redis
root       9729      1  0 15:40 ?        00:00:00 redis-server 10.0.0.73:6380 [cluster]
root       9731      1  0 15:40 ?        00:00:00 redis-server 10.0.0.73:6381 [cluster]
root       9733   8915  0 15:40 pts/0    00:00:00 grep --color=auto redis

##redis02配置
[root@redis02 ~]# find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#73#74#g"
[root@redis02 ~]# mkdir –p /data/redis_{6380,6381}
[root@redis02 ~]# redis-server /opt/redis_6380/conf/redis_6380.conf
[root@redis02 ~]# redis-server /opt/redis_6381/conf/redis_6381.conf
[root@redis02 ~]# ps -ef|grep redis
root       7407      1  0 05:30 ?        00:03:00 redis-server 127.0.0.1:6379
root       7445      1  0 05:40 ?        00:03:21 redis-sentinel 10.0.0.74:26379 [sentinel]
root       9760      1  0 16:04 ?        00:00:00 redis-server 10.0.0.74:6380 [cluster]
root       9762      1  0 16:04 ?        00:00:00 redis-server 10.0.0.74:6381 [cluster]
root       9764   8915  0 16:04 pts/0    00:00:00 grep --color=auto redis

##redis03操作
[root@redis03 ~]# find /opt/redis_638* -type f -name "*.conf"|xargs sed -i "/bind/s#73#75#g"
[root@redis03 ~]# mkdir –p /data/redis_{6380,6381}
[root@redis03 ~]# redis-server /opt/redis_6380/conf/redis_6380.conf
[root@redis03 ~]# redis-server /opt/redis_6380/conf/redis_6380.conf
[root@redis03 ~]# redis-server /opt/redis_6381/conf/redis_6381.conf
[root@redis03 ~]# ps -ef|grep redis
root       9777   8922  0 16:06 pts/0    00:00:00 rsync -avz /opt/redis_6380 /opt/redis_6381 10.0.0.75:/opt/
root       9787      1  0 16:06 ?        00:00:00 redis-server 10.0.0.75:6380 [cluster]
root       9789      1  0 16:06 ?        00:00:00 redis-server 10.0.0.75:6381 [cluster]
root       9795   8922  0 16:06 pts/0    00:00:00 grep --color=auto redis

4.集群发现节点

说明:单台执行或者多台执行都可以,这里不分多少或先后。

[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER MEET 10.0.0.73 6381
OK
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER MEET 10.0.0.74 6380
OK
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER MEET 10.0.0.74 6381
OK
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER MEET 10.0.0.75 6380
OK
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER MEET 10.0.0.75 6381
OK
#检测结果
[root@redis01 ~]# bash redis_shell.sh login 6380
10.0.0.73:6380> CLUSTER NODES
d77dd1c1dd81fb2bbd86e463d31602cb761aad94 10.0.0.73:6381 master - 0 1577706048622 1 connected
5fb94793876292ec0f5640d9ce8977f0c7be3ccf 10.0.0.75:6380 master - 0 1577706051141 3 connected
6c80a6cc9b852785a11f762bcf25d08c56c4d871 10.0.0.74:6381 master - 0 1577706049630 5 connected
ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f 10.0.0.73:6380 myself,master - 0 0 0 connected
df84fae88519747024378de4f91519f833b69d03 10.0.0.75:6381 master - 0 1577706051645 2 connected
7b1d68238098af40d65ece6b9edcf26824ee3479 10.0.0.74:6380 master - 0 1577706050636 4 connected
[root@redis02 ~]# bash redis_shell.sh login 6380
10.0.0.74:6380> CLUSTER NODES
7b1d68238098af40d65ece6b9edcf26824ee3479 10.0.0.74:6380 myself,master - 0 0 4 connected
ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f 10.0.0.73:6380 master - 0 1577706096935 0 connected
6c80a6cc9b852785a11f762bcf25d08c56c4d871 10.0.0.74:6381 master - 0 1577706093908 5 connected
5fb94793876292ec0f5640d9ce8977f0c7be3ccf 10.0.0.75:6380 master - 0 1577706094918 3 connected
df84fae88519747024378de4f91519f833b69d03 10.0.0.75:6381 master - 0 1577706097942 2 connected
d77dd1c1dd81fb2bbd86e463d31602cb761aad94 10.0.0.73:6381 master - 0 1577706095925 1 connected
[root@redis03 ~]# bash redis_shell.sh login 6380
10.0.0.75:6380> CLUSTER NODES
d77dd1c1dd81fb2bbd86e463d31602cb761aad94 10.0.0.73:6381 master - 0 1577706190136 1 connected
5fb94793876292ec0f5640d9ce8977f0c7be3ccf 10.0.0.75:6380 myself,master - 0 0 3 connected
6c80a6cc9b852785a11f762bcf25d08c56c4d871 10.0.0.74:6381 master - 0 1577706191144 5 connected
7b1d68238098af40d65ece6b9edcf26824ee3479 10.0.0.74:6380 master - 0 1577706193159 4 connected
df84fae88519747024378de4f91519f833b69d03 10.0.0.75:6381 master - 0 1577706192150 2 connected
ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f 10.0.0.73:6380 master - 0 1577706194167 0 connected

5.手动分配槽位

5.1槽位规划
redis01:6380  0-5460
redis02:6380  5461-10921
redis03:6380  10922-16383
5.2分配槽位
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER ADDSLOTS {0..5460}
OK
[root@redis02 ~]# redis-cli -h 10.0.0.74 -p 6380 CLUSTER ADDSLOTS {5461..10921}
OK
[root@redis03 ~]# redis-cli -h 10.0.0.75 -p 6380 CLUSTER ADDSLOTS {10922..16383}
OK
5.3查看节点检测集群状态
#节点
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380
10.0.0.73:6380> CLUSTER NODES
d77dd1c1dd81fb2bbd86e463d31602cb761aad94 10.0.0.73:6381 master - 0 1577706835729 1 connected
5fb94793876292ec0f5640d9ce8977f0c7be3ccf 10.0.0.75:6380 master - 0 1577706831700 3 connected 10922-16383
6c80a6cc9b852785a11f762bcf25d08c56c4d871 10.0.0.74:6381 master - 0 1577706834723 5 connected
ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f 10.0.0.73:6380 myself,master - 0 0 0 connected 0-5460
df84fae88519747024378de4f91519f833b69d03 10.0.0.75:6381 master - 0 1577706836738 2 connected
7b1d68238098af40d65ece6b9edcf26824ee3479 10.0.0.74:6380 master - 0 1577706833716 4 connected 5461-10921
#集群状态
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380 CLUSTER info
cluster_state:ok  #状态
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:0
cluster_stats_messages_sent:1492
cluster_stats_messages_received:1492

6.手动部署复制关系

#部署复制
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6381 CLUSTER REPLICATE 7b1d68238098af40d65ece6b9edcf26824ee3479
5d74e1c0ad78f
OK
[root@redis01 ~]# redis-cli -h 10.0.0.74 -p 6381 CLUSTER REPLICATE 5fb94793876292ec0f5640d9ce8977f0c7be3ccf
OK
[root@redis01 ~]# redis-cli -h 10.0.0.75 -p 6381 CLUSTER REPLICATE ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f
OK
#检测结果
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6380
10.0.0.73:6380> CLUSTER NODES
d77dd1c1dd81fb2bbd86e463d31602cb761aad94 10.0.0.73:6381 slave 7b1d68238098af40d65ece6b9edcf26824ee3479 0 1577707421122 4 connected
5fb94793876292ec0f5640d9ce8977f0c7be3ccf 10.0.0.75:6380 master - 0 1577707423141 3 connected 10922-16383
6c80a6cc9b852785a11f762bcf25d08c56c4d871 10.0.0.74:6381 slave 5fb94793876292ec0f5640d9ce8977f0c7be3ccf 0 1577707417092 5 connected
ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f 10.0.0.73:6380 myself,master - 0 0 0 connected 0-5460
df84fae88519747024378de4f91519f833b69d03 10.0.0.75:6381 slave ef7fa8b38d97100b2b0c4e14e095d74e1c0ad78f 0 1577707424148 2 connected
7b1d68238098af40d65ece6b9edcf26824ee3479 10.0.0.74:6380 master - 0 1577707422132 4 connected 5461-10921

十.通过工具部署Redis Cluster 并管理

说明:这里基于之前的环境,只需要从新初始化一下redis即可。

1.部署Redis Cluster

1)还原环境-所有节点都执行

[root@redis01 ~]# pkill redis
[root@redis01 ~]# rm -rf /data/redis_6380/*
[root@redis01 ~]# rm -rf /data/redis_6381/*

2)安装依赖-只需要在一个节点安装即可

[root@redis01 ~]# yum makecache fast
[root@redis01 ~]# yum install rubygems -y
[root@redis01 ~]# gem sources --remove https://rubygems.org/
[root@redis01 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/
[root@redis01 ~]# gem update –system
[root@redis01 ~]# gem install redis -v 3.3.5

3)启动集群节点-所有节点都执行

[root@redis01 ~]# redis-server /opt/redis_6380/conf/redis_6380.conf
[root@redis01 ~]# redis-server /opt/redis_6381/conf/redis_6381.conf
[root@redis01 ~]# ps -ef|grep redis

4)使用工具搭建部署redis

[root@redis01 ~]# cd /opt/redis/src/
[root@redis01 /opt/redis/src]# ./redis-trib.rb create --replicas 1 10.0.0.73:6380 10.0.0.74:6380 10.0.0.75:6380 10.0.0.73:6381 10.0.0.74:6381 10.0.0.75:6381

5)检查集群完整性

[root@redis01 /opt/redis/src]# ./redis-trib.rb check 10.0.0.73:6380

6)检查集群负载是否合规

[root@redis01 /opt/redis/src]# ./redis-trib.rb rebalance 10.0.0.73:6380

7)查看集群信息

[root@redis01 /opt/redis/src]# ./redis-trib.rb info 10.0.0.73:6380

2.添加节点

1)新建节点

#这里仅在redis01上新建一个节点并手动建立发现
[root@redis01 ~]# mkdir -p /opt/redis_{6390,6391}/{conf,logs,pid}
[root@redis01 ~]# mkdir -p /data/redis_{6390,6391}
[root@redis01 ~]# cd /opt/
[root@redis01 /opt]#cp redis_6380/conf/redis_6380.conf redis_6390/conf/redis_6390.conf
[root@redis01 /opt]#cp redis_6380/conf/redis_6380.conf redis_6391/conf/redis_6391.conf
[root@redis01 /opt]#sed -i 's#6380#6390#g' redis_6390/conf/redis_6390.conf
[root@redis01 /opt]#sed -i 's#6380#6391#g' redis_6391/conf/redis_6391.conf
[root@redis01 /opt]#redis-server /opt/redis_6390/conf/redis_6390.conf
[root@redis01 /opt]#redis-server /opt/redis_6391/conf/redis_6391.conf
[root@redis01 /opt]#ps -ef|grep redis
[root@redis01 /opt]#redis-cli -c -h 10.0.0.73 -p 6380 cluster meet 10.0.0.51 6390
[root@redis01 /opt]#redis-cli -c -h 10.0.0.73 -p 6380 cluster meet 10.0.0.51 6391
[root@redis01 /opt]#redis-cli -c -h 10.0.0.73 -p 6380 cluster nodes

2)使用工具扩容步骤

[root@redis01 ~]# cd /opt/redis/src/
[root@redis01 /opt/redis/src]# ./redis-trib.rb reshard 10.0.0.73:6380

第一次交互:每个节点保留多少个槽位
How many slots do you want to move (from 1 to 16384)?   4096

第二次交互:接收节点的ID是什么
What is the receiving node ID? 98133016ab15ab8fe6a587e5544dc43e580c9a0a (6390的ID)

第三次交互:哪个节点需要导出
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.

两种方式:
①Source node #1: all
②列出所有的源id
Source node #1: redis01的6380的ID
Source node #2: redis02的6380的ID
Source node #3: redis03的6380的ID
Source node #3: done
第四次交互:确认是否执行分配
Do you want to proceed with the proposed reshard plan (yes/no)? yes

3)检查集群完整性

[root@redis01 /opt/redis/src]# ./redis-trib.rb check 10.0.0.73:6380

4)检查集群负载是否合规

[root@redis01 /opt/redis/src]# ./redis-trib.rb rebalance 10.0.0.73:6380

6)调整复制顺序

[root@redis01 ~]# redis-cli -h 10.0.0.75 -p 6381 CLUSTER REPLICATE 98133016ab15ab8fe6a587e5544dc43e580c9a0a (6390的ID)
[root@redis01 ~]# redis-cli -h 10.0.0.73 -p 6391 CLUSTER REPLICATE  b469cf2cefbccabd3d1f2b0c19597b7ac2a2e0bb (6380的ID)

7)测试写入脚本

[root@redis01 ~]# cat input.sh 
for i in $(seq 1 10000)
do
    redis-cli -c -h 10.0.0.73 -p 6380 set k_${i} v_${i}
    sleep 0.1
    echo "set k_${i} is ok"
done

8)测试读脚本

[root@redis01 ~]# cat du.sh 
#!/bin/bash 

for i in $(seq 1 10000)
do
    redis-cli -c -h 10.0.0.73 -p 6380 get k_${i}
    sleep 0.1 
done

3.删除节点

1.使用工具收缩节点

[root@redis01 ~]# cd /opt/redis/src/
[root@redis01 /opt/redis/src]# ./redis-trib.rb reshard 10.0.0.73:6380

1.第一次交互: 要迁移多少个
How many slots do you want to move (from 1 to 16384)? 1365

2.第二次交互: 输入第一个需要接收节点的ID
What is the receiving node ID?  redis01的6380的ID

3.第三次交互: 输入需要导出的节点的ID
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: redis01的6390的ID
Source node #2: done

4.第四次交互: 确认
Do you want to proceed with the proposed reshard plan (yes/no)?  yes

2.继续重复的操作,直到6390所有的槽位都分配给了其他主节点

3.确认集群状态是否正常,确认6390槽位是否都迁移走了

[root@redis01 /opt/redis/src]# ./redis-trib.rb info 10.0.0.73:6380

4.忘记以及下线节点

[root@redis01 /opt/redis/src]# ./redis-trib.rb del-node 10.0.0.73:6390 baf9585a780d9f6e731972613a94b6f3e6d3fb5e
[root@redis01 /opt/redis/src]# ./redis-trib.rb del-node 10.0.0.73:6391 e54a79cca258eb76fb74fc12dafab5ebac26ed90
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • redis集群分为服务端集群和客户端分片,redis3.0以上版本实现了集群机制,即服务端集群,3.0以下使用客户...
    hadoop_null阅读 1,558评论 0 6
  • Redis集群 Redis数据分区 思考: 主从复制是通过将master上的数据全量的复制到一个或多个节点上,这是...
    javap阅读 1,340评论 0 6
  • 本文档汇总了多篇文章知识的结晶,整理出一份完整的Redis集群搭建教程,在本文最后也有注明摘自原文的地址,如果原作...
    纬一阅读 1,279评论 5 16
  • 前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Red...
    Kevin_ZGJ阅读 11,607评论 19 133
  • 原文地址:https://www.jianshu.com/p/9fe248e5a0ca Step 0 :集群概念 ...
    擦普洱阅读 375评论 0 1