mysql 同步redis

官方插件  https://github.com/dawnbreaks/mysql2redis
安装插件 以及依赖
// 安装apr + apr-util
$ wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.1.tar.gz
$ tar zxvf apr-1.5.1.tar.gz
$ ./configure --prefix=/usr/local/apr
$ make
$ make install

$ wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
$ cd apr-util-1.5.4
$ ./configure --with-apr=/usr/local/apr
$ make
$ make install

// 安装hiredis, redis的C语言client
$ git clone https://github.com/redis/hiredis
$ cd hiredis
$ make
$ make install

$ git clone https://github.com/dawnbreaks/mysql2redis.git
$ cd mysql2redis
$ make
$ cp lib_mysqludf_redis_v2.so /usr/lib64/mysql/plugin/

首先要动态库的正确性 要不然注册函数就会报错
-bash-4.1# ldd /usr/local/mysql/lib/plugin/lib_mysqludf_redis_v2.so 
        linux-vdso.so.1 =>  (0x00007fff98f5a000)
        libhiredis.so.0.13 => /usr/local/lib/libhiredis.so.0.13 (0x00007f255127e000)
        libapr-1.so.0 => /usr/lib64/libapr-1.so.0 (0x00007f2551051000)
        libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0 (0x00007f2550e2d000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2550a99000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f2550895000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f255065d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2550440000)
        libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f2550218000)
        libdb-4.7.so => /lib64/libdb-4.7.so (0x00007f254fea3000)
        /lib64/ld-linux-x86-64.so.2 (0x00000038c2800000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007f254fc2c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f254fa28000)
        
        保证里面没有错误的
然后注册 mysq2redis UDF的函数

CREATE FUNCTION redis_servers_set_v2 RETURNS int SONAME "lib_mysqludf_redis_v2.so";
CREATE FUNCTION redis_command_v2 RETURNS int SONAME "lib_mysqludf_redis_v2.so";
CREATE FUNCTION free_resources RETURNS int SONAME "lib_mysqludf_redis_v2.so";

下面开始在数据库里面建表做测试
    我们先在tset里面新建一张表
    CREATE TABLE `user_info` (
  `id` int(100) NOT NULL,
  `NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `age` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `addr` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
 然后新建 一个insert 跟upudate的触发器
 CREATE TRIGGER `trigger_INSERT` AFTER INSERT ON `user_info` FOR EACH ROW BEGIN
SET @ret=(select redis_servers_set_v2("6.6.6.6",6379)); 
SET @ret1=(select redis_command_v2("hmset", concat("user_info:", id), ‘name‘, name, ‘age‘, age, ‘email‘, email, ‘addr‘, addr) from user_info where id = new.id);

end;

CREATE TRIGGER `trigger_update` AFTER UPDATE ON `user_info` FOR EACH ROW BEGIN
SET @ret=(select redis_servers_set_v2("6.6.6.6",6379)); 
SET @ret1=(select redis_command_v2("hmset", concat("user_info:", id), ‘name‘, name, ‘age‘, age, ‘email‘, email, ‘addr‘, addr) from user_info where id = old.id);

end;

至于触发器里面的内容不懂的可以去百度了这里不做解释
看测试结果
先情况redis 里面的数据
6.6.6.6:6379> flushall
OK
6.6.6.6:6379> keys *
(empty list or set)
在数据库里面插入数据
mysql> TRUNCATE table user_info;  # 清空表数据
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO `user_info` VALUES (1, ‘111‘, 26, ‘[email protected]‘, ‘1111 ‘);

进行查询  mysql
mysql> select * from user_info;
+----+------+------+-------------+-------+
| id | NAME | age  | email       | addr  |
+----+------+------+-------------+-------+
|  1 | 111  | 26   | [email protected] | 1111  |
+----+------+------+-------------+-------+
1 row in set (0.00 sec)

mysql> 
进行查询 redis
6.6.6.6:6379> keys *
(empty list or set)
6.6.6.6:6379> keys *
1) "user_info:1"
6.6.6.6:6379> hgetall user_info:1
1) "name"
2) "111"
3) "age"
4) "26"
5) "email"
6) "[email protected]"
7) "addr"
8) "1111 "
6.6.6.6:6379> 

到这里我们就配置完成了
时间: 2024-08-05 21:03:21

mysql 同步redis的相关文章

实现mysql和redis之间的触发数据同步——mysql 触发器+gearman+php.worker

上回一次我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis 中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情 况. 详情请见        基于redis缓存数据库实现lnmp架构高速访问 所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中. 因为mysql和redis数据格式不同,不能实现直接同步,所以 将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP

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

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

Redis 学习笔记四 Mysql 与Redis的同步实践

一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文也有些基本操作,在之前文章里有介绍. 1.安装 安装gearman-mysql-udf apt-get install libgearman-dev wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-my

Mysql 与Redis的同步实践

一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文也有些基本操作,在之前文章里有介绍. 1.安装 安装gearman-mysql-udf apt-get install libgearman-dev wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-my

Mysql与Redis的同步实践

一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文也有些基本操作,在之前文章里有介绍. 1.安装 mysql-udf">安装gearman-mysql-udf ? 1 2 3 4 5 6 7 apt-get install libgearman-dev wget https://launchpad.net/gearman-mysql-udf/

线上项目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

《MySQL与Redis缓存架构》

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

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/dawnbr

MySQL与Redis实现二级缓存

redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储 Redis支持数据的备份,即master-slave模式的数据备份 优势 性能极高 - Redis能读的速度是110