转自:http://blog.sina.com.cn/s/blog_4c925dca010193sy.html
当ms的hash表满了之后,新的插入数据会替代老的数据,更新的策略是LRU(最近最少使用),以及每个kv对的有效时限。Kv对存储有效时限是在mc端由app设置并作为参数传给ms的。
同时ms采用是偷懒替代法,ms不会开额外的进程来实时监测过时的kv对并删除,而是当且仅当,新来一个插入的数据,而此时又没有多余的空间放了,才会进行清除动作。
缓存数据库查询
现在memcached最流行的一种使用方式是缓存数据库查询,下面举一个简单例子说明:
App需要得到userid=xxx的用户信息,对应的查询语句类似:
“SELECT * FROM users WHERE userid = xxx”
App先去问cache,有没有“user:userid”(key定义可预先定义约束好)的数据,如果有,返回数据;如果没有,App会从数据库中读取数据,并调用cache的add函数,把数据加入cache中。
当取的数据需要更新,app会调用cache的update函数,来保持数据库与cache的数据同步。
从上面的例子我们也可以发现,一旦数据库的数据发现变化,我们一定要及时更新cache中的数据,来保证app读到的是同步的正确数据。
经过上面的描述后,相信网友们应该对 memcached的基本原理有了一个比较深晰的认识了
阿堂为了让网友们对上面的图示案例更好的理解,下面结合代码来说明一下
public class MemCached
{
// 创建全局的唯一实例
protected static MemCachedClient mcc = new MemCachedClient();
protected static MemCached memCached = new MemCached();
// 设置与缓存服务器的连接池
static {
// 服务器列表和其权重
//如下设置了三个ms
String[] servers = {"192.168.7.1:11211","192.168.7.2:11212","192.168.7.3:11213"};
Integer[] weights = {3};
// 获取socke连接池的实例对象
SockIOPool pool = SockIOPool.getInstance();
// 设置服务器信息
pool.setServers( servers );
pool.setWeights( weights );
// 设置初始连接数、最小和最大连接数以及最大处理时间
pool.setInitConn( 5 );
pool.setMinConn( 5 );
pool.setMaxConn( 250 );
pool.setMaxIdle( 1000 * 60 * 60 * 6 );
// 设置主线程的睡眠时间
pool.setMaintSleep( 30 );
// 设置TCP的参数,连接超时等
pool.setNagle( false );
pool.setSocketTO( 3000 );
pool.setSocketConnectTO( 0 );
// 初始化连接池
pool.initialize();
// 压缩设置,超过指定大小(单位为K)的数据都会被压缩
mcc.setCompressEnable( true );
mcc.setCompressThreshold( 64 * 1024 );
}
protected MemCached()
{
}
public static MemCached getInstance()
{
return memCached;
}
public boolean add(String key, Object value)
{
return mcc.add(key, value);
}
public boolean add(String key, Object value, Date expiry)
{
return mcc.add(key, value, expiry);
}
public boolean replace(String key, Object value)
{
return mcc.replace(key, value);
}
public boolean replace(String key, Object value, Date expiry)
{
return mcc.replace(key, value, expiry);
}
public Object get(String key)
{
return mcc.get(key);
}
public static void main(String[] args)
{
MemCached cache = MemCached.getInstance();
cache.add("foo ", "seattle");
//如上这一步经过了这样几个过程
1.对key foo进行哈希
2.选择服务器 (假设根据哈希算法,选择的服务器是 192.168.7.2:11212 MS B)
3. 连接
4.设置 key foo和value seattle
// cache.get("foo")如下一步执行
1.根据key foo进行哈希知道了 key foo是在 192.168.7.2:11212 MS B 上
2.连接 192.168.7.2:11212 MS B
3.在 192.168.7.2:11212 MS B 上根据 key foo得到相应的value seattle了
System.out.print("get value : " + cache.get("foo"));
}
}
至此,想必网友们对memcached技术有了一个比较相对完整的理解和认识了!
由于阿堂对memcached技术也在不断学习中,也算是一个新手了,这里总结分享一下,希望能对朋友们有所帮助!在后一篇文章中,阿堂准备分享一篇memcached的集群技术的实战分享给其它网友,敬请期待。
转自:http://blog.sina.com.cn/s/blog_4c925dca010193sy.html
相关推荐
### Memcached分布式缓存 #### 一、Memcached的基础 **1.1 Memcached是什么?** Memcached是一款高性能、分布式内存对象缓存系统,旨在通过减轻数据库负担来加速动态网络应用的速度。它通过在内存中缓存数据和...
"工具"标签则表明`memcached-session-manager`是一个实用工具,用于在Java Web应用中处理session的持久化和分布式存储,可能是通过提供API或者配置选项来实现。 **文件名解析:** "tomcat7"可能是教程中涉及的一个...
标题"memcached-win32-1.4.4-14.zip"指的是Memcached的Windows 32位版本,版本号为1.4.4,构建编号14。这个压缩包是一个软件分发包,用于在32位Windows系统上部署和运行Memcached。 描述中提到,Memcached是一个...
分布式缓存是解决大数据量和高并发访问问题的关键技术之一。MemCached通过将数据分散存储在多台服务器上,实现了数据的分布式管理,从而提高了系统的可扩展性和可用性。这种架构允许通过添加更多的硬件节点来线性...
`memcached` 是一个高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过在内存中存储数据,使得频繁访问的数据能够快速获取,从而提升系统的响应速度。`memcached-...
Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。这个“Memcached分布式缓存入门”资料将引导初学者深入理解Memcached的核心概念、工作原理以及...
**memcached 分布式缓存服务器** `memcached` 是一款高效、轻量级的分布式内存对象缓存系统,主要用于缓解数据库的负载压力,通过在内存中存储数据,提高网络应用的数据读取速度。它广泛应用于网站开发、API服务、...
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。 Memcached 基于一个存储键/...
Memcached 是一个高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用来减轻数据库负载,提高数据访问速度。Memcached的设计理念是简单而快速,通过在内存中存储键值对来提供高速的数据访问。这里我们关注的...
memcached,作为一款高性能的分布式缓存服务器,它的主要任务是缓存数据库查询结果,从而减少对数据库的访问,进而提升动态Web应用的响应速度。这一技术的广泛应用,源于其高效、简洁的设计理念以及对内存管理的独特...
Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式计算环境中存储临时数据,以减少对数据库的访问压力。在Web应用中,特别是在使用Java技术栈的Tomcat服务器上,Memcached常被用来实现session共享,提高...
分布式系统是现代信息技术中的核心组成部分,它涉及到多个独立的计算机节点通过网络进行协作,共同完成一个任务或提供服务。在“分布式模拟题题库-题目与答案1”中,我们可能会遇到一系列关于分布式系统设计、架构、...
分布式缓存技术是现代高并发、高性能Web应用中不可或缺的一部分,它们通过将数据存储在内存中,以提高读取速度,降低对数据库的依赖。在众多的缓存解决方案中,Redis和Memcached是最受欢迎的两个选择。本文将深入...
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及...
分布式缓存系统在现代Web应用程序开发中扮演着至关重要的角色,尤其对于高并发、大数据量的场景,能够显著提升性能并降低数据库压力。本实例主要介绍如何使用C#语言集成和应用Memcached作为分布式缓存解决方案,以...
掌握其工作原理和使用方法,能帮助开发者更好地利用缓存技术优化系统性能,解决高并发场景下的性能瓶颈问题。通过"memcached-1.2.6-win32-bin.zip"这个压缩包,我们可以快速地在Windows环境中搭建并实践Memcached,...
分布式缓存是现代互联网应用中常见的技术手段之一,用于解决传统数据库访问速度慢、负载高、扩展性差等问题。Memcached作为一种流行的分布式缓存系统,通过在内存中缓存数据和对象,显著提高了Web应用的响应速度和...
memcached1.4.4And1.4.5; 在 1.4.5 版本以前 memcached 可以作为一个服务安装,而在 1.4.5 及之后的版本删除了该功能。因此我们以下介绍两个不同版本 1.4.4 及 1.4.5的不同安装方法: memcached 版本安装 1、解压...
总结,`memcached-1.5.4`是实现高效缓存的关键组件,其源码的阅读与编译有助于深入理解内存缓存的工作原理,优化Web应用性能。通过熟悉`memcached`的配置、运行以及与其他技术的集成,开发者可以更好地利用此工具来...