http://blog.sina.com.cn/s/blog_015350630100u45e.html
随着数据量的不断增加,数据库的压力会逐渐增加,打开的速度会越来越慢,甚至出现数据库的slow-query,即使已经建立了完善的索引.
这个时候我们通常会采取几种方法来减轻数据库的压力:
读写分离,采取mysql的master,slaver方式将数据库的读写操作分离开,以达到数据库的减压.
另外一种是添加一张中间表,所有写入的数据都直接写入这张中间表,之后再通过定时程序或其它方法在系统闲时将数据导入相应的数据表,以达到减压的效果.
今天我们要说到的方法与第二种中间表的形式类似,只不过是用memcached替换中间表,将每一个个体的所有相关属性,内容组合成数组,存入到memcached中,在此个体没有被完整存储的时候,所有的对于它的读取,修改,删除,添加内容等等操作都将在memcached中进行,充分利用memcached快速读写特性.
由于memcached不是永久性存储,在我们使用memcached做中间存储介质时需要考虑数据的安全性,防止memcached出现意外造成数据丢失,需要多台memcached服务器,参考mysql的master,slaver模式,对数据的写入,修改,删除要同时保证所有服务器同时操作,读取可以随机从其中一台读取.
需要注意的是在每个memcached中的完整数组需要有一个lock的值,标记它的状态,当我们的定时程序读取的时候要标记所有服务器里相同key的lock值为锁定状态,此时即使前台命中这个缓存也只能是只读状态,保证数据的一致性.
数据的转存,可以采用php模拟daemon的方式或cron定时的方式将memcache中的缓存存储到mysql中,实现永久保存,当数据被存储到数据库中剩下的就是常规的读取缓存,缓存命中与未命中的常规逻辑了.
大概的思想就是这样了,先说一下这样做的优点:
1. 使用memcache做中间存贮,速度快,效率高,充分利用memcached的优点
2. 读写方便,不需要修改原有的数据模型,不用修改数据库结构
3. 不用改变现有的生产环境,不需要添加额外的功能支持,通过现有的LAMP即可实现
不足,缺点:
1. 对于成型的项目来说,修改量可能比较大,需要对业务的流程有非常熟悉的了解
2. memcached并非持久存储,有一定的数据丢失风险,可以通过master,slaver的方式增加可靠性
3. 由于memcache的没有不提供搜索功能,当数据量较大时搜索的效率会比较低.可以通过对存入的key进行哈希索引的方式创建php搜索功能,提高效率
4. 对内存的需求量比较高,可以通过修改转存程序的频率和速度来维持内存使用量在一个可控范围内
现在nosql的概念很流行,例如:mongodb,couchdb等.这个想法其实也是借鉴了nosql的方式,通过php+mysql+memcached来模拟一个非关系型数据库,以解决前面提到的数据量增加,传统数据库难以解决的
1. 高并发读写的需求
2. 高效的存储访问需求
同时为那些不方便在现有环境下安装新的应用扩展,或权限较低的情况提供一种解决方案和想法.
在这里只是简单的说了一下我的想法,至于具体如何实现对不同的项目会有不同的需求和具体的解决方案.后面会跟大家分享我的实际使用中的各种问题和经验的^~^
分享到:
相关推荐
memcached-1.9.6,libevent-2.1.12-stable.tar memcached-session-manager-1.9.6,msm-kryo-serializer-1.9.6.jar,tomcat8.5,实现会话共享
nginx+apache+mysql+php+memcached+squid搭建门户网站
《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件 APMServ 5.2.6 绿色服务器 PHP服务器 ASP服务器 APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9、PHP 5.2.6...
tomcat7集群lib中需要添加的jar包
项目使用Spring4+SpringMVC+mysql【同时支持mybatis+hibernate两种底层操作框架】+memcached
Windows8上安装虚拟机VirtualBox,然后新建虚拟电脑,搭建CentOS6.5 + mysql + nginx + php + memcached平台环境,部署网站。文档中记录了部分FAQ。
nginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zip
java+mysql+memcached 安装包,以及客户端实现!!!
基于tomcat7版本的memcached会话保持,内置tomcat需要的jar包。
压缩包里有memcached-win64-1.4.4-14和php_memcache-3.0.8-5.6-ts-vc11-x64版本的php_memcache.dll文件 亲测自己电脑Win8.1 64,可用
搭建nginx+apache+mysql+php+memcached+squid服务器集群.zip
【吐血推荐】nginx+apache+mysql+php+memcached+squid搭建集群web环境(一) 此乃本人N次服务器真机实验所得,所以分数高点,望体谅.. 按教程来做,你也可以搭建linux服务器... 注:此乃分卷一,
【吐血推荐】nginx+apache+mysql+php+memcached+squid搭建集群web环境(二) 此乃本人N次服务器真机实验所得,所以分数高点,望体谅.. 按教程来做,你也可以搭建linux服务器... 注:此乃分卷二,
Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...
nginx+tomcat7+memcached需要的jar包,不包括nginx+tomcat7+memcached的安装包
nginx+tomcat8+memcached session共享所需jar包 直接放到tomcat/lib下即可
大家可以参考 这个使用 http://blog.csdn.net/ful1021/article/details/39525903
MSM--memcached session manager是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。对于非黏性Session,...