posts - 262,  comments - 221,  trackbacks - 0

【1】Memcached是使用基于Key-value值对形式的内存缓冲,它不是使用磁盘缓冲来充当缓冲,而是使用实实在在的物理内存。

【2】Memcached需要在启动时就指定分配的内存大小。命令如:memcached -d -m 内存大小(M为单位) -l IP地址 -p 端口

【3】Memcached是一种单索引的结构化数据组织形式,所有数据项之间彼此独立(不想传统的数据是关系型的),每个数据项都以key为唯一索引,不要以关系型的思维来对待缓存

【4】Memcached使用基于key的hash算法来存储数据,查询的时间复杂度达到O(1)

【5】Memcached使用LRU算法来淘汰缓冲数据项,但同时允许使用者设定缓存过期时间,这个时间需要根据测试而定

【6】Memcached使用libevent函数库来实现网络并发模型,支持较大并发用户数环境下的缓存操作

【7】Memcached使用对象序列化技术,可以把对象序列化成二进制数据,在网络中传输

【8】Memcached可以和JSON格式结合,把内存中对象以JSON形式表示,然后序列化为字符串后缓存起来

【9】Memcached的客户端API可以支持直接把对象保存到缓存中,也可以直接从缓存中取出对象,隐藏了转换的细节

【10】使用Memcached的一个核心问题就是:什么内容是可以缓存的?什么是没有必要实时发生的

【11】不要在Memcached上使用锁来防止线程竞争,而是使用其提供的原子递增操作

【12】Memcached的状态参数中:total_items、bytes、get_hits、bytes_read、bytes_written、limit_maxBytes都是很常用的参考数据

【13】Memcached的状态中,要关注的有空间使用率、缓存命中率、IO流量

【14】Memcached的缓存数据分区,最好不要基于业务数据内容种类,而是采用和业务无关的分区算法,否则容易造成负载不平衡

【15】Memcached扩展后,需要在前端通过一个“缓存连接器”来根据散列算法分配缓存数据

【16】Memcached的数据理论上都来自于底层的持久化资源,所以当缓存扩展后,可以清除它。前提是必要的数据已经持久化了

【17】缓存不是持久化设施,不要用持久化的理念去对待缓存中的数据。它本来就已经存在对应的持久化资源了

【18】缓存中的数据最好是临时性数据(无必要持久化,而只是作为流程控制用)或者已经有对应的持久化资源存在的(必要时可以重建)

【19】Memcached采用的是“块分配”的内存分配模式,同时对key的限制是250字节,对value的限制是1M大小

【20】Memcached采用是偷懒替代法,不会开额外的进程来实时监测过时的kv对并删除,而是当且仅当,新来一个插入的数据,而此时又没有多余的空间放了,才会进行清除动作。

【21】一旦数据库的数据发现变化,我们一定要及时更新cache中的数据,来保证app读到的是同步的正确数据。当然我们可以通过定时器方式记录下cache中数据的失效时间,时间一过就会激发事件对cache进行更新,但这之间总会有时间上的延迟,导致app可能从cache读到脏数据,这也被称为狗洞问题。

【22】当一个ms上丢失了数据之后,app还是可以从数据库中取得数据。不过更谨慎的做法是在某些ms不能正常工作时,提供额外的ms来支持cache,这样就不会因为app从cache中取不到数据而一下子给数据库带来过大的负载。

【23】有了缓存的支持,我们可以在传统的app层和db层之间加入cache层,每个app服务器都可以绑定一个mc,每次数据的读取都可以从ms中取得,如果没有,再从db层读取。而当数据要进行更新时,除了要发送update的sql给db层,同时也要将更新的数据发给mc,让mc去更新ms中的数据。

【24】为了最小化数据库的负载压力,我们可以部署数据库复写,用slave数据库来完成读取操作,而master数据库永远只负责三件事:1.更新数据;2.同步slave数据库;3.更新cache。

【25】因为现在key是散列在不同的server上的,所以对某类key进行大批量清理是很麻烦的。因为memcached本身是一个大hash表,是不具备key的检索功能的。所以memcached是压根不知道某一类的key到底存了多少个,都存在哪些server上。而这类功能在实际应用中却是经常用到。

 



-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2010-03-15 10:57 Paul Lin 阅读(2139) 评论(0)  编辑  收藏 所属分类: J2EE基础

只有注册用户登录后才能发表评论。


网站导航:
 
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