memcached最吸引人的地方主要在于它的分布式。分布式对于互联网应用来讲,按照用途基本上可划分为三种方式:分布式计算、分布式存储和两者兼而有之。memcached是分布式存储的一种。我们常见的分布式存储大多数是将N台设备(server或者单独的存储)构建成盘阵,而memcached旨在构建一个高速的内存池。更通俗一点来讲:分布式计算是将N颗cpu组装成一颗cpu,分布式慢速存储是将N个硬盘组装成一个大硬盘,memcached是将N块内存组装成一块大内存。
  
    有个朋友问:那是不是代价很昂贵啊。我的回答是肯定的。如果你的网站规模只有三两台服务器的话,我觉得你就不用考虑这样的方案了,等你的网站做大了以后,再参考这方面的资料即可。一般都是比较大的互联网公司为了追求更好的用户体验,才进行这方面的投资,对他们来讲,用户体验至上,money是小case。
还有朋友问:有一些dbms提供内存表的功能,比如mysql的内存表,可以代替memcached。但我要建议你的是:mysql的内存表确实起到同样的作用,但它的局限也很多,往往不能让你随心所欲,所以建议你不要走弯路。

memcached的应用场景

 
应用范围
 
    memcached产品或相关技术的应用,我们在前面已经提到了一些。其实它的应用还是非常普遍的,应用作为广泛的领域:例如sns类网站、blog类网站、bbs类网站以及im后台服务。
  
 sns类网站的应用
    livejournal.com是99年始于校园中的项目,有点像中国的校内网。几个学生纯属出于爱好做了这样一个网站,主要实现以下功能: sns、blog、bbs和rss等。livejournal从建立开始就采用了大量的开源软件,到现在它本身也衍生了不少开源软件。 sns网站,现在比比皆是,规模比较大的象开心、校内、51,它们的页面上往往需要引用大量的用户信息、好友信息以及文章信息等,所以跨表或跨库操作会相当多。如果这些功能全部直接操作数据库,显然会带来极大的效率损耗和系统负载。memcached在这样的场景下就会发挥巨大的作用,它采用大内存把这些不变的数据全都缓存起来,当数据修改时就通知cache过期,这样应用层基本上就可以解决大部分问题了,只有很小一部分请求穿透应用层,用到数据库。
 
 blog、bbs类网站的应用
   象blog.sina.com.cn这些流量巨大的blog系统,它需要频繁读写的一些小数据。其中最典型的应用,我们通常成为“数字类服务”,比如blog中需要实时显示的用户点击数和阅读数,bbs中需要记录的在线人数、在线用户等。这些小数据的处理非常繁琐,你无论怎么去设计数据库,都很难避开跨表或者跨库。有的朋友会说,可以在数据库中增加冗余字段解决这类问题,但事实上,这既不符合数据库设计的范式规则,也很难做到数据的一致性,由此会引发更为复杂的问题。而且由于产品线的分散发展,数据已经很难做到完全的统一规划。memcached在这样的场景下就会将这些小数据进行缓存,定期持久化就可以了,查询操作一直都在内存中运行。说到这里,有的朋友又会想到一些其它的问题:“memcached server宕机了怎么办,怎么保证与数据库的数据一致”。我会对你说:“你的问题非常好,我们将会在后面章节给出相应的解决方案”。另外,其实这种小数据并不是关键性数据,即使偶尔发生点错误,也没太大的问题。blog、bbs系统并不是严格的企业级系统,假如你是为银行业务提供解决方案的话,memcached并不适合。
 
 im server的应用
   前些时间, 有一些文章介绍memcached 在Jabber上应用。写累了,喝口水,读者自己去找找资料吧,有时间的话,帮我补上吧,呵呵。
   我们举了几个例子来说明memcached的应用场景,似乎都局限于小数据服务,那是不是就不能用于较大数据的缓冲了?那绝不是,memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等等,而且生产环境中就这么跑过,只不过让大数据量使用缓冲的话,有点太浪费了,同样数量的内存存不了几条数据,所以会明显的降低命中率。
 

