Linux的企业-Redis 作 mysql 的缓存服务器

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

一.配置环境

redhat6.5

server1:lump  php模块   172.25.50.1

server2:redis  172.25.50.2

server3:mysql  172.25.50.34798dd724f358d754d0840713a37edcd.png

二.安装 lnmp 环境

1.安装php

bb35c6ffa3490363055a7500e92d1e7b.png

b174de56a0ca2e50aa1957d8e438b9a0.png


2.配置nginx

112815a982ead8d9b77d3a3d3286746c.png


1390ff15822d48145df9ed3a1a607996.png

c078b38353186c220dd64c8f376dac13.png

d4cba6d5459b92f67f66b75b1f2ae0ca.png


3.配置nginx php默认发布文件

99309e2a7d947203a8a92a89712f7b25.png


4.启动nginx和php服务

74944cb72cf2d6ccb726642f3d5aada2.png

21eb8b284d6679da76bdb12e70253d7f.png


5.再server3安装mysql-server

185bb54d7ec76a022d68a231974271fe.png


三.在server2安装redis

1.安装

246fadfd89a7f319321bb83c01d4eaa8.png

dab1ef09a54b76660dc43fc630f0724a.png

3adfa83c2d998b93ba9eca41ad82c884.png


2.配置,绑定所有端口

daa7be827049837834f112b2551c10b0.png

3.启动服务

4e4c125adc8aa83af7feebb2feff8e02.png




四.安装 php 的 redis 扩展

1.安装模块

a334b9e417cf12dff3b016297699b432.png

   

      linux系统中,php安装成功后,在bin目录下会生成一个名叫phpize的可执行脚本,这个脚本的用途是动态安装php扩展模块。使用phpize脚本安装php扩展模块的好处:在安装php时没有安装的扩展,可以在以后随时安装上,且不需要重新安装PHP。


8f5cfd0e6f66ef4c9352815b4874e44f.png


afd16012e3726344f9016f51712992c9.png

788d6b7d0258c0d81638f299629ac4c8.png


2.配置模块

fd72cd068c3bbb7eacb58c315fe26448.png


加载 redis 模块

f0d11450bcd5117932b75c568f4e729f.png

3.查看php是否加载redis模块并重启服务

218febfa77218714ede0dfa721e88ba6.png

d92cb76f0f847cc7723b26758ca5c90a.png

cbd85373f75f9f4a916ddc09129592b4.png


五.测试test.php网页

1.将下面的test.php页面放到nginx默认发布目录下

735784c4b8b0038a1bb170cbfe8de789.png

54c5f5835d9d013e0df895de389fe56d.png



2.在server3上启动mysql,并创建授权redis用户

fe15274a98946b276ec5c0f7f1709d15.png


3.将test测试网页的数据库传给server3上的mysql,并将数据导入mysql

58506d5bea6247cb399da0f9668d3a6b.png


server3:  导入test测试页数据   mysql < test.sql

d8e639a5b9e0a170216a3bdf0d2a3deb.png

9f1d485ae9a954cb97e6d8bfd4fd1c08.png


4.测试

a23f493257c1f2d2845ee39c54eedeae.png


从server2的redis读取数据

4f28a65905c761bc39b9940bc111b4dd.png


在server3上的数据库修改数据

826d7f874ee51f948508999b3a2df31e.png


在redis上数据是不能及时改变的,还读的是缓存,只能修改,才能改变

5a86557ef4c5bc3b34bb98a0c9b977da.png

bc0519517c46df82ebdb5af91f40b77a.png

460d6ba329419cc9461b7b96362c5832.png

六.触发器gearman 实现数据同步

          到这里,我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情况。所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中。配置 gearman 实现数据同步
Gearman 是一个支持分布式的任务分发框架:Gearman Job Server: Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。Gearman Client:可以理解为任务的请求者。Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker 接收到 Gearman Client 传递的任务内容后,会按顺序处理。


          大致流程:下面要编写的 mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接
下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后在通过 gearman-mysql-udf 插件将任务加入到 Gearman 的任务队列中,最后通过redis_worker.php,也就是 Gearman 的 worker 端来完成 redis 数据库的更新。


1.安装gearmand模块

157057a48391f7fa452739a22c075a3a.png

a73036291213253177da1cf3d78e78aa.png


2.安装 php 的 gearman 扩展

0a4386313b10ea5b26445dfa3facf40c.png


281bb14f38edf17a28f34b927f3e8039.png

84dfe0fc4f02cb67cc620905eeb4ea92.png


3.配置gearman模块

92830a93814bb6dff75b8633c1349084.png

dfa2083a77338a891c17904caf8a05bd.png


4.重启php服务,gearman已经安装

696e26556da2daf1ef7e1fb95c5a21ee.png



七.安装 lib_mysqludf_json模块

     lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映
射为 JSON 格式,是通过程序来转换的


1.server3安装mysql-devel

44113b266ae264d7a7002f9df62a97f9.png


2.解压安装lib_mysqludf_json库函数

8089885c9d07d4d59ad43074f8fe48e0.png


gcc编译lib_mysqludf_json库37bcb6fe8b99f8eecc08d5ac363f2936.png

