Redis 架构下的 MySQL 数据库性能提升浅析
舒 伟, 刘 兵 (中国电子科技集团公司第二十八研究所, 南京 210007)
【中图分类号】 TP311.13 【文献标识码】 A 【文章编号】 (2015) 1006-4222 14-0222-01
2015 年 7 月下
部分学 者开始使用 Redis 架 构 下的 MySQL 数据 【摘 要】 在互联网时代 , 快速开发是一个不 变的需求, 并且随着业务发展对性能 的强 烈需求, 复杂度低以及优化部分 bug 的功能, 本文 就 Redis 架构 下的 MySQL 数据库性 能的提升以及其 库开发。 Redis 架构具有性能高、 数据类型 丰富、 方法做了简要介绍, 有很好的指导意义。 性能 【关键词】 Redis 架构; MySQL 数据库;
在互联网时代袁快速开发是一个不变的需求袁并且随着业 务发展对性能的强烈需求袁 部分学者开始使用 Redis 架构下 的 MySQL 数据库进行开发遥 Redis 架构具有性能高尧数据类型 丰富尧复杂度低以及优化部分 bug 的优点袁目前有很好的性能 提升效果遥 Redis 是一个基于 key-value 的高速缓存系统袁 因为数据 库架构者每个人而言对 Redis 的理解有差别袁 因此在 使用过 程中对其定位也是有很大区别的袁 这决定了 Redis 在整个系 统结构中的具体位置遥 总结一下袁主流的应用中有三种理解院 渊1冤key value store遥 是一个以 key-value 形式存储的数据 库袁定位直指 MySQL袁用来作为唯一的存储系统遥 渊2冤memory cache遥 是一个把数据存储在内存中的高速缓 存袁用来在应用和数据库间提供缓冲袁替代 memcachd遥 渊3冤data structrue server遥 主要利用了复杂数据结构的高速 操作袁提供某些特殊业务场景的计算和展现需求遥 比如排行榜 应用袁Top 10 之类的遥 如果使用 MySQL袁当数据规模非常大时袁上面两个查询操 作都需要借助表关联技术袁 而大表间 的 join 在大型系统中是 需要极力避免的操作遥 相反 Redis 的每个操作都会局限在一 个较小的数据集范围内袁而且 key-value 的存储形式袁定位 key 只是 一 个复 杂 度 为 O 渊1冤 的 操 作 遥 在 very huge 的 数 据量 下 袁 Redis 性能效果非常优异袁这就是 NoSQL 的优势所在遥 用 Redis 作 MySQL 数据库缓存袁 首先应该确定用何种数 据 结构 存储 来 自 MySQL 的 数 据 曰在 确定 数 据结构 之 后 袁还 要 考虑用什么标识作为该数据结构的键遥 直观上看袁MySQL 中的数据都是 按 表 存 储 的曰 更微观 地 看袁 这些表都是按行存储的遥 每执行一次 select 查询袁MySQL 都会返回一个结果集袁这个结果集由若干行组成遥 所以需要在 Redis 中找到一种对应于 MySQL 行的数据结构遥 Redis 中提供 了 五 种 基 本 数 据 结 构 袁 即 字 符 串 渊string冤尧 列 表 渊list冤尧 哈 希 渊hash冤尧集合渊set冤和有序集合渊sorted set冤遥 经过 调 研 袁发现 适 合存储行的数据结构有两种袁即 string 和 hash遥 要把 MySQL 的行 数据存入 string袁 首先需要对行数据进 行格式化遥 事实上袁结果集的每一行都可以看做若干由字段名 和其对应值组成的键值对集合遥 这种键值对结构很容易让我 们想起 Json 格式遥 因此袁这里选用 Json 格式作为结果集每一 行的格式化模板遥 根据这一想法袁我们可以实现将结果集格式
1 Redis 简介
化为若干 Json 对象袁 并将 Json 对象转化为字符串存入 Redis 的代码遥 要把 MySQL 的 行 数 据 存 入 hash袁 过程 要 比 把 数 据 存 入 string 直观很多遥 根据前面的分析可知袁结果集中的每一行实 际上也是键值对集合遥 用 Redis 键值对集合表示 MySQL 键值 对集合应该再合适不过了院对于结果集中的某一行袁字段对应 于 hash 的 野子 键 冶袁 字 段对应的 值 就 是 hash野 子 键 冶对应的 值 袁 即结果集的一行刚好对应一个 hash遥 经过调研袁 发现一种较为通用的确定结果集标识符的方 法遥 缓存在 Redis 中的结果集数据都是利用 select 等 sql 语句 从 MySQL 中获取的遥 同样的查询语句会生成同样的结果集袁 这一性质刚好可以用来确定结果集的唯一标识符遥 这时袁我们 需要一个可以把 sql 语句转换为唯一标识符的函数遥 确定结果集标识符之后袁从 Redis 读数据或向 Redis 写数 据的思路就很清晰了遥 对于一个 sql 语句格式的数据请求袁首 先计算该语句的 MD5 并据此得到结果集标识符袁然后利用该 标识符在 Redis 中查找该结果集遥 注意袁结果集中的每一行都 有一个相应的键袁这些键都存储在一个 Redis 集合结构中遥 这 个集合恰好对应了所需的结果集袁所以袁该集合的键必须包含 结果集标识符遥
2 Redis 架构 下 的 MySQL 数 据 库 构 建
网络需求的提升袁导致数据库的管理和调用也逐渐升级袁 原 始 架构的 数 据 库 已经 很难 满 足需求 遥 Redis 架构 相比 于 MySQL 结构而言袁具有性能高尧数据类型丰富尧复杂度低 以 及 优化部分 bug 的有点袁可以减少 Cache 宕机带来的雪崩效应袁 同时可以降低整体架构的复杂度遥 收稿日期: 2015-6-15 作者简介: 舒 伟 渊1980- 冤袁 男 袁 汉族 袁 江 苏 南 京 人 袁 工程 师 袁 本 科袁从事数据库管理与记录评估工作遥 刘 兵渊1980-冤袁男袁回族袁山东沂水人袁工程师袁本科袁从事 数据库管理与系统平台工作遥
Redis架构下的MySQL数据库性能提升浅析
作者: 作者单位: 刊名: 英文刊名: 年,卷(期): 舒伟, 刘兵 中国电子科技集团公司第二十八研究所,南京,210007 通讯世界 Telecom World 2015(14)
引用本文格式:舒伟.刘兵 Redis架构下的MySQL数据库性能提升浅析[期刊论文]-通讯世界 2015(14)