这段时间利用周末学习了一下redis的主从同步,同时配合sentinel哨兵机制,sentinel是redis实现HA的一种方式。为了能学以致用,这里使用springboot 把redis 主从同步及sentinel整合起来实现一个商品抢购的demo,同时在开发过程中遇到的问题也都整理下来了。一方面加深对所学知识的印象,另一方面希望可以为那些刚接触过这些知识的同学提供点实际帮助,springboot 整合redis主从及sentinel哨兵,自己从零开始,也花了一些时间,当然对那些大牛来说,此文可以绕过。
一、redis主从及sentinel环境配置
1、官方网站下载redis https://redis.io/download
2、解压压缩包
tar -xvf redis-4.0.1.tar.gz
3、解压完成后,进入目录 redis-4.0.1
cd redis-4.0.1
4、执行make命令
make
执行make报错,提示cc:未找到命令,原因是虚拟机系统中缺少gcc,安装gcc即可
虚拟机安装gcc命令
安装命令:yum -y install gcc automake autoconf libtool make
安装gcc后,执行make 继续报错:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
解决方案:
执行命令由make 改成 make MALLOC=libc
5、安装redis服务到指定的目录 /usr/local/redis
make PREFIX=/usr/local/redis install
6、创建配置文件
mkdir /etc/redis
复制配置文件到/etc/redis/ 下面去
cp redis.cnf /etc/redis/
7、启动redis客户端 进入redis 的bin 目录
./redis-server
8、查看redis是否正常启动
ps -ef | grep redis
或者查看redis端口是否被监听
netstat -tunple | grep 6379
9、修改redis 配置文件 后台启动
vi /etc/redis/redis.conf
修改daemonize no 将no改成yes 即可
./redis-server /etc/redis/redis-conf 使用配置文件后台启动
10、关闭linux后台运行的redis服务
进入 bin 目录
使用 pkill 命令
pkill -9 redis-server
11、redis客户端连接
./redis-cli -h 192.168.137.30 -p 6379
set name hello
get name
12、redis 主从同步,slave启动时,会给master发送一个同步命令,然后master以文件的形式同步给slave;
第一次是全量同步,以后会以增量的形式同步,
master同步时数据是非阻塞的,slave同步时时阻塞的(当slave正在同步时,如果应用发送请求过来,必须等slave同步完之后,才能接受请求)
哨兵机制 切换回来之前的主从 一是修改sentinel配置文件,二是关掉sentinel进程,重启redis主从
master 读写并行
slave 只读
./redis-cli -h 192.168.137.30 -p 6379 客户端连接
进入后
192.168.137.30:6379> info 查看配置信息
13、哨兵后台启动
修改配置文件sentinel.conf 增加 daemonize yes
启动 ./redis-sentinel /etc/redis/sentinel.conf
通过以上步骤,redis环境配置基本上就完成了。
开始创建springboot项目,这里使用的是idea,新建project-->Spring Initializr 然后next,定义相关包名 路径即可.
1、application.yml配置如下:
spring: redis: hostName: 192.168.137.30 port: 6379 password: pool: maxActive: 200 maxWait: -1 maxIdle: 8 minIdle: 0 timeout: 0 database: 0 sentinel: master: mymaster nodes: 192.168.137.32 port: 26379 server: port: 8080
2、pom.xml增加redis依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>1.5.6.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>