一.基本原理
Memcached是一种分布式数据缓存技术,其基本原理是预先分配合理适当的内存空间,保存数据时根据保存Key的哈希码除模取余数的方法来选择分布式网络中的一台服务器保存数据。当需要查询数据时候使用同样的算法来取值。同JBoss Cache或EHCache比较,个人认为有如下有点:
(1)。配置使用简单,没有JBoss Cache,EHCache配置那样复杂,特别是相对于JbossCache来说,不需要配置复杂的JGoss TCP和UTP通讯;它只需要简单地给出多个服务器的IP地址就可以了。
(2)。可以异步查询或保存根据数据;也可以同步执行,这一步是由spymemcached来完成,其主要原理是使用了JDK5的java.util.concurrent包下的相关技术到达异步执行;
二.实验:
(1)安装Memcached服务端;
(2)启动Memcached服务端:
(3)查询MemCached服务端信息:
再输入:
Stats Slabs
得到如下:
(3)下载spymemcached客户端jar包,建立一个工程:
源码包:
本测试的做法是使用多个线程同时使用HttpClient去请求{ "http://www.sina.com/",
"http://www.yahoo.com/", "http://www.sohu.com/" };中的任意随机一个,Memcached缓冲时间为12秒。
初始化服务端:本机测试
String[] servers = { "127.0.0.1:11211" };
Integer[] weights = { 3 };
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(servers);
pool.setWeights(weights);
设置最小最大初始Memcached连接线程大小
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(250);
//线程空闲时间
pool.setMaxIdle(1000 * 60 * 60 * 6);
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(3000);
pool.setSocketConnectTO(0);
pool.initialize();
//启用压缩缓冲
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);
pool.initialize();
//启用压缩缓冲
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);
测试的主函数:
TestCached tt = new TestCached();
每次一百个线程,每个线程连续50个Http请求
int count = 100;
//不使用缓冲请求,false表示非false
MemCachedThread r = new MemCachedThread(tt, false);
long begin = System.currentTimeMillis();
Thread[] ths = new Thread[count];
for (int i = 0; i < count; i++)
{
ths = new Thread(r);
ths.start();
}
等待所有的线程执行完毕统计时间
for (int i = 0; i < count; i++)
{
ths.join();
}
long end = System.currentTimeMillis();
long f = (end - begin) / 1000;
//先清除MemCached服务端对应值,这一部及时是多余,我们还没有缓冲
for (int i = 0; i < urls.length; i++)
{
mcc.delete(urls);
}
//使用缓冲请求,true表示使用缓冲
tt.time = 0;
r = new MemCachedThread(tt, true);
begin = System.currentTimeMillis();
ths = new Thread[count];
for (int i = 0; i < count; i++)
for (int i = 0; i < count; i++)
{
ths.join();
}
end = System.currentTimeMillis();
System.out.println("没有使用MemCached缓冲机制时间 time is -------: " + f);
System.out.println("使用MemCached缓冲机制时间 time is -------: " + (end - begin)
/ 1000);
public class MemCachedThread implements Runnable {
TestCached tt;
boolean useCahced;
public void run() {
if(!useCahced)
{
for(int i=0;i<50;i++)
{
tt.unUseCahceOutput();
}
}
else
{
for(int i=0;i<50;i++)
{
tt.useCahceOutput();
}
}
}
保存缓冲,每个url和对应值保存时间
public void bulidCache(String key, String response)
{
mcc.set(key, response, new Date(12000));
}
使用缓冲,从缓冲先得到数据,如果没有则http请求。得到之后保存
public void useCahceOutput()
{
String url = urls[rd.nextInt(urls.length)];
String response = (String) mcc.get(url);
if (response == null)
{
bulidCache(url, httpConnect(url));
}
output();
}
10个线程,每个线程10个随机请求测试结果:
50个线程,每个线程10个随机请求测试结果:
100个线程,每个线程10个随机请求测试结果:
200个线程,每个线程10个随机请求测试结果,这时内存溢出。
解决办法,修改Eclipse启动参数:
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
缓冲优化方法:
(1)适当提高服务器连接数:pool.setMaxConn();
(2)改变Memcached服务端缓冲启动大小: Memcached .exe –m 128 默认64
总结:
通过Memcached缓存数据查询结果,减少数据库等访问次数,以提高动态Web应用的速度、提高可扩展性。
- 大小: 21.5 KB
- 大小: 2.8 KB
- 大小: 81.2 KB
- 大小: 7.7 KB
- 大小: 8.6 KB
- 大小: 39.9 KB
分享到:
相关推荐
使用Memcached进行缓存操作 在开发中,我们通常会使用编程语言提供的客户端库来操作Memcached。例如,对于Python,可以使用`python-memcached`库,Java有`spymemcached`,PHP有`php-memcached`等。以下是一些基本...
搭建Memcached缓存服务器1是指如何使用Memcached缓存服务器来加速动态网页和减少数据库的负载。本文将详细介绍Memcached缓存服务器的安装、配置和使用。 标签解释 Memcached服务器是指使用Memcached缓存服务器来...
使用Memcached时,应考虑合理设置缓存的过期时间和大小,避免内存浪费。此外,可以利用Memcached的分布式特性,通过添加多台服务器来提高并发处理能力。 总之,"php memcached缓存操作类"是为了解决PHP应用中数据...
在Web应用程序中,使用缓存可以显著提高数据访问速度,减少数据库负载,从而提升整体性能。 1. **Spring AOP**: - AOP是一种编程范式,它允许程序员定义“横切关注点”(如日志、事务管理、权限检查等),并将...
2. 存储数据:使用`set()`方法可以将键值对存储到缓存中,例如`$memcached->set('key', 'value', $expiration)`,其中`$expiration`表示过期时间。 3. 获取数据:使用`get()`方法根据键获取数据,如`$value = $...
memcached 缓存 jar包,tomcat共享缓存可用,java开发数据库缓存也可用。
.NET C# Memcached 缓存获取所有缓存键的方法步骤 ...本文详细介绍了如何使用 .NET C# 语言实现 Memcached 缓存获取所有缓存键的方法步骤,该方法可以帮助开发者快速实现 Memcached 缓存机制,并提高系统性能。
**memcached缓存处理** **一、什么是memcached** `memcached`是一个高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载。它通过将数据存储在内存中来加速读取操作,而不是每次请求都去查询数据库。...
这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个...
在本示例中,我们将探讨如何使用Memcached缓存图片,以提升图片加载速度和整个网站的响应性能。 首先,了解Memcached的基本概念是必要的。Memcached基于键值对(key-value pairs)工作,允许用户存储任何序列化对象...
1. **统计信息**:Memcached提供了一系列内置的统计信息,包括命中率、内存使用情况、连接数等,这些信息可以帮助分析其性能状况。 2. **第三方工具**:例如,文章中提到的`MemCacheDManager`是一个用于监控和管理...
总结,PHP与Memcached的结合为Web应用提供了高效的数据缓存方案,通过合理使用和优化,可以显著提升应用的响应速度和用户体验。对于PHP 5.2版本的用户,确保找到兼容的`memcached.dll`扩展,才能顺利使用这一功能。
2. **键值对存储**:Memcached使用键值对(Key-Value)的方式来存储数据,通过键来唯一标识一个数据项,而值则包含实际的数据。 3. **轻量级设计**:它的设计简单且高效,占用资源少,启动快速,非常适合处理大量小...
2. **缓存未命中**:如果数据不在缓存中,客户端会向后端数据库发起请求获取数据,然后将数据存储到Memcached中,供后续请求使用。 3. **空间管理**:Memcached采用LRU(Least Recently Used)策略来处理内存满的...
SSM整合Memcached缓存是将Spring、SpringMVC和MyBatis这三大Java Web开发框架与Memcached相结合,以实现高效...在实际项目中,可以根据业务需求调整缓存策略,如设置过期时间、使用缓存预热等,以达到最佳的性能效果。
memcached缓存服务器 ,64位安装包 ,内有简单的使用说明
Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。通过在内存中存储常用数据,Memcached能够快速响应客户端请求,避免了频繁的磁盘I/O操作。 ...
**memcached缓存服务器安装与使用** `memcached` 是一个高性能、分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升应用程序性能。它广泛应用于网站、API服务和内部应用程序,通过缓存经常访问的数据来...
Memcached 缓存安装配置 Memcached 是一个自由开源的高速缓存系统,可以用来加速动态Web应用程序中的数据访问速度。本文将指导您如何安装和配置 Memcached,并介绍 Memcached 的基本概念和参数。 一、安装 ...
**Memcached缓存技术详解** Memcached是一款高性能的分布式内存对象缓存系统,它被广泛应用于Web应用中,用于缓解数据库的压力,提高数据访问速度。本文将深入探讨Memcached的基本概念、工作原理、安装配置、使用...