请教redis如何做到和mysqlredis同步数据库mysql的同步

后使用快捷导航没有帐号?
查看: 3033|回复: 7
浅谈MySQL和Redis保持数据的一致性
注册会员, 积分 78, 距离下一级还需 122 积分
论坛徽章:5
1,只用作cache,写请求只交给My处理。如果应用是write heavy的,请使用和Cassandra,那如果要“保证”数据的安全性,会带来开销的进一步提升,以至于使用redis带来的性能优势都会丧失。正确的做法是区分不同的业务,使得并不需要“保证”数据一致性的场合,可以使用redis优化。而敏感的场合依然使用mysql。
读从redis读,写从mysql写,之后通知redis对应的缓存失效,去数据库缓存新数据。
注册会员, 积分 78, 距离下一级还需 122 积分
论坛徽章:5
对于mysql-redis的数据关系映射设定不要太复杂,一对一就行,数据组合交给业务层做,这样既发挥redis速度快,也能简化操作;redis每个对应mysql数据表的可使用多端口多实例,redis是单线程而且这样对于redis的主从和负载均衡有利
金牌会员, 积分 1146, 距离下一级还需 1854 积分
论坛徽章:16
Redis确实是非常不错的组件
金牌会员, 积分 2126, 距离下一级还需 874 积分
论坛徽章:9
一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
高级会员, 积分 945, 距离下一级还需 55 积分
论坛徽章:9
MySQL的数据一致性保持起来,相对比较简单,因为其本来就支持事务,有相关的数据一致性保证机制。
中级会员, 积分 274, 距离下一级还需 226 积分
论坛徽章:14
和我想得一样,不知道还有没有其他额方案
金牌会员, 积分 1896, 距离下一级还需 1104 积分
论坛徽章:34
谢谢楼主分享,学习了。
注册会员, 积分 94, 距离下一级还需 106 积分
论坛徽章:3
嗯,不同工具之间的数据同步问题确实是非常值得研究的您的浏览器已经禁用了脚本,这可能会影响您正常使用本站的功能。
关于mysql 同步reis
用redis做mysql的读写分离插件部署配置
官方插件 &/dawnbreaks/mysql2redis
安装插件 以及依赖
// 安装apr + apr-util
http://mirror./apache//apr/apr-1.5.1..gz
$ tar zxvf apr-1.5.1.tar.gz
$ ./configure --prefix=/usr/local/apr
$ make install
$ wget http://mirror./apache//apr/apr-util-1.5.4.tar.gz
apr-util-1.5.4
$ ./configure --with-apr=/usr/local/apr
$ make install
// 安装hiredis, redis的C语言client
$ git clone /redis/hiredis
$ cd hiredis
$ make install
$ git clone /dawnbreaks/mysql2redis.git
$ cd mysql2redis
lib_mysqludf_redis_v2.so /usr/lib64//plugin/
首先要动态库的正确性 要不然注册函数就会报错
-bash-4.1#
/usr/local/mysql/lib/plugin/lib_mysqludf_redis_v2.so&
& & & & -vdso.so.1 =& &(0x00007fff98f5a000)
& & & & libhiredis.so.0.13 =& /usr/local/lib/libhiredis.so.0.13 (0xe000)
& & & & libapr-1.so.0 =& /usr/lib64/libapr-1.so.0 (0x1000)
& & & & libaprutil-1.so.0 =& /usr/lib64/libaprutil-1.so.0 (0xe2d000)
& & & & libc.so.6 =& /lib64/libc.so.6 (0xa99000)
& & & & libuuid.so.1 =& /lib64/libuuid.so.1 (0x5000)
& & & & libcrypt.so.1 =& /lib64/libcrypt.so.1 (0xd000)
& & & & libpthread.so.0 =& /lib64/libpthread.so.0 (0x0000)
& & & & libexpat.so.1 =& /lib64/libexpat.so.1 (0x8000)
& & & & libdb-4.7.so =& /lib64/libdb-4.7.so (0xfea3000)
& & & & /lib64/-linux-x86-64.so.2 (0x0000)
& & & & libfreebl3.so =& /lib64/libfreebl3.so (0xfc2c000)
& & & & libdl.so.2 =& /lib64/libdl.so.2 (0xfa28000)
& & & & 保证里面没有错误的
然后注册 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_
&然后新建 一个insert 跟upudate的触发器
&CREATE TRIGGER `trigger_INSERT` AFTER INSERT ON `user_info` FOR EACH ROW BEGIN
@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);
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);
至于触发器里面的内容不懂的可以去百度了这里不做解释
看测试结果
先情况redis 里面的数据
6.6.6.6:6379& flushall
6.6.6.6:6379& keys *
(empty list or set)
在数据库里面插入数据
mysql& TRUNCATE table user_ &# 清空表数据
Query OK, 0 rows affected (0.04 sec)
mysql& INSERT INTO `user_info` VALUES (1, '111', 26, '', '1111 ');
进行查询 &mysql
mysql& select * from user_
+----+------+------+-------------+-------+
| id | NAME | age &| email & & & | addr &|
+----+------+------+-------------+-------+
| &1 | 111 &| 26 & |
+----+------+------+-------------+-------+
1 row in set (0.00 sec)
进行查询 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
5) &email&
8) &1111 &
6.6.6.6:6379&&
到这里我们就配置完成了
抱歉,暂无相关内容!
邮件(不会被泄露)
Fatal error:
Call to undefined function wp_smilies() in /data/wsdata/wwwroot/sunkai/linuxde/www/wp-content/themes/linuxde/comments.php on line 68

我要回帖

更多关于 redis与mysql数据同步 的文章

 

随机推荐