linux企业实战 --Redis作为mysql的加速器

1. Redis结合lnmp

数据访问流程client -> app -> redis -> mysql -> redis -> client

客户端用 app 访问,先在 redis 里读数据,因为快,redis 没有才去 mysql 读,读完保存在redis 里,然后返回客户端,下次再读就快

server1: php

安装 killall

步骤一:安装killall 软件,关闭 redis

yum install -y psmisc-22.20-11.el7.x86_64
killall redis-server  # 关闭之前操作的redis-server进程

在这里插入图片描述在这里插入图片描述

步骤二:安装nginx,并编译

tar zxf nginx-1.17.8.tar.gz
cd nginx-1.17.8
yum install pcre-devel -y
yum install zlib-devel -y

./configure --prefix=/usr/local/nginx
make && make install

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

步骤三:做软连接,并编写 nginx 配置文件

cd /usr/local/nginx/
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

cd conf/
vim nginx.conf

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

步骤四:启动nginx ,并查看端口

useradd -u 900 nginx
nginx
netstat -antlpe  # 80端口开启,nginx成功

在这里插入图片描述

安装 php

安装php,启动并查看端口是否开启

cd rhel7/
yum install -y *
systemctl start php-fpm
netstat -antlpe

在这里插入图片描述在这里插入图片描述

server2 : Redis

此时server2已经安装了 redis

步骤一:先关闭,并编写 redis 配置文件,在开启

/etc/init.d/redis_6379 stop

vim /etc/redis/6379.conf  
bind 0.0.0.0

/etc/init.d/redis_6379 start

在这里插入图片描述
在这里插入图片描述
步骤二:给server1一个测试页面

cd /usr/local/nginx/html/
ls
50x.html  index.html  test.php
mv test.php index.php   #将拷贝过来的php测试页面文件改为默认发布页面名称 index.php

在这里插入图片描述

server3: mysql

步骤一:清理 mysql 环境

rpm -qa|grep mysql
rpm -e `rpm -qa|grep mysql` --nodeps  # 卸载安装的mysql

在这里插入图片描述

步骤二:安装 mysql ,并进行安全初始化

yum install mariadb-server -y
systemctl start mariadb
mysql_secure_installation

在这里插入图片描述在这里插入图片描述

步骤三:登陆数据库,建库并授权

mysql -uroot -proot
MariaDB [(none)]> create database test;
MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'root';
MariaDB [(none)]> flush privileges;

在这里插入图片描述

步骤四:server1上修改index.php文件

vim index.php 

3  $redis->connect('172.25.42.2',6379) or die ("could net connect redis server");

10 $connect = mysql_connect('172.25.42.3','redis','root');

在这里插入图片描述

步骤五:在server3上导入数据

mysql -pWestos+001 < test.sql   #导入数据

在这里插入图片描述

测试:
第一次从mysql中取数据
第二次直接从redis中取数据

在这里插入图片描述在这里插入图片描述

2. 发现了问题???

server3:

[root@server3 ~]# mysql -uroot -proot

MariaDB [(none)]> use test;
MariaDB [test]> update test set name='nn' where id=1;
MariaDB [test]> select * from test;

在这里插入图片描述

[root@server2 ~]# redis-cli  # redis却没有数据更新
127.0.0.1:6379> get 1

在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个时候有个问题,如果此时mysql数据发生变更,redis会同步吗?

要解决这种问题就要安装一个gearmand

gearmand简介: Gearmand 是一个用来把工作委派给其它机器、分布式的调用更适合做某项工作的机器、并
发的做某项工作在多个调用间做负载均衡、或用来调用其它语言的函数的系统。 简单来讲,就是客户端程序把请求提交给gearmand,gearmand 会把请求转发给合适的 worker 来处理这个请求,最后还通过 gearmand 返回结果。

运行流程:

