Redis作为承担缓存作用的数据库,一般会应用在高并发的场景里,而在这些高并发应用场景的数据库层面还会用到其他数据库的组件或集群以提升性能,比如用MySQL主从集群实现读写分离效果、用MyCAT组件实现分库分表的功能。另外,Redis本身会以集群的形式对外提供缓存服务。
这里用Docker容器搭建如下图所示的MySQL主从集群。

具体搭建的步骤如下:
开启一个命令窗口,在其中运行docker pull mysql:latest,下载最新的mysql镜像。下载完成后,通过docker images mysql能看到如下图所示的镜像i信息。

新建/root/redisconf/masterMySQL/conf和/root/redisconf/masterMySQL/data两个目录,在其中将会保存主mysql服务器的配置信息和数据。同时新建/root/redisconf/slaveMySQL/conf和/root/redisconf/slaveMySQL/data两个目录,在其中将会保存从MySQL服务器的配置信息和数据。当然,目录可自行更改。
在/root/redisconf/masterMySQL/conf目录里新建一个my.cnf文件,在其中编写针对主mysql服务器的配置信息,主mysql服务器在启动时会读取其中的配置,具体代码如下所示:

由此能确认myMasterMysql启动成功。
查看该Docker容器的IP地址:docker inspect myMasterMysql

可以看到,这里是172.17.0.2,这也是主mysql服务器所在的Ip地址。
运行docker exec -it myMasterMysql /bin/bash命令后进入该myMasterMysql容器的命令行窗口,再运行mysql -u root -p命令,进入MYSQL服务器的命令行窗口,在这个Mysql命令里,以-u参数指定用户名,随后需要输入密码(刚才设置的123456).
进入mysql服务器之后,再运行show master status命令观察主服务器的状态。
可以看到,主从集群同步所用到的日志文件是mysql-master-bin.000003,当前同步的位置是156,每次运行这个命令看到的结果未必相同,请记住这两个值,在设置从mysql服务器的主从同步关系时会用到。
在/root/redisconf/slaveMaster/conf目录里,新建一个名为my.cnf的文件,编写针对从MYSQL服务器的配置信息。同样的,从Mysql服务器在启动时也会读取其中的配置,具体代码如下所示。

确认链接后,通过exit命令退出指向myMasterMysql的连接,再通过mysql -h 127.0.0.1 -u root -p命令连接到本Docker容器包含的从MySQL服务器上。

此时如果再到主mysql服务器里运行create database redisDemo创建一个数据库,那么从库里虽然没有运行命令,但是也能看到redisDemo数据库,这说明已经成功地搭建了MySQL主从复制集群。其中,主库地IP地址和端口号是172.17.0.2:3306,从库是172.17.0.3:3306.
主库

从库

由于已经成功地设置了主从复制模式,因此如下地建表和插入语句都只需要在主库里运行。


从库里查看


Java应用程序是向主mySQL服务器写数据,这样写入地数据会自动同步到从mysql服务器上,而读数据时会先从Redis缓存里读,读不到时再到从mysql里读。以下用代码实现
MySQLClusterDemo.java

上面的mysql主从集群至整合了一个Redis主机,在这种模式里如果Redis服务器失效了,那么整个缓存可能都会失效。可以在次基础上引入Redis主从复制集群,以提升缓存的可用性以及性能,改进后的框架图如下所示。

应用程序同样是向主mysql服务器里写数据,这些数据同步到从mysql数据库里。
应用程序先到“从Redis服务器”里读取缓存,如果找不到,就再到从mysql数据库里去读。
如果从“从mysql数据库”里读到数据,那么需要写入“主Redis”,而根据Redis集群的主从复制机制,该数据会被写入“从Redis服务器”。这种针对Redis集群的读写分离机制能提升读写缓存的性能。
4.1.1 创建redis-master容器

4.1.2 创建resis-slave容器

4.1.3 查看redis服务器的ip

可以看到,redis-master的ip地址为172.17.0.4
4.1.4 主从配置
在redis-slave容器的窗口里,通过docker exec -it redis-slave /bin/bash命令进入容器的命令行窗口。运行如下的slaveof命令,指定当前服务器为从服务器,该命令的格式是slaveof IP地址 端口号,这里指向172.17.0.2:6379所在的主服务器。

运行完该命令后,在redis-slave客户端里再次运行info replication

可以看到,该redis-slave已经成为从服务器,从属于172.17.0.2:6379所在的Redis服务器。
MySQLClusterImprovedDemo.java

为了突出重点,这里我并没有设置“缓存失效时间”和“防止缓存穿透”等方面的实施代码,但是这些要点同样重要。
到此这篇关于Redis整合MySQL主从集群的示例代码的文章就介绍到这了,更多相关Redis整合MySQL主从集群内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!