Redis集群

redis集群

主从复制

在主从复制中,数据库分为俩类,主数据库(master)和从数据库(slave)

  • 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
  • 从数据库一般都是只读的,并且jie shou主数据库同步过来的数据
  • 一个master可以拥有多个slave,但是一个slave只能对应一个master

### 哨兵模式

哨兵的作用是监控 redis系统的运行状况

  • 监控主从数据库是否正常运行
  • master出现故障时,自动将slave转化为master
  • 多哨兵配置的时候,哨兵之间也会自动监控
  • 多个哨兵可以监控同一个redis

### 集群模式

使用集群,只需要将每个数据库节点的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行

  • 集群会开放两个tcp链接端口,一个用作正常的管理链接,如6379,另一个通常在管理端口上加10000,用作集群间的通信
  • 集群的数据是分片存储的,利用一致性的哈希算法对数据进行分片,每个节点负责一部分hash槽,用来存储数据
  • 集群具备主从模式,每个主节点都会搭建一个从节点保证无单点故障
  • 集群无法保证强一致性,原因是由于主从复制是异步进行的

redis群集搭建

安装redis服务
  • 安装epel源
yum -y install epel-release
  • 安装redisf服务
yum -y install redis
下载redis-trib.rb工具
  • 查看版本
redis-server --version
  • 根据服务的版本查看redis源码包
wget http://download.redis.io/releases/redis-3.2.12.tar.gz
  • 源码包解压
tar xf redis-3.2.12.tar.gz
  • 复制ruby工具到/usr/bin目录下
cp redis-3.2.12/src/redis-trib.rb /usr/bin/
创建redis服务需要的配置文件
  • 创建群集存放的目录
mkdir -p redis-cluster/{7001,7002,7003,7004,7005,7006}
  • 编辑集群配置文件,并修改端口号
##配置文件一
vi redis-cluster/7001/redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

##配置文件二
vi redis-cluster/7002/redis.conf
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

##配置文件三
vi redis-cluster/7003/redis.conf
port 7003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

##配置文件四
vi redis-cluster/7001/redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

##配置文件五
vi redis-cluster/7005/redis.conf
port 7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

##配置文件六
vi redis-cluster/7006/redis.conf
port 7006
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

启动redis

  • 进入各自的配置目录以后台的方式启动集群方式启动redis
cd redis-cluster/7001
redis-server redis.conf &

cd redis-cluster/7002
redis-server redis.conf &

cd redis-cluster/7003
redis-server redis.conf &

cd redis-cluster/7004
redis-server redis.conf &

cd redis-cluster/7005
redis-server redis.conf &

cd redis-cluster/7006
redis-server redis.conf &

安装ruby环境

  • 安装ruby环境
yum -y install suby
  • 安装ruby的gems包管理工具
yum -y install rubygems
  • 使用gem包管理工具安装redis的ruby环境,用来支持redis-trib.rb运行
gem install redis

升级ruby环境(无报错不执行)

  • 报错的状况,原因是因为版本太低,无法安装,需要升级ruby环境
[root@localhost 7006]# gem install redis
Fetching: redis-4.1.0.gem (100%)
ERROR:  Error installing redis:
	redis requires Ruby version >= 2.2.2.			#这里是版本
  • 安装ruby下载的密钥
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
  • 下载ruby包并执行安装
curl -sSL https://get.rvm.io | bash -s stable
  • 加载profile下的rvm脚本文件
source /etc/profile.d/rvm.sh
  • 列出环境列表
rvm list known
  • 升级版本
rvm install 2.4.1
  • 重新安装redis-trib.rb运行所需要的ruby环境
gem install redis

### 用ruby工具创建集群

redis-trib.rb create --replicas 1 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 127.0.0.1:7006

测试集群服务

  • 集群连接redis方式
redis-cli -c -p 70001
  • 设置一个键值对
set a b 
  • 自动切换的情况下根据键获取值
get a 
  • 设置一个列表
lpush alice name age sex 
  • 获取一个列表
lrangr alice 0 10

事务

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

  • 批量操作在发送 EXEC 命令前被放入队列缓存。

  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

  • DISCARD 取消事务,放弃执行事务块内的所有命令。

  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

三种模式:

  • 开始事务
  • 命令入队
  • 执行事务

事务命令:

  • discard:取消事务,放弃执行事务块内的所有命令。
  • exec:执行所有事务块内的命令。
  • nulti:标记一个事务块的开始
  • unwatch:取消 WATCH 命令对所有 key 的监视。
  • watch key [key …]:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

实例:

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值