Memcache + MySQL + HandlerSocket
Posted qq_784583650
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Memcache + MySQL + HandlerSocket相关的知识,希望对你有一定的参考价值。
1.LRU机制
缓存淘汰算法: Least recently used(最近最少原则)
具体详见这里
2.Memcache缓存MySQL原理和缓存过程
通过Memcache提高网站访问速度和减少数据库压力,通过这篇文章了解Memcache和mysql之间的交互流程关系
3.lazy load机制
对有缓存层的数据库进行增删改操作时,采取lazy load策略。
新增时只写入数据库,并不会马上更新Memcached,而是等到再次读取时才会加载到Memcached中,修改和删除操作也是更新数据库,然后将Memcached中的数据标记为失效,等待下次读取时再加载。
4.Memcache存在的问题
- 数据一致性:当MySQL数据变化后(由增删改操作,造成数据的更新变化),如果不能及时有效地清理掉Memchache中的过期数据,会造成数据不一致。在强调及时性的Web2.0时代,不可取。
- Memcache崩溃后的雪崩效应:作为缓存的Memcache一旦崩溃,MySQL很可能在短时间内承受高负载而宕机(down机,死机)。新浪微博遭遇过这样的问题。
5.缓存清理过期数据问题
- 程序架构上处理
- 数据操作有统一DAO封装,可以利用Observer模式来清理过期数据
6.HandlerSocket介绍
HandlerSocket是日本人akira higuchi 写的一个MySql的插件。通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释、打开关闭表、创建查询计划等CPU开销。按照作者给出的数据可以在数据全部在内存的情况下可以达到75W的QPS查询。
HandlerSocket通过插件的方式赋予MySQL完整的NoSQL功能,从原理上讲,它跳过了MySQL中最耗时的语法解析,查询计划等步骤,直接读取数据,如果内存够大,能装下索引,MySQL的查询效率能提高若干倍。
这是一个开源项目,GitHub上有支持很多语言的HandlerSocket版本。
- GitHub上说明: HandlerSocket is a NoSQL plugin for MySQL, working as a daemon inside the mysqld process, to accept tcp connections, and execute requests from clients. HandlerSocket does not support SQL queries; instead it supports simple CRUD operations on tables.
- 蹩脚翻译-_-||: HandlerSocket是MySQL的一个NoSQL插件,工作时作为MySQL程序的一个后台进程,接受tcp连接,执行客户的操作请求。HandlerSocket支持简单的对表格增删查改操作,但是不支持SQL的查询。
7.HandlerSocket性能
- 并发越高,性能越好,和MySQL类似
- 读数据测试:hs系统(HandlerSocket客户端,MySQL服务端连接模式)CPU占用和执行时间少于MySQL性能,约好30%~40%
- 写数据测试:hs系统CPU占用和执行时间都少于MySQL,性能约好50%~60%
总结:HandlerSocket可以在高并发、简单表操作的环境下替代MySQL
性能测试结果详见这里
8.为什么HandlerSocket能解决Memcache的问题
- **数据一致性:**HandlerSocket进程操作的是MySQL存放在内存的索引,没有额外的缓存,自然不存在数据一致性问题。
- 缓解MySQL访问压力:节省大量的硬件资源
参考链接列表:
- 下一站:HandlerSocket!
- MySQL的NoSQL插件–HandlerSocket
- HandlerSocket
以上是关于Memcache + MySQL + HandlerSocket的主要内容,如果未能解决你的问题,请参考以下文章
Memcache缓存服务器(Nginx+php+Memcache+MySQL)
memcache缓存服务器(Nginx+PHP+memcache+MySQL)