memcached应用场景(转)的更多相关文章

  1. Memcached 应用场景

    1. 把java对象序列化成base64 存入缓存,不同平台可以反序列化. 2. 通过key去重复 3. 保存一些信息,供所有平台使用

  2. 对Memcached使用的总结和使用场景

    1.memcached是什么 Memcached 常被用来加速应用程序的处理,在这里,我们将着重于介绍将它部署于应用程序和环境中的最佳实践.这包括应该存储或不应存储哪些.如何处理数据的灵活分布以 及如 ...

  3. 【转】对memcached使用的总结和使用场景

    原文连接:http://blog.csdn.net/ajun_studio/article/details/6745791# 原文作者:halfMe 转载注明以上信息! 1.memcached是什么 ...

  4. 为何Redis要比Memcached好用(转)

    转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter ...

  5. 为什么Redis比Memcached易

    GitHub版本号地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/ ...

  6. Redis是新兴的通用存储系统-为何Redis要比Memcached好用

    GitHub版本地址: https://github.com/cncounter/translation/blob/master/tiemao_2014/Redis_beats_Memcached/R ...

  7. 为何Redis要比Memcached好用

    Redis是新兴的通用存储系统,而Memcached仍有其适用领域 Memcached还是Redis? 在现代高性能Web应用中这一直是个争论不休的话题. 在基于关系型数据库的Web应用需要提高性能时 ...

  8. NoSQL 数据库产品学习总结(一)

    NoSQL 数据库产品学习总结(一) 本篇文章共分为四个章节,会陆续整理下 Memcached.Redis.tair.mongodb.hbase.SequoiaDB. Cassandra的相关知识. ...

  9. copy and paste ,做到这样也很牛逼了

    db笔记本 mysql资源 mysql5.1中文参考手册 mysql管理 基于linux使用mysql二进制包安装mysql5.5 mysql client命令行选项 mysqld服务器系统变量和状态 ...

随机推荐

  1. Hibernate——property的access属性

    public class Customer implements Serializable { private static final long serialVersionUID = 1L;     ...

  2. HDU 1061 Rightmost Digit --- 快速幂取模

    HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...

  3. POJ3308 Paratroopers(网络流)(最小割)

                                                     Paratroopers Time Limit: 1000MS   Memory Limit: 655 ...

  4. phpwind8.7升级9.0.1过程(二)8.7正式升级9.0

    首先备份 1. 给本地做备份将网站根目录下面的所有文件先做备份. 2. 给本地数据库做备份 3. 了解升级的具体过程 phpwind8.7升级到9.0需要首先升级到phpwind9.0的原生版本即:2 ...

  5. List of devices attached ???????????? no permissions

    如果显示如下:List of devices attached???????????? no permissions就要设置usb $ lsusbBus 005 Device 001: ID 1d6b ...

  6. java的nio之:java的nio系列教程之DatagramChannel

    Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...

  7. css @语法,@规则 @import @charset @font-face @fontdef @media @page

    CSS At-Rules Reference    样式表规则 At-Rules 样式表规则 CSS Version 版本 Compatibility 兼容性 Description 简介 @impo ...

  8. 017. ADO.NET Connection和command及DataReader

    ADO.NET主要包括Connection , command , DataReader, DataSet, DataAdapter5个对象, 通过这5个对象可以对数据库进行查询, 添加, 修改及删除 ...

  9. linux概念之/etc

    [Thu Apr 02 15:04:32 1028 /dev/pts/0 192.168.2.250 /etc]#ll |grep -v "^d"|wc -l99[Thu Apr ...

  10. OpenJudge就算概论-最长单词2【寻找句子内部最长的单词】

    /*===================================== 最长单词2 总时间限制: 1000ms 内存限制: 65536kB 描述 一个以'.'结尾的简单英文句子,单词之间用空格 ...