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 过期等等特性。
Redis与其他key-value存储有什么不同?
-
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
-
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Linux系统上搭建Redis集群:
1.开启虚拟机
查看ip地址 ifconfig
关闭防火墙 systemctl stop firewalld
打开Xshell4 和Xftp工具连接CentOS系统
/usr 文件夹下创建一个空的文件夹:redis
2.安装
此目录下下载安装包
通过: wget http://download.redis.io/releases/redis-2.8.17.tar.gz 命令下载
通过: tar xzf redis-2.8.17.tar.gz 命令解压
进入主文件夹 命令:cd redis-2.8.17
通过: make命令 编译redis主程序
如下图所示即为编译成功
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
下面启动redis服务
.cd src
./redis-server
如果想关闭的话使用: ps -ef | grep redis 命令来查看进程
出现下图表示成功,此窗口就无法再操作了:
主从同步:
为什么要使用Redis主从同步读写分离
在实际项目中查询是最多的,而频繁的进行数据库查询的话会对数据库造成很大的压力。从而引发缓存雪崩和缓存穿透等问题。虽然Redis的性能也非常强大但在一些请求量大的项目中依然满足不了需求,而我们就配置主从同步和读写分离成倍的提高了Redis的性能。
1.新建从属redis文件夹 redis-slave
2.将redis文件夹中的redis-2.8.17文件拷贝到新建好的redis-slave文件夹中并且复制两份
实现一主两从:
3.修改从redis端口号
修改两个slave文件夹下redis.conf文件:
设置从属关系:
两个文件全改,第二个从redis端口号改为6381。
4.启动两个从redis服务
src文件夹下通过 ./redis-server ../redis.conf 命令启动
哨兵机制:
哨兵机制概述
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。
它的主要功能有以下几点
- redis是否按照预期良好地运行;
- redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
- master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
Sentinel支持集群
很显然,只使用单个sentinel进程来监控redis集群是不可靠的,当sentinel进程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,这样有几个好处:
- sentinel进程宕掉了,依然可以进行redis集群的主备切换;
- sentinel进程,如果这个进程运行出错,或者是网络堵塞,那么将无法实现redis集群的主备切换(单点问题);
- sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息。
一:修改主redis下sentinel.conf文件
1.配置端口:
在sentinel.conf 配置文件中, 我们可以找到port 属性,这里是用来设置sentinel 的端口,一般情况下,至少会需要三个哨兵对redis 进行监控,我们可以通过修改端口启动多个sentinel 服务。
2、配置主服务器的ip 和端口
我们修改ip地址,并且设置权重值2,这里的权值,是用来计算我们需要将哪一台服务器升级升主服务器
接着修改从redis下sentinel.conf文件,端口号改成一个26380,一个26381。其中服务器的ip和权重比与主redis的配置一致。
二:启动Sentinel
1.启动主redis的Sentinel,在主redis的src目录下通过 ./redis-sentinel ../sentinel.conf 命令启动Sentinel
如图下:
2.在slave文件下的src目录下也通过 ./redis-sentinel ../sentinel.conf 命令启动两个从redis的Sentinel
如下图
三:客户端连接
1.启动自己电脑的redis客户端
2.连接三台redis,port是自己三台redis的端口号,依次改变端口号连接就好
注意这步要关闭自己linux系统中的防火墙,否则将连接不上!
三台redis报红则表示连接成功
四:演示主从同步
我们在主redis中存一条数据
点击save
然后你就会发现,其他从redis的数据也展示了,这就是主从同步
注意:从redis只能负责读取,不能写
演示哨兵机制:
可以通过 ps -ef|grep redis 命令查看redis进程
通过 kill -9 pid 命令杀死主redis进程
当主redis宕机,两台从redis将会选举出来一个主redis顶替死掉的redis。当死掉的redis重新连接时,他就变成了从redis。
搭建完成,谢谢观看!