当前位置: 首页 > 工具软件 > HandlerSocket > 使用案例 >

Memcache + MySQL + HandlerSocket

奚飞星
2023-12-01

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

 类似资料: