使用Memcache缓存mysql数据库操作的原理和缓存过程浅析
对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层,数据访问不可能吃得消,对于一般网站,只要具备独立的服务器,完全可以通过配置Memcache提高网站访问速度和减少数据库压力,这里主要讨论一下Memcache和MySQL数据库交互过程的流程关系,了解Memcache的中间缓存层作用,从而深入了解Memcache机制原理。
Memcache和MySQL交互流程图
如上图,传统的查询方法是直接查询数据库,数据库将结果返回给查询语句,而当有Memcache中间缓存层时,查询的是Memcache缓存数据,下面详细了解Memcache各类数据操作原理:
1. 查询数据(select),首先通过指定的Key查询(get)Memcache中间缓存层数据,如果存在相对应数据,则直接获取出数据结果,查询过程完全不需要查询数据库。如果不存在,则查询MySQL数据库,并以key对应value的形式将查询结果存储在Memcache缓存数据中,然后将结果返回给查询语句。
2. 更新数据(update),首先更新数据,然后删除相关的memcache数据(delete)。
3. 增加数据(add),首先删除相关缓存数据,然后增加数据。
4. 删除数据(delete),删除数据,并删除Memcache数据。
对MySQL的数据操作,主要涉及到的Memcache方法如下:
1. 获取:get(key)
2. 设置:set(key, value [, expiry])
3. 删除:delete(key [, time])
实例:
假设一个贴子,获取贴子ID为2009的值,其Memcache与MySQL交互流程如下:
$key = ‘biuuu_thread_';//key前缀
$cachetime = 100;//缓存有效时间(秒)
$id = 2009;
Memcache基本操作过程
1. 查询:$result = get($key.$id);如果$result为空,则查询MySQL数据库,然后set($key.$id,$value,0,$cachetime)
2. 更新:delete($key.$id);
3. 增加:delete($key.$id);
4. 删除:delete($key.$id);
通过直观图和实例应该对Memcache与MySQL的交互有一个基础的掌握,其实对于应用来说,基本上就已经足够,但如果要涉及到命名空间等相对复杂的情况,Memcache的操作方式会有所不同,但不管什么样的操作,还是离不开基础操作命令,由于这是Memcache基础篇,主要是讨论Memcache和mysql交互操作流程,当Memcache原理清楚以后,Memcache基本操作就是这么简单。
相关推荐
-
MySQL DBA教程:Mysql性能优化之缓存参数优化
数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO.本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来进行IO优化: 一.query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Inst
-
mysql的查询缓存说明
对mysql查询缓存从五个角度进行详细的分析:Query Cache的工作原理.如何配置.如何维护.如何判断查询缓存的性能.适合的业务场景分析. 工作原理 查询缓存的工作原理,基本上可以概括为:缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句:新的SELECT语句或预处理查询语句,先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小写: 查询缓存对什么样的查询语句,无法缓存其记录集,大致有以下几类:查询语句中加了SQL_N
-
MySQL缓存的查询和清除命令使用详解
Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文件,修改[mysqld]下的query_cache_size和query_cache_type(如果没有则添加).其中query_cache_size表示缓存的大小,而query_cache_type有3个值,表示缓存那种类 型的select结果集,query_cache_type各个值如下: 0
-
MySQL优化之缓存优化(续)
MySQL 内部处处皆缓存,等什么时候看了MySQL的源码,再来详细的分析缓存的是如何利用的.这部分主要将各种显式的缓存优化: 查询缓存优化 结果集缓存 排序缓存 join 连接缓存 表缓存Cache 与表结构定义缓存Cache 表扫描缓存buffer MyISAM索引缓存buffer 日志缓存 预读机制 延迟表与临时表 1.查询缓存优化 查询缓存不仅将查询语句结构缓存起来,还将查询结果缓存起来.一段时间内,如果是同样的SQL,则直接从缓存中读取结果,提高查找数据的效率.但当缓存中的数据与硬盘中
-
MySQL优化之缓存优化
高兴的是有博友mark了我的文章.我知道mark之后,很少会再来继续关注的.但是从侧面说明了在博友点开博客的同时,他感觉这篇博客是有价值的,是能够弥补他的知识欠缺.一篇博客最重要的是对自己有用,如果再对别人有用,那是最好的结果.我坚持写博客的目的是为了当自己遗忘知识点的时候,能够最快的找到靠谱的解决方案.当自己的归纳的知识,再记起来就会遗忘的慢一点,等时间久了,这部分知识终于化成了自己脱口而出的话,那就再也不怕遗忘了.这篇博客将继续讲MySQL的内容,这篇讲缓存优化,讲的过程也是我学习的过程.
-
mysql 设置查询缓存
可将如下语句 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 存放到/etc/my.cnf文件的[mysqld]下 然后重启mysql数据库 service mysqld restart 就会启动mysql的缓存机制Query Cache. 在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果. 如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是
-
清空mysql 查询缓存的可行方法
对一条sql进行优化时,发现原本很慢的一条sql(将近1分钟) 在第二次运行时, 瞬间就完成了(0.00sec) 这是因为mysql对同一条sql进行了缓存,服务器直接从上次的查询结果缓存中读取数据,而不是重新分析.执行sql. 可通过如下方法清空查询缓存 reset query cache;
-
浅析MySQL内存的使用说明(全局缓存+线程缓存)
首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分): 复制代码 代码如下: per_thread_buffers=(read_buffer_size+read_rnd_buffer_size+sort_buffer_size+thread_stack+join_buffer_size+binlog_cache_size+tmp_table_size)*max_connectionsglobal_buffers=innodb_buffer_
-
MySQL高速缓存启动方法及参数详解(query_cache_size)
MySQL query cache从4.1版本开始提供了,不过值今天本人才对其进行研究.默认配置下,MySQL的该功能是没有启动的,可能你通过show variables like '%query_cache%';会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:query_cache_size ,该值为
-
使用Memcache缓存mysql数据库操作的原理和缓存过程浅析
对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层,数据访问不可能吃得消,对于一般网站,只要具备独立的服务器,完全可以通过配置Memcache提高网站访问速度和减少数据库压力,这里主要讨论一下Memcache和MySQL数据库交互过程的流程关系,了解Memcache的中间缓存层作用,从而深入了解Memcache机制原理. Memcache和MySQL交互流程图 如上图,传统的查询方法是直接查询数据库,数据库将结果返回给查询语句,而当有Memcache中间缓存层
-
Java基于jdbc连接mysql数据库操作示例
本文实例讲述了Java基于jdbc连接mysql数据库操作.分享给大家供大家参考,具体如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySQLDemo { private Connection conn = null; pri
-
MySQL数据库本地事务原理解析
在经典的数据库理论里,本地事务具备四大特征: 原子性 事务中的所有操作都是以原子的方式执行的,要么全部成功,要么全部失败: 一致性 事务执行前后,所有的数据都应该处于一致性状态---即要满足数据库表的一致性约束,也要达到业务一致性(完成了业务目标): 隔离性 并发执行的事务不应该相互干扰:隔离性的强度由隔离级别决定: 持久性 事务一旦被提交,它添加/修改的数据不会随着系统崩溃而丢失: 在MySQL(InnoDB引擎)中,原子性和持久性是通过Redo Log来实现的,一致性是通过Undo Log实
-
golang连接mysql数据库操作使用示例
目录 安装 连接数据库 处理类型(Handle Types) 建表 Exec使用 Exec增删该示例 sql预声明(Prepared Statements) Query Queryx QueryRow和QueryRowx Get 和Select(非常常用) 事务(Transactions) 连接池设置 案例使用 golang操作mysql 安装 go get "github.com/go-sql-driver/mysql" go get "github.com/jmoiron
-
Mysql数据库group by原理详解
目录 引言 1. 使用group by的简单例子 2. group by 原理分析 2.1 explain 分析 2.2 group by 的简单执行流程 3. where 和 having的区别 3.1 group by + where 的执行流程 3.2 group by + having 的执行 3.3 同时有where.group by .having的执行顺序 3.4 where + having 区别总结 4. 使用 group by 注意的问题 4.1 group by一定要配合聚
-
mysql数据库操作_高手进阶常用的sql命令语句大全 原创
mysql数据库操作sql命令语句大全:三表连表查询.更新时批量替换字段部分字符.判断某一张表是否存在.自动增长恢复从1开始.查询重复记录.更新时字段值等于原值加上一个字符串.更新某字段为随机值.复制表数据到另一个表.创建表时拷贝其他表的数据和结构.查看当前查询缓存相关参数状态.清理查询缓存内存碎片.导出数据到pc指定目录... 1.三表连表查询 select a.aid,a.title,b.url,c.content from dq_article_content c inner join c
-
MySQL数据库的索引原理与慢SQL优化的5大原则
我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询. MySQL索引原理 1.索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我
-
Eclipse连接Mysql数据库操作总结
(自己亲测,开始学习Eclipse(我的Eclipse版本是4.5.2,Jdbc驱动器的jar包版本是5.1.7,亲测可以使用)连接到数据库的时候,发现网上有好多经验,但是发现网上的出现很多错误,故此发表此博客,希望对大家有所帮助) 1:首选你需要下载Jdbc驱动器(mysql-connector-java-5.1.7-bin.jar)这个文件 下载上面那个文件也是很是坎坷啊,所以为了你们的方便,特此分享. 2:下载好上面的Jdbc驱动器后,就可以开始动手操作了,首先打开Eclipse,创建一个
-
PHP实现PDO的mysql数据库操作类
本文实例讲述了PHP实现PDO的mysql数据库操作类.分享给大家供大家参考.具体分析如下: dbconfig类负责配置数据库访问信息,包括:服务器地址.端口.数据库实例名.用户名.用户密码.字符集等. dbtemplate类集合了对数据库的访问操作,主要有以下几个操作: 1. queryrows:返回多行记录 2. queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfor
-
jsp+mysql数据库操作常用方法实例总结
本文实例讲述了jsp+mysql数据库操作常用方法.分享给大家供大家参考.具体如下: 1. 查看: <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.sql.*" %> <HTML><style type="text/css"> <!-- body { background-color: #99CC
随机推荐
- JavaScript中各种引用类型的常用操作方法小结
- 欧洲顶级杀病毒软件熊猫卫士 2008 12.01 Final最终版提供下载
- Oracle 低权限数据库账户得到 OS 访问权限 提权利用
- 在Python中操作文件之truncate()方法的使用教程
- 最简单纯JavaScript实现Tab标签页切换的方式(推荐)
- VB.NET拷贝整个目录下所有子目录及文件的实例代码
- PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
- JavaScript Math 对象常用方法总结
- Shell+Curl网站状态检查脚本 抓出无法访问的站点
- Android编程之微信SDK分享功能过程步骤详细分析
- SQL Server误区30日谈 第7天 一个实例多个镜像和日志传送延迟
- 突发奇想的一个jquery插件
- jQuery简易时光轴实现方法示例
- js 字符串转化成数字的代码
- JavaScript编写九九乘法表(两种任选)
- JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
- 借助javascript代码判断网页是静态还是伪静态
- java阶乘计算获得结果末尾0的个数代码实现
- 详解PHP中instanceof关键字及instanceof关键字有什么作用
- Android仿微信实现下拉列表