memcached 穿透mysql_memcached 和 mysql 结合使用的两种实现选择?
memcached 和 mysql 结合使用的两种实现选择?
这是我在知乎上抛出的一个问题”我们的应用已经决定采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
memcached 穿透mysql_memcached 和 mysql 结合使用的两种实现选择?相关推荐
- dapper mysql 批量_MySQL数据库之c#mysql批量更新的两种方法
本文主要向大家介绍了MySQL数据库之c#mysql批量更新的两种方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 总体而言update 更新上传速度还是慢. 1: 简单的 ...
- 修改mysql数据库默认字符集_MySQL数据库之修改mysql默认字符集的两种方法详细解析...
本文主要向大家介绍了MySQL数据库之修改mysql默认字符集的两种方法详细解析 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. (1) 最简单的修改方法,就是修改mysql的m ...
- mysql 时间查询_两种常用MySql查询时间段的方法
MySql查询时间段的方法很多,下面就为您介绍几种最常用的MySql查询时间段方法,如果您在MySql查询时间段方面遇到过问题,不妨一看. MySql的时间字段有date.time.datetime. ...
- mysql安装文件格式_一、安装方式 MySQL安装文件分为两种,一种是MSI格式的,一种是ZIP格式的。下面来看看这两种方式: MSI格式的可以直接点击安...
一.安装方式 MySQL安装文件分为两种,一种是MSI格式的,一种是ZIP格式的.下面来看看这两种方式: MSI格式的可以直接点击安装,按照它给出的安装提示进行安装,Windows操作系统下一般MyS ...
- mysql复制表的两种方式
mysql复制表的两种方式. 第一.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 或者 create table 新表 like 旧表 第二 ...
- 简单介绍MySQL开启事务的两种方式
本篇文章给大家分享MySQL 是如何开启一个事务的,原文通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 方式 1 START TRANSACTION 或 ...
- mysql temporary_MySQL中的两种临时表
http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表.这种临时表 ...
- memcached 与 mysql_memcached 和 MySQL 的 query ?
cache 相比,有什么优缺点? 把 memcached 引入应用中,还是需要不少工作量的.MySQL 有个使用方便的 query cache,可以自动地缓存 SQL 查询的结果,被缓存的 SQL 查 ...
- django框架使用mysql报错,及两种解决方法
1.django框架 settings.py文件中部分代码: DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# ...
最新文章
- 灰度直方图均衡化实现
- JD AWS vue上传文件
- 上云、微服务化和DevOps,少走弯路的办法
- Leetcode 142. 环形链表 II (每日一题 20210902)
- 嵌入式linux 分区挂载,嵌入式linux系统的开发——文件系统的分区和挂载
- 数据可视化(9)--数据可视化6步法
- RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip arc
- MySQL主从、主主、半同步节点架构的的原理及实验总结
- 富士康欲进军电动汽车市场 目标占据市场10%份额
- java cookie id,我如何在Java中获取会话ID
- JAVA类,变量的赋值一个小细节,以及static标注变量的意义
- mysql连接池cp_BeeCP
- 20145205 《信息安全系统设计基础》第1周学习总结
- u盘启动怎么修复计算机,电脑店u盘启动winpe如何修复系统引导
- 知识图谱系列(一):如何构建一个简单的知识图谱
- 【Python怎么批量修改文件名称】
- ie浏览器开发比谷歌浏览器_跨浏览器开发:处理IE
- Oracle数据导入导出详解
- QT Designer
- 对话 Do Kwon :流亡、谎言和梦醒时分的懊悔
热门文章
- 中顶SPA会所管理系统
- win7安装python错误0x80072f7d
- 基于javaweb+jsp的手机店销售信息管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)
- C. Colorful Bricks(dp)
- excel文件写入、读取:node-xlsx模块
- 员工计算机办公培训报道,加强工作技能学习 提高职工办公能力--县自然资源和规划局开展计算机技能培训...
- 确保移动应用成功的16项指标
- 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发
- Grafana 8.4.4安装
- 没希望的外贸客户被我拉了回来,再一次下单!