2105a14669c07b1592fd5031d98ab08d.png


3.将lib_mysqludf_json.so 模块拷入mysql的模块下

935dc95f4f9c13862e94ee9b55461483.png


4.查看 mysql 的模块目录并注册 UDF 函数

9d61d619c96774680dc40e7d1c64f1bd.png


八.安装 gearman-mysql-udf插件
这个插件是用来管理调用 Gearman 的分布式的队列


1.安装gearman-mysql-udf模块和包依赖

26a70cd33d591e846e466160bf105dbe.png

d96ee3037d6aa0fee196233787da7b74.png


查看插件

38f1eb6481b9ea22f8e220fb4bc85c13.png


2.注册 UDF 函数9623a6efe2ac89536ed28f28d481fbe9.png


3.指定 gearman 的服务信息



f9927164af6d83791a2678405475a9d7.png


九.编写 gearman 的 worker 端并后台启动

8b516ba3de0f33d609c063ec0121e147.png

4111c75ec89f7fd3320b165411d8f1bc.png


1a0b56b0dc0652907e9d458716f161ab.png

9aac6c502871d4f12ccd870a09a3f4e1.png


十.编写 mysql 触发器(根据实际情况编写) ,mysql.sql

1.并导入数据库 mysql < mysql.sql

365d3525dd643ac1168fa26e65014d80.png


2.查看触发器

b86e773143cc7d65b5006dd8bad1a218.png



十一.测试

在server3上进入到数据库更新数

0b7065c880bf452331842ae38ec3d481.png

19892f4e04980fb8568745c915eb2236.png

server查询:

0785510505c2f5b174983e782b9878e7.png

3abfc012d9484ad490a0fbeaef162497.png






      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1975374,如需转载请自行联系原作者


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
消息中间件 缓存 NoSQL
Redis经典问题:缓存雪崩
本文介绍了Redis缓存雪崩问题及其解决方案。缓存雪崩是指大量缓存同一时间失效,导致请求涌入数据库,可能造成系统崩溃。解决方法包括:1) 使用Redis主从复制和哨兵机制提高高可用性;2) 结合本地ehcache缓存和Hystrix限流降级策略;3) 设置随机过期时间避免同一时刻大量缓存失效;4) 使用缓存标记策略,在标记失效时更新数据缓存;5) 实施多级缓存策略,如一级缓存失效时由二级缓存更新;6) 通过第三方插件如RocketMQ自动更新缓存。这些策略有助于保障系统的稳定运行。
127 1
|
7天前
|
存储 消息中间件 缓存
Redis缓存技术详解
【5月更文挑战第6天】Redis是一款高性能内存数据结构存储系统,常用于缓存、消息队列、分布式锁等场景。其特点包括速度快(全内存存储)、丰富数据类型、持久化、发布/订阅、主从复制和分布式锁。优化策略包括选择合适数据类型、设置过期时间、使用Pipeline、开启持久化、监控调优及使用集群。通过这些手段,Redis能为系统提供高效稳定的服务。
|
13天前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
1天前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
9 3
|
2天前
|
缓存 NoSQL 安全
Redis经典问题:缓存击穿
本文探讨了高并发系统中Redis缓存击穿的问题及其解决方案。缓存击穿指大量请求同一未缓存数据,导致数据库压力过大。为解决此问题,可以采取以下策略:1) 热点数据永不过期,启动时加载并定期异步刷新;2) 写操作加互斥锁,保证并发安全并设置查询失败返回默认值;3) 预期热点数据直接加缓存,系统启动时加载并设定合理过期时间;4) 手动操作热点数据上下线,通过界面控制缓存刷新。这些方法能有效增强系统稳定性和响应速度。
49 0
|
2天前
|
缓存 NoSQL 应用服务中间件
Redis多级缓存
Redis多级缓存
8 0
|
2天前
|
缓存 NoSQL 关系型数据库
Redis 缓存 一致性
Redis 缓存 一致性
6 0
|
3天前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文介绍了缓存穿透问题在分布式系统和缓存应用中的严重性,当请求的数据在缓存和数据库都不存在时,可能导致数据库崩溃。为解决此问题,提出了五种策略:接口层增加校验、缓存空值、使用布隆过滤器、数据库查询优化和加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统稳定性的影响。
78 3
|
4天前
|
缓存 NoSQL 搜索推荐
Redis缓存雪崩穿透等解决方案
本文讨论了缓存使用中可能出现的问题及其解决方案。首先,缓存穿透是指查询数据库中不存在的数据,导致请求频繁到达数据库。解决方法包括数据校验、缓存空值和使用BloomFilter。其次,缓存击穿是大量请求同一失效缓存项,可采取监控、限流或加锁策略。再者,缓存雪崩是大量缓存同时失效,引发数据库压力。应对措施是避免同一失效时间,分散缓存过期。接着,文章介绍了Spring Boot中Redis缓存的配置,包括缓存null值以防止穿透,并展示了自定义缓存过期时间的实现,以避免雪崩效应。最后,提供了在`application.yml`中配置不同缓存项的个性化过期时间的方法。
|
4天前
|
NoSQL Linux Redis
Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
17 0