mysql到redis的复制

系统开发中时常会需要缓存来提升并发读的能力,这时可以通过mysql的UDF和hiredis来进行同步

前题:安装了mysql5.6和client ,开发环境window7 32、vs2013

1、安装redis 和 hiredis

下载地址 GitHub上的MSOpenTech/redis项目地址

具体编译安装方法可以查看

http://www.cnblogs.com/raker/p/4368741.html

2、下载安装mysql2redis 
https://github.com/dawnbreaks/mysql2redis

这里有个问题,由于github上的mysql2redis 是为linux系统写的一个安装项目,所以我们在这里不能直接用,只需要

解压后根目录的src文件夹里面的源文件就OK了。

3、部署mysql动态链接库

  

首先打开VS新建一个win32动态链接库工程,选空项目,工程名为my_udf(名字随意)

再新建一个source file,准备好一下库:

1.mysql库文件(安装mysql的时候选择安装开发包,在mysql根目录下就有)

2.mysql2redis里面的src源文件

3.hiredis库文件(在source file新建一个hiredis文件夹):

  • 在hiredis下新建个lib文件夹把在上面第一步下载的redis文件里面,msvs文件下编译出来的debug文件下找出hiredis.lib和Win32_Interop.lib拷贝进去
  • 把redis跟目录下的deps里的hiredis文件夹拷贝到hiredis下
  • 最后把redis 下的src文件夹也拷贝过来,然后进入src里面打除了fmacros.h文件和Win32_Interop文件夹的其他文件删除掉

4.在项目设置里面导入各个库

ps:记得要加载2个LIB库

// 项目->属性->链接器->输入->附加依赖项->Win32_Interop.lib; hiredis.lib;
// #pragma comment(lib,"hiredis.lib")
// #pragma comment(lib,"Win32_Interop.lib")

然后将编译生成的my_udf.dll拷贝到mysql的lib里plugin下
在mysql里执行下列语句加载方法

DROP FUNCTION IF EXISTS lib_mysqludf_redis_info;   #删除
DROP FUNCTION IF EXISTS redis_command;

CREATE FUNCTION lib_mysqludf_redis_info RETURNS STRING SONAME ‘my_udf.dll‘;    #加载
CREATE FUNCTION redis_command RETURNS INT SONAME ‘my_udf.dll‘;

5、在mysql里创建table,trigger 
table:

