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)相关推荐

  1. 【Redis】7.使用jedis操作redis数据库

    jedis jedis是java程序操纵Redis的工具. Jedis是Redis官方推荐的Java链接工具 使用前导入,下面的测试建议也导入测试的包 <!-- 导入jedis的包--> ...

  2. java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存

    概述          Jedis是redis官方推荐的用于访问Java客户端,在https://github.com/xetorthio/jedis下载最新的jedis. 访问redis 1.访问简 ...

  3. redis实例python_使用python操作redis(管道)

    一.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...

  4. docker安装redis,使用jedis轻松操作redis

    之前,已经在虚拟机的linux环境中安装好了docker,再安装redis就会变得非常简单. docker search redis 查询docker容器支持的redis版本 默认安装latest最新 ...

  5. [转载] python怎么获取redis中的数据_python操作redis数据库

    参考链接: 使用Python在Selenium中进行非阻塞等待 3.redis基本命令 String set(name, value, ex=None, px=None, nx=False, xx=F ...

  6. redis lettuce 超时_Spring Cache 操作 Redis 实现数据缓存(上)

    点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:http://www.mydlq.club/article/55/ . 一.缓存概念知识 . 1.是什么缓存 . ...

  7. go操作redis之go-redis,python操作redis之redis

    目录 go操作redis go-redis安装 连接方式 单机连接 TLS连接模式 Redis 集群连接 Redis 哨兵模式连接 基本使用 执行任意命令 redis.Nil zset操作 扫描或遍历 ...

  8. java实现对mysql数据库的操作_java 对mysql数据库的基本操作

    java对mysql数据库的操作分为以下几个步骤: 1.获取连接: 获取连接需要两步,一是使用DriverManager来注册驱动,二是使用DriverManager来获取Connection对象. ...

  9. 直接在安装了redis的Linux机器上操作redis数据存储类型--hash类型

    一.概述:   我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和 ...

最新文章

  1. 【廖雪峰python入门笔记】tuple_创建
  2. python编程基础之三十三
  3. xshell自动化脚本
  4. idea提交git差件_多人合作使用git,推送代码、和并分支
  5. linux上传下载文件命令rz、sz
  6. Perl中的正则表达式
  7. HTML和CSS 基本要点必看
  8. linux切换tab,linux-mint – ALT-TAB切换器中的图标从哪里加...
  9. MYSQL存储过程,错误处理机制
  10. LaTeX 语法教程
  11. 基于Android的虚拟校园移动学习系统
  12. 雷电4.0 Fiddler https抓包详解(绝对可行)
  13. 自举电路工作原理分析
  14. 埃默里大学计算机值得读吗,埃默里大学计算机科学-计算科学硕士研究生Offer及录取要求...
  15. 原创玄幻小说--那时花开--第一章前序
  16. 计算机英语趣味知识,看段子,学英语,懂点计算机知识才能看懂哦!
  17. ST官网下载标准库STM32 Standard Peripheral (2022新版官网网页)
  18. 混沌策略和单纯形法改进的鲸鱼优化算法
  19. 胡晓明:计算,探索未知的价值
  20. 2022年跨境医药License In/Out交易信息(查询)

热门文章

  1. 在医院信息科的生存之道
  2. 电路板上电源和地短路,电压一定会被拉到0v吗?
  3. 特斯拉手机,了解一下?
  4. centoshttpd文件服务器,CentOS7安装配置httpd文件服务器
  5. 全国计算机等级考试二级 C 语言程序设计考试大纲
  6. 硬核加成,竞技飙升!全新雷神黑武士4+水冷台式机正式开售
  7. r语言 四格画图_临度科研|数据统计的理解和运用(四)列联表之卡方检验
  8. 从三亿鼠标到六亿用户,电竞风口上CF如何再创奇迹?
  9. P1006晴天小猪历险记之Hill
  10. 使用c语言计算某年某月某日是周几