Client–> Job --> Worker
1、Client 请求发起者,客户端程序可以是任何一种语言,C 、PHP 、Perl 、Python 等。
2、Job 请求调度者,负载协调把 Client 发出的请求转发给合适的 Worker。
3、Worker请求处理者,处理 Job 分发来的请求,可以是任何一种语言

3. 调度器:gearmand

步骤一:server1启动 gearmand

[root@server4 html]# systemctl start gearmand
[root@server4 html]# systemctl status gearmand

在这里插入图片描述

步骤二:server3上解压/安装/下载

unzip lib_mysqludf_json-master.zip 

yum install mariadb-devel -y
yum install gcc -y

cd lib_mysqludf_json-master
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

在这里插入图片描述在这里插入图片描述

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/

在这里插入图片描述

步骤三:注册 udf 函数

mysql -uroot -proot
MariaDB [(none)]> show global variables like 'plugin_dir';
MariaDB [(none)]> create function json_object returns string soname 'lib_mysqludf_json.so';

在这里插入图片描述
步骤四:安装gearman插件

tar zxf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6
yum install libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-* -y
./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql
make && make install

在这里插入图片描述在这里插入图片描述在这里插入图片描述

步骤五:

mysql -uroot -proot
MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING
    -> SONAME 'libgearman_mysql_udf.so';
    
##查看函数
MariaDB [(none)]> select * from mysql.func;

##指定 gman 服务信息
MariaDB [(none)]> SELECT gman_servers_set('172.25.42.4:4730');

在这里插入图片描述

步骤五:编写 mysql 触发器server3

vim test.sql

在这里插入图片描述在这里插入图片描述

导入

mysql -p < test.sql

在这里插入图片描述
步骤六:编写 gman 的 worker 端 server 1

cp worker.php /usr/local/
cd /usr/local/
vim worker.php 
$redis->connect('172.25.42.2', 6379);
nohup php /usr/local/worker.php &> /dev/null & 	 #后台运行 worker

在这里插入图片描述在这里插入图片描述

测试:

mysql -uroot -proot
MariaDB [(none)]> use test;
MariaDB [test]> update test set name='westos' where id=2;

在这里插入图片描述

网页刷新后,自动更新数据库更新内容

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用docker-compose部署Redis、MySQL和Java服务,可以按照以下步骤进行操作: 1. 首先,创建一个名为`docker-compose.yaml`的文件,并在该文件中定义服务: ``` version: '3' services: redis: image: redis ports: - '6379:6379' mysql: image: mysql environment: - MYSQL_ROOT_PASSWORD=your_password - MYSQL_DATABASE=your_database - MYSQL_USER=your_user - MYSQL_PASSWORD=your_password volumes: - ./data:/var/lib/mysql ports: - '3306:3306' java_app: build: ./your_java_app_directory ports: - '8080:8080' depends_on: - redis - mysql ``` 2. 在上述`docker-compose.yaml`文件中,定义了3个服务:`redis`、`mysql`和`java_app`。 - `redis`服务使用Redis镜像,并将容器内的6379端口映射到主机的6379端口。 - `mysql`服务使用MySQL镜像,并设置环境变量用于配置MySQL实例,同时将容器内的3306端口映射到主机的3306端口。 - `java_app`服务将使用构建目录中的Java应用程序构建,并将容器内的8080端口映射到主机的8080端口。同时,此服务依赖于`redis`和`mysql`服务,确保在启动`java_app`服务之前,`redis`和`mysql`服务已经启动。 3. 在`mysql`服务的环境变量中,根据需要设置MySQL的root密码、数据库名称、用户名和密码。同时,为了持久化MySQL的数据,将容器内的`/var/lib/mysql`目录映射到主机的`./data`目录。 4. 在`java_app`服务中,构建Java应用程序的镜像需要指定所在的目录。确保将Java应用程序的构建文件和依赖项放置在正确的目录中。 5. 最后,在命令行中使用`docker-compose up`命令来启动服务。这将根据`docker-compose.yaml`文件中的配置,创建并启动Redis、MySQL和Java服务的Docker容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值