CREATE  TABLE IF NOT EXISTS `test`.`my_test` (
 `uid` int NULL ,
 `name` VARCHAR(20) NOT NULL ,
  `Money` INT NULL ,
  PRIMARY KEY (`uid`) ,
  ENGINE = InnoDB;  

trigger :

CREATE
    /*!50017 DEFINER = ‘root‘@‘%‘ */
    TRIGGER `tri_my_test_insert_redis` BEFORE INSERT ON `my_test`
    FOR EACH ROW BEGIN
    DECLARE done INT DEFAULT 999;
    DECLARE inserId INT DEFAULT 0;
    #Declare info char ;

    #set info = CONCAT("{",CAST(new.uid AS CHAR),":",new.uid,",",CAST(new.Money AS CHAR),":",new.Money,"}");

    #SET inserId = LAST_INSERT_ID()+1;    SELECT MAX(uid)+1 INTO inserId FROM my_test;

    SET done = redis_command("127.0.0.1",6379,CONCAT(
            "set user::",inserId," ",
            CONCAT("{uid:",inserId,",name:",CAST(new.name AS CHAR),",Money:",new.Money,"}")
        )
    );

    IF done > 0 THEN    # 45001 抛一个自定义异常终止操作
        SIGNAL SQLSTATE ‘45001‘ SET message_text = "Redis error!";
    END IF;
    END;
$$

DELIMITER ;
INSERT INTO my_test(NAME,Money) VALUES(‘Sally‘,1000)  

mysql的 

redis的 

使用mysql的udf和trigger可以保证mysql和redis的数据一致性,SIGNAL sqlstate ‘45001‘会在redis失败时回滚事物。

问题:hiredis里递交带空格数据需要这样使用

1.reply = redisCommand(context, "SET key:%s %s", myid, value);  

那么对于mysql2redis的redis_command是无法工作的,这部分可以为不同命令单写函数。如redis_command_set。

时间: 2024-11-11 16:15:17

mysql到redis的复制的相关文章

通过Gearman实现MySQL到Redis的数据同步

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached.File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器. 但是往往我们又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能. 所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache.而这种需求目前还没有看

《MySQL与Redis缓存架构》

<如何使用redis做mysql的缓存> 应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键. 这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很

线上项目mysql、redis平滑迁移方案及步骤

1.清晰系统内网及公网可达,CVM配置 2.迁移完整数据,项目部署,测试网络环境. redis:复制rdb文件mysql:xtrabackup备份3.确保项目正常运行,网络正常访问.项目对外接口及账户中心访问可达.4.初始化redis,mysql.5.配置网络环境,同步mysql 1.主库创建同步账号,配置腾讯云mysql为从并可写.配置log-bin 2.主库xtrabackup备份,设置从库导入.获取同步点,启动从库(可写),校验状态.6.配置网络环境,同步redis 1.配置腾讯云redi

浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移

http://blog.csdn.net/dba_waterbin/article/details/8996872 ㈠ Redis 与 MySQL 的耦合性            在业务架构早期.我们便该"吃着碗里的看着锅里的".切莫让MySQL 有梦.而Redis 无心    毕竟.有些关系型的结构不适合放到Redis跑."男女搭配.干活不累"嘛.推荐让MySQL与Redis喜结连理        其次.这 2 人.一般是在不同场景做选择.而不会在性能上选择. 

记录CentOS 7.4 上安装MySQL&amp;MariaDB&amp;Redis&amp;Mongodb

记录CentOS 7.4 上安装MySQL&MariaDB&Redis&Mongodb 前段时间我个人Google服务器意外不能用,并且我犯了一件很低级的错误,直接在gcp讲服务器实例给释放掉,导致我的数据全部丢失,现在新搞一个服务器,顺便记录一下CentOS 7.4 MySQL&MariaDB&Redis&Mongodb 的安装 1祝大家:诸事顺利,2019 发大财! 本人将一如既往,更新我的博客,努力为博客园贡献文章! Mysql 安装 随着CentOS

linux⑧ mysql数据库,redis 数据库

目录 一. mysql 数据库 二.redis 数据库 三.redis 发布/订阅 四. redis 数据持久化 五. redis 主从同步 六.redis-cluster  集群搭建 一. mysql 数据库 1.安装方式 ①yum安装 ②源代码编译安装 ③rpm包安装 yum安装的前提条件,是准备好yum源,可以选择163源,清华源,阿里云源,等等等 1.安装mariadb的yum源有俩,一个是阿里云的yum源,可能版本较低,并且软件包很小,功能很少 yum install mariadb-

Mongdb、MySQL、Redis的区别

Mongdb的优势:1.快速!拥有适量级内存的Mongdb的性能是非常迅速的,它将热数据存储在物理内存中(而不仅仅是索引和少部分数据),使得热数据的读写变得十分快速,从而提高了整体的速度和效率.2.高扩展性!Mongdb的高可用与集群架构拥有十分高效的扩展性,通过物理机器的增加,以及sharding的增加,Mongdb的扩展将达到一个十分惊人的地步.3.自身的Failover!Mongdb的副本集配置中,当主库遇到问题,无法继续提供服务的时候,副本集将选举出一个新的主库来继续提供服务.4.Jso

高性能Mysql主从架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

一步完成 MySQL 向 Redis 迁移

从mysql搬一个大表到redis中,你会发现在提取.转换或是载入一行数据时,速度慢的让你难以忍受.这里我就要告诉一个让你解脱的小技巧.使用“管道输出”的方式把mysql命令行产生的内容直接传递给redis-cli,以绕过“中间件”的方式使两者在进行数据操作时达到最佳速度. 一个约八百万行数据的mysql表,原本导入到redis中需要90分钟,使用这个方法后,只需要两分钟.不管你信不信,反正我是信了. zzxworld zzxworld 翻译于 3年前 14人顶 顶 翻译的不错哦! 其它翻译版本