【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上。而这类功能在实际应用中却是经常用到。
分享到:
相关推荐
**Memcached分布式缓存入门** Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。这个“Memcached分布式缓存入门”资料将引导初学者深入理解...
总之,`.NET分布式缓存Memcached从入门到实战源码下载`这个资源提供了一个全面的学习平台,涵盖了Memcached的使用、集成、测试等方面,帮助开发者深入理解如何在.NET环境中高效地利用分布式缓存提升应用性能。...
`memcached` 是一款高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的响应速度。它的工作原理是将数据存储在内存中,以便快速访问,而无需频繁地读写硬盘。此资源包含 `memcached` 的Windows...
此外,它还引入了Consistent Hashing算法来优化分布式缓存的节点管理,减少因节点增减导致的大规模缓存失效问题。 在实际应用中,mixi作为日本的一个社交网络平台,大规模使用memcached来优化其Web应用的性能。他们...
4. **非互相通信的分布式**:尽管 Memcached 被称为分布式缓存服务器,但实际上各个 Memcached 实例之间不会互相通信来共享信息。如何实现分布式则完全依赖于客户端的实现。 #### 三、Memcached 的安装与配置 ####...
`memcached`的设计目标是简化分布式缓存系统的使用,其协议简洁,允许多个服务器通过网络构建一个共享的哈希表。用户无需关心数据的物理位置,只需调用接口即可操作数据。在内存管理上,`memcached`采用了LRU(Least...
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。 Memcached基于一个存储键值对的...
Memcached 是一个广泛使用的开源软件,它被设计为一个高性能的分布式内存对象缓存系统,特别适用于动态Web应用程序。它的主要目标是减轻数据库的负载,通过将数据和对象存储在内存中,以快速响应用户请求,从而提高...
Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站或应用程序的响应速度。它通过将数据存储在内存中,为应用程序提供快速访问,特别适合处理高并发和大数据量的情况。在Java开发中,...
Memcached 是一个高性能的分布式内存对象缓存系统,它能够将数据存储在内存中,以减少数据库的访问压力,提高应用的响应速度。本实例将带你深入了解如何安装 Memcached 客户端,并学习如何使用它来缓存数据以及清除...
**Memcached入门** Memcached是一款高性能的分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将详细介绍Memcached的基础知识,并提供安装包和测试代码,帮助初学者...
Memcached 是一个高效、分布式的内存对象缓存系统,设计初衷是为了提升网站的访问速度,尤其是对于那些依赖数据库的动态网页应用。它通过建立一个内存中的大哈希表来存储各种类型的数据,如图片、视频、文件以及...
【PHP与Memcached入门】 PHP作为一款广泛应用的服务器端脚本语言,广泛用于Web开发,以构建动态交互式网站。为了提升网站性能,通常会引入缓存技术,而Memcached正是一个高效的分布式内存对象缓存系统,适用于加速...
### Memcached入门详解 #### 一、Memcached简介与应用场景 **Memcached**是一种高性能、分布式内存对象缓存系统,用于通过减少数据库负载来加速动态Web应用的速度。它通过在内存中缓存数据来减少对数据库服务器的...
1. **分布式缓存**:memcached作为分布式缓存系统,可以在多台服务器之间共享数据,通过一致性哈希算法来分配键值对,从而实现负载均衡和高可用性。 2. **键值对存储**:memcached使用简单的键值对数据结构,其中键...
总的来说,这个易语言Memcached协议客户端模块为我们提供了一个学习和参考的实例,展示了如何在易语言环境下实现与分布式缓存系统的交互,对于提升易语言开发者在网络编程和缓存技术方面的技能非常有帮助。...
Memcached 作为分布式缓存解决方案,适用于需要快速访问数据的场景,尤其是在高并发环境下,可以显著提高网站性能。然而,由于数据存储在内存中,一旦服务器宕机,未持久化的数据将会丢失,因此在设计系统时,需要...
`memcached` 是一个高性能、分布式的内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,通过将数据存储在内存中来提高数据访问速度。这个`memcached for win32` 包是专为在32位Windows操作系统上运行...