My SQL update Memory Cache
2015-11-27 16:41
211 查看
用 MySQL 自定义函数更新 Memory Cache
2012-03-17 00:30:08| 分类: MySql|举报|字号 订阅下载LOFTER客户端
用 MySQL 自定义函数更新 Memory Cache
问题的提出
MySQL 读写同步有延时,在跨地域同步时,由于网络等原因甚至会超过1秒。
部署 Memory Cache 后,通常利用 Memory Cache 的方法是:
应用程序访问数据时先访问 Memory Cache,如果内存里没有数据就从 Slave 数据库读取,
同时写一份放到 Memory Cache
更新数据时,应用程序在更新 Master 数据库的同时,清掉 Memory Cache。
这个方案有个问题,在数据频繁更新、同步延时很大的时候比较突出。
问题在于应用程序清掉 Memory Cache 的速度很快,而 MySQL 同步的慢。
假设主库这边更新了数据并清了Memory Cache,而读库没同步完,就有人访问了数据。
读库这边的程序在内存里没找到数据,就从数据库里读,这时读出的是旧的数据,
然后又把旧的数据写到内存里了,下次怎么读都还是旧的。
更详细解释
http://www.dbanotes.net/arch/facebook_scaling_out.html
为解决这个问题,Facebook 对 MySQL SQL 语句解析的地方 进行了修改。
Memory Cache 里的数据在读库更新后更新,保证了数据的一致性
自定义的 SQL 语句,在 MySQL 执行 SQL 的同时更新Memory Cache
REPLACE INTO profile (`first_name`) VALUES ('Monkey') WHERE `user_id`='jsobel' MEMCACHE_DIRTY 'jsobel:first_name'
更详细说明
http://www.new.facebook.com/note.php?note_id=16121578919#/note.php?note_id=23844338919&id=9445547199&index=0
修改 MySQL SQL解析的方法比较麻烦,这里介绍一种更为简便的实现。
使用 MySQL 自定义函数 (User-Defined Function)
下载 memcached_functions_mysql ,编译安装
http://hg.tangent.org/memcached_functions_mysql/archive/tip.tar.gz
初始化自定义函数 SQL 语句
CREATE FUNCTION memc_set RETURNS INT SONAME "libmemcached_functions_mysql.so";
CREATE FUNCTION memc_servers_set RETURNS INT SONAME "libmemcached_functions_mysql.so";
...
更新Memory Cache的 SQL 语句
select memc_servers_set('localhost:11211');
select memc_set('zol', 'new value');
来自:http://techbbs.zol.com.cn/1/3_933.html
相关文章推荐
- MySQL性能调优的方法
- 嵌入式动态SQL
- T-SQL - 同表中,以某一列聚合,详细聚合信息在一列显示
- 2.redis学习笔记:redis List底层数据实现(通用双端链表)
- Redis入门,集群安装
- VS2013连接mysql数据库
- mysql 主从数据库备份与读写分离中间件比较(TDDL、Amoeba、Cobar、MyCat)
- 数据库的垂直切分和水平切分
- redis优化配置和redis.conf说明
- MySQL垂直和水平切分
- 从C#中通过Windows窗体添加信息到数据库 (添加学生信息)
- MySQL 迁移 Oracle 工具SQL Developer
- JSP+Servlet+mysql简单示例【图文教程】
- sql service添加索引
- MySQL学习7-数据库理论-几大范式
- SSH:Hibernate框架(Hibernate数据库事务与隔离级别)
- 插入Mysql时中文乱码解决方案
- SSH:Hibernate框架(Hibernate:HQL与QBC查询方式详解 )
- Oracle的rman备份与恢复
- MySQL学习6-编码方式-UTF8-GBK-ANSI-Unicode-GB2312-base64