memcached 和 mysql 结合使用的两种实现选择?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
 这是我在知乎上抛出的一个问题"我们的应用已经决定采mysql+memcached 的方式,针对的数据库版本是 mysql 5.1,目前已经进行了半个月的编码实现:
    1.采用的是 ”memcached 和mysql 独立的实现方式,在编码层控制读 memcached,找不到再去数据库读,写数据库,然后再去更新 memcached,在这个过程发现逻辑复杂度比较高。
    2.现在发现 “Using the MySQL memcached User-Defined Functions” 的实现方式,是通过触发器解决以上复杂逻辑的,从我的感觉上来看,应该是降低了代码复杂度。
    我想诸位老师帮助我从理论上分析一下这两种方式的利弊,当然最好从实战角度分析两者的利弊,或者两者在使用上有什么值得注意之处,哪种更好,谢谢"

各位老师的回答如下:
1.建议在应用层直接处理,而不要使用MySQL memcached User-Defined Functions

卢钧轶,MySQL DBA
虽然个人没用过memcached UDF,但是做过简单的评估,主要有以下几点觉得不适用于production。
1. 增加了Memcached和MySQL之间的耦合性。
试想如果UDF指向的memcached挂了,trigger方式调用的UDF是不会接收到报错返回的,程序段自然也无法做相应处理。
2. 增加了MySQL的服务器压力。
MySQL本身就是一个对服务器性能要求较高的DBMS,原本简单的App <--> Memcached,现在变成了 App <---> MySQL <---> Memcached ,无形中增加了MySQL不必要的转发压力(网络,CPU的损耗)
3. 运维困难。
某台Memcached如需升级,分离式架构只需要修改APP配置文件。而UDF的方案就需要修改相应的trigger,trigger是很难进行版本控制和批量下发管理的,无形中对运维造成了很大的困难


结合这位老师的思路经过自己的进一步考察,单单对于第一点,我觉得就可以抛弃使用memcached UDF了,作为一个为上万客户提供服务的后台程序,容错,单点故障是必须要考虑并处理的,如果无法准确知道错误的发生,就很难迅速进行补救;

2.给出在应用层简化处理memcached逻辑的思路

范凯,互联网创业者,JavaEye网站创始人
>>在编码层控制读memcached,找不到再去数据库读,写数据库,然后再去更新memcached,在这个过程发现逻辑复杂度比较高。
如果你的应用数据的粒度划分足够细,并且配合良好的ORM层对象缓存,那么没有任何逻辑复杂度,代码根本不需要涉及这些部分,都是ORM层缓存自动处理掉了。

经过我的进一步考察,相关的ORM框架有基于java的,C#的,由于我们的项目是使用C++语言实现,目前我还没有找到与之对应的相关ORM框架。

3.给出在应用层做memcached和mysql结合的使用建议

曹政
我喜欢在应用层做,没觉得逻辑复杂在哪里。
几个要点
1:memcache和mysql的链接时间,如果两个链接同时开启,先开启的会影响后开启的,比如memcache先开启链接,然后开启mysql,如memcache阻塞,程序未及时释放,会连带导致mysql崩溃,这种情况以前遇到过,记住链接必须加超时限制,防止连带阻塞现象。或者,释放memcache连接后,再开启mysql链接(这样不利于程序封装)
2:memcache命中率如不高,不如不用。做memcache应用后,第一件事情是测试命中率情况,不能认为加了缓存就一定可以提高效率。
3:如果数据块较大,放在memcache中读取的效率或许不如mysql。
4:随时监控swap分区占用情况,确保内存使用合理。
5:memcached适合简单的key-value查询,如果涉及结构性内容,或者排名类应用,建议使用redis.

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1016257如需转载请自行联系原作者

yaocoder
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Prometheus 监控 Cloud Native
手把手教你Prometheus + Granafa实现mysql 性能监测部署
数据库性能监控可以说是十分重要,能否自行搭建环境实现像阿里云或是腾讯云那样直观的展示不同维度数据的功能?答案是肯定的。下面详细说明一下安装部署过程以及过程中出现的问题,希望对你有所帮助!
手把手教你Prometheus + Granafa实现mysql 性能监测部署
|
3月前
|
存储 缓存 关系型数据库
【面试问题】Memcached和MySQL的query cache相比,有什么优缺点?
【1月更文挑战第27天】【面试问题】Memcached和MySQL的query cache相比,有什么优缺点?
|
SQL 关系型数据库 MySQL
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
|
SQL 缓存 关系型数据库
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
|
SQL 关系型数据库 MySQL
C语言连接并实现对MySQL的增删改查
C语言访问数据库并不如Java、Python那般容易。本文介绍C语言连接并实现对MySQL的增删改查的方法。
435 0
|
canal 关系型数据库 MySQL
基于 Docker 结合 Canal 实现 MySQL 实时增量数据传输
基于 Docker 结合 Canal 实现 MySQL 实时增量数据传输
基于 Docker 结合 Canal 实现 MySQL 实时增量数据传输
|
SQL 前端开发 关系型数据库
mysql实现一次将多条不同sql查询结果并封装到一个结果集
最近遇到一个统计查询需求,要求一次性查询多个统计信息,其中两个查询信息不在一个表中,也没有业务关联,表中也没有做连接处理。不考虑产品设计是否合理,完全是实际需求如此,需要一次性查询出来返回给前端进行展示,对于这种“非常规”的统计查询平常肯定会遇见,感觉有点代表性,所以简单记录一下。希望对有相同需求的同学可以作为参考。
mysql实现一次将多条不同sql查询结果并封装到一个结果集
|
SQL 关系型数据库 MySQL
mysql实现统计同一字段不同状态的总数量之case when
直接进入主题,简单说下case when的语法.
|
SQL 关系型数据库 MySQL
脚本实现:从 HIVE 中导入数据到 MYSQL
脚本实现:从 HIVE 中导入数据到 MYSQL
|
Ubuntu 关系型数据库 MySQL
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
275 0
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动

推荐镜像

更多