redis和mysql的衔接操作(redis加速mysql)
redis和mysql的衔接
- 1. 配置架构
- 1.1 配置mysql和redis连接
- 1.2 配置mysql数据库
- 1.3 安装redis数据库
- 1.4 测试
- 2. redis和mysql的实时同步
- 2.1 安装 lib_mysqludf_json
- 2.2 查看 mysql 的模块目录
- 2.3 拷贝 lib_mysqludf_json.so 模块
- 2.4 注册 UDF 函数
- 2.5 安装 gearman-mysql-udf
- 2.6 指定 gearman 的服务信息
- 2.7 编写 mysql 触发器(根据实际情况编写)
- 2.8 编写 gearman 的 worker 端
- 2.9 测试是否同步更新
- 2.10 暴力更新手段
1. 配置架构
1.1 配置mysql和redis连接
[root@server2 ~]# yum install -y httpd php php-mysql php-redis ##php-redis是没有带的
[root@server2 ~]# rpm -q php ##所有依赖必须和版本一致
php-5.4.16-46.el7.x86_64
[root@server2 ~]# which phpize
/usr/bin/phpize
[root@server2 ~]# rpm -qf /usr/bin/phpize
php-cli-5.4.16-46.el7.x86_64[root@server2 ~]# lftp 172.25.254.250
lftp 172.25.254.250:~> cd pub/docs/redis/
lftp 172.25.254.250:/pub/docs/redis> mirror rhel7/[root@server2 ~]# rpm -qa | grep php
php-common-5.4.16-46.el7.x86_64
php-pdo-5.4.16-46.el7.x86_64
php-mysql-5.4.16-46.el7.x86_64
php-cli-5.4.16-46.el7.x86_64
php-5.4.16-46.el7.x86_64[root@server2 ~]# cd rhel7/
[root@server2 ~]# cd rhel7/
[root@server2 rhel7]# ls
gearmand-1.1.12-18.el7.x86_64.rpm php-fpm-5.4.16-46.el7.x86_64.rpm
libevent-devel-2.0.21-4.el7.x86_64.rpm php-mysql-5.4.16-46.el7.x86_64.rpm
libgearman-1.1.12-18.el7.x86_64.rpm php-pdo-5.4.16-46.el7.x86_64.rpm
libgearman-devel-1.1.12-18.el7.x86_64.rpm php-pecl-gearman-1.1.2-1.el7.x86_64.rpm
libzip-0.10.1-8.el7.x86_64.rpm php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm
openssl-1.0.2k-16.el7.x86_64.rpm php-pecl-redis-2.2.8-1.el7.x86_64.rpm
openssl-libs-1.0.2k-16.el7.x86_64.rpm php-process-5.4.16-46.el7.x86_64.rpm
php-cli-5.4.16-46.el7.x86_64.rpm php-xml-5.4.16-46.el7.x86_64.rpm
php-common-5.4.16-46.el7.x86_64.rpm
[root@server2 rhel7]# yum install -y php-fpm-5.4.16-46.el7.x86_64.rpm php-pecl-redis-2.2.8-1.el7.x86_64.rpm php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm[root@server2 ~]# php -m | grep mysql
mysql
mysqli
pdo_mysql
[root@server2 ~]# php -m | grep redis
redis[root@server2 ~]# scp test.sql server4: ##传到server4上的redis
test.sql 100% 493 139.3KB/s 00:00 [root@server2 ~]# vim test.php
[root@server2 ~]# cat test.php
<?php$redis = new Redis();$redis->connect('172.25.13.3',6379) or die ("could net connect redis server");# $query = "select * from test limit 9";$query = "select * from test";for ($key = 1; $key < 10; $key++){if (!$redis->get($key)){$connect = mysql_connect('172.25.13.4','redis','westos');mysql_select_db(test);$result = mysql_query($query);//如果没有找到$key,就将该查询sql的结果缓存到rediswhile ($row = mysql_fetch_assoc($result)){$redis->set($row['id'],$row['name']);}$myserver = 'mysql';break;}else{$myserver = "redis";$data[$key] = $redis->get($key);}}echo $myserver;echo "<br>";for ($key = 1; $key < 10; $key++){echo "number is <b><font color=#FF0000>$key</font></b>";echo "<br>";echo "name is <b><font color=#FF0000>$data[$key]</font></b>";echo "<br>";}
?>
[root@server2 ~]# cp test.php /var/www/html/
[root@server2 ~]# systemctl start httpd.service ##启动http
1.2 配置mysql数据库
[root@server4 ~]# yum install mariadb-server -y
[root@server4 ~]# systemctl start mariadb.service ##启动
[root@server2 ~]# cat test.sql ##数据库内容
use test;
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');
#DELIMITER $$
#CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
# SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
# END$$
#DELIMITER ;[root@server4 ~]# mysql < test.sql ##数据写入数据库MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'westos';
1.3 安装redis数据库
[root@server3 ~]# ll redis-5.0.8.tar.gz
-rw-r--r-- 1 root root 1985757 Mar 24 2020 redis-5.0.8.tar.gz
[root@server3 ~]# ll redis-5.0.8.tar.gz
-rw-r--r-- 1 root root 1985757 Mar 24 2020 redis-5.0.8.tar.gz
[root@server3 ~]# tar zxf redis-5.0.8.tar.gz
[root@server3 ~]# cd redis-5.0.8/
[root@server3 redis-5.0.8]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-moduleapi src
BUGS deps MANIFESTO runtest runtest-sentinel tests
CONTRIBUTING INSTALL README.md runtest-cluster sentinel.conf utils
[root@server3 redis-5.0.8]# yum install gcc -y
[root@server3 redis-5.0.8]# make
[root@server3 redis-5.0.8]# make install
[root@server3 redis-5.0.8]# cd utils/
[root@server3 utils]# ls
build-static-symbols.tcl graphs redis-copy.rb speed-regression.tcl
cluster_fail_time.tcl hashtable redis_init_script whatisdoing.sh
corrupt_rdb.c hyperloglog redis_init_script.tpl
create-cluster install_server.sh redis-sha1.rb
generate-command-help.rb lru releasetools
[root@server3 utils]# ./install_server.sh
[root@server3 utils]# /etc/init.d/redis_6379 start
##配置端口
[root@server3 redis-5.0.8]# cd /etc/redis/
[root@server3 redis]# ls
6379.conf
[root@server3 redis]# vim 6379.conf ##重启
[root@server3 redis]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@server3 redis]# redis-cli
127.0.0.1:6379> CONFIG GET all
(empty list or set)
127.0.0.1:6379> CONFIG GET bind
1) "bind"
2) "0.0.0.0"
127.0.0.1:6379>
1.4 测试
- 现在的配置下,mysql更新之后,但是redis是不会实时更新
2. redis和mysql的实时同步
2.1 安装 lib_mysqludf_json
[root@server4 ~]# ll lib_mysqludf_json-master.zip #找到包
-rw-r--r-- 1 root root 23473 Mar 15 2016 lib_mysqludf_json-master.zip
[root@server4 ~]# unzip lib_mysqludf_json-master.zip
[root@server4 lib_mysqludf_json-master]# yum install -y gcc ##安装gcc
[root@server4 lib_mysqludf_json-master]# yum install mariadb-devel.x86_64 -y ##装开发包[root@server4 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
[root@server4 lib_mysqludf_json-master]# ll lib_mysqludf_json.so
-rwxr-xr-x 1 root root 17528 Mar 11 00:02 lib_mysqludf_json.so
2.2 查看 mysql 的模块目录
MariaDB [(none)]> show global variables like 'plugin_dir';
2.3 拷贝 lib_mysqludf_json.so 模块
## 3. 拷贝 lib_mysqludf_json.so 模块
[root@server4 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
[root@server4 lib_mysqludf_json-master]# cd /usr/lib64/mysql/plugin/
[root@server4 plugin]# ls
2.4 注册 UDF 函数
## 4. 注册 UDF 函数
mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
MariaDB [(none)]> select * from mysql.func;
2.5 安装 gearman-mysql-udf
- 这个插件是用来管理调用 Gearman 的分布式的队列。https://launchpad.net/gearman-mysql-udf# tar zxf gearman-mysql-udf-0.6.tar.gz# cd gearman-mysql-udf-0.6# ./configure --with-mysql=/usr/bin/mysql_config--libdir=/usr/lib64/mysql/plugin/# make# make installgearmand-1.1.12-18.el7.x86_64.rpm 分发框架
[root@server4 plugin]# ll gearman-mysql-udf-0.6.tar.gz
-rw-r--r-- 1 root root 377301 Mar 15 2016 gearman-mysql-udf-0.6.tar.gz
[root@server4 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz
[root@server4 ~]# cd gearman-mysql-udf-0.6/
[root@server4 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/ ##执行
[root@server4 ~]# ll libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm
-rw-r--r-- 1 root root 86564 Jan 20 2019 libevent-devel-2.0.21-4.el7.x86_64.rpm
-rw-r--r-- 1 root root 82136 Jan 19 2019 libgearman-1.1.12-18.el7.x86_64.rpm
-rw-r--r-- 1 root root 225208 Jan 20 2019 libgearman-devel-1.1.12-18.el7.x86_64.rpm
[root@server4 ~]# yum install libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm
[root@server4 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/
[root@server4 gearman-mysql-udf-0.6]# make
[root@server4 gearman-mysql-udf-0.6]# make install
[root@server4 gearman-mysql-udf-0.6]# cd /usr/lib64/mysql/plugin/
[root@server4 plugin]# ls## 注册 UDF 函数
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME
'libgearman_mysql_udf.so';
mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME
'libgearman_mysql_udf.so';
MariaDB [(none)]> select * from mysql.func;
2.6 指定 gearman 的服务信息
[root@server2 ~]# yum install -y gearmand-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm
[root@server2 ~]# systemctl start gearmand.service
[root@server2 ~]# netstat -antlp | grep :4730##mysql数据库端指定gearman 服务(安装在server2)信息
MariaDB [(none)]> SELECT gman_servers_set('172.25.13.2:4730');
+--------------------------------------+
| gman_servers_set('172.25.13.2:4730') |
+--------------------------------------+
| 172.25.13.2:4730 |
+--------------------------------------+
2.7 编写 mysql 触发器(根据实际情况编写)
[root@server4 ~]# cat test.sql
use test;
#CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');
#
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGINSET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`)); END$$
DELIMITER ;
[root@server4 ~]# mysql < test.sql
[root@server4 ~]# mysql
MariaDB [(none)]> SHOW TRIGGERS FROM test;
2.8 编写 gearman 的 worker 端
[root@server2 ~]# yum install gearmand-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm ##这些东西必须有#后台运行 worker
[root@server2 ~]# nohup php worker.php & #现在直接运行会直接退出,因为缺少依赖,会提示缺少什么
[root@server2 ~]# yum install php-pecl-gearman-1.1.2-1.el7.x86_64.rpm -y ##安装依赖[root@server2 ~]# php -m | grep gearman ##查找到服务
gearman
[root@server2 ~]# nohup php worker.php & ##运行成功,后台查看
[2] 4216
[root@server2 ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@server2 ~]# ps ax
2.9 测试是否同步更新
2.10 暴力更新手段
- 在redis端直接删除数据,redis会重新去mysql数据库读取数据,存到redis。
redis和mysql的衔接操作(redis加速mysql)相关推荐
- 【Redis】7.使用jedis操作redis数据库
jedis jedis是java程序操纵Redis的工具. Jedis是Redis官方推荐的Java链接工具 使用前导入,下面的测试建议也导入测试的包 <!-- 导入jedis的包--> ...
- java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存
概述 Jedis是redis官方推荐的用于访问Java客户端,在https://github.com/xetorthio/jedis下载最新的jedis. 访问redis 1.访问简 ...
- redis实例python_使用python操作redis(管道)
一.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...
- docker安装redis,使用jedis轻松操作redis
之前,已经在虚拟机的linux环境中安装好了docker,再安装redis就会变得非常简单. docker search redis 查询docker容器支持的redis版本 默认安装latest最新 ...
- [转载] python怎么获取redis中的数据_python操作redis数据库
参考链接: 使用Python在Selenium中进行非阻塞等待 3.redis基本命令 String set(name, value, ex=None, px=None, nx=False, xx=F ...
- redis lettuce 超时_Spring Cache 操作 Redis 实现数据缓存(上)
点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:http://www.mydlq.club/article/55/ . 一.缓存概念知识 . 1.是什么缓存 . ...
- go操作redis之go-redis,python操作redis之redis
目录 go操作redis go-redis安装 连接方式 单机连接 TLS连接模式 Redis 集群连接 Redis 哨兵模式连接 基本使用 执行任意命令 redis.Nil zset操作 扫描或遍历 ...
- java实现对mysql数据库的操作_java 对mysql数据库的基本操作
java对mysql数据库的操作分为以下几个步骤: 1.获取连接: 获取连接需要两步,一是使用DriverManager来注册驱动,二是使用DriverManager来获取Connection对象. ...
- 直接在安装了redis的Linux机器上操作redis数据存储类型--hash类型
一.概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和 ...
最新文章
- 【廖雪峰python入门笔记】tuple_创建
- python编程基础之三十三
- xshell自动化脚本
- idea提交git差件_多人合作使用git,推送代码、和并分支
- linux上传下载文件命令rz、sz
- Perl中的正则表达式
- HTML和CSS 基本要点必看
- linux切换tab,linux-mint – ALT-TAB切换器中的图标从哪里加...
- MYSQL存储过程,错误处理机制
- LaTeX 语法教程
- 基于Android的虚拟校园移动学习系统
- 雷电4.0 Fiddler https抓包详解(绝对可行)
- 自举电路工作原理分析
- 埃默里大学计算机值得读吗,埃默里大学计算机科学-计算科学硕士研究生Offer及录取要求...
- 原创玄幻小说--那时花开--第一章前序
- 计算机英语趣味知识,看段子,学英语,懂点计算机知识才能看懂哦!
- ST官网下载标准库STM32 Standard Peripheral (2022新版官网网页)
- 混沌策略和单纯形法改进的鲸鱼优化算法
- 胡晓明:计算,探索未知的价值
- 2022年跨境医药License In/Out交易信息(查询)