1. 使用repcached
这个不做多的说明。
该方案优点:两个Memcached都可以进行读写操作,互相冗余。缺点:只支持单对单(一个master和一个slave),怎么样在多个memcached中使用repcached,我没找到答案。
2. 使用MAgent
项目地址:http://code.google.com/p/memagent/wiki/HowMagentWorks
安装:
mkdir magent cd magent wget http://memagent.googlecode.com/files/magent-0.5.tar.gz tar -xzvf magent-0.5.tar.gz /sbin/ldconfig sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile make
分别在11211,11212,11213,11214端口启动4个memcached:
/usr/local/memcached/bin/memcached -d -p 11211 -u memcached -m 2048 -l 127.0.0.1 -p 11211 -c 300 -P/usr/local/memcached/memcached1.pid /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid
[root@hd026-test agent]# ps aux | grep mem 533 4097 0.0 0.0 196688 2224 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11211 -u memcached -m 2048 -l 127.0.0.1 -p 11211 -c 300 -P/usr/local/memcached/memcached1.pid 533 4105 0.0 0.0 131304 2224 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid 533 4112 0.0 0.0 65768 2216 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid 533 4123 0.0 0.0 131304 2212 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid root 4248 0.0 0.0 61136 736 pts/0 S+ 15:07 0:00 grep mem
分别在12000,12001端口启动两个MAgent:
./magent -u root -n 4000 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214 ./magent -u root -n 4000 -l 127.0.0.1 -p 12001 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214
启动参数说明:-p表示运行的端口号,-s表示指定那个memcached作为主,-b表示指定备份memcached;
[root@hd026-test agent]# ps aux | grep magent root 4139 0.0 0.0 17048 520 ? Ss 14:48 0:00 ./magent -u root -n 4000 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214 root 4169 0.0 0.0 17048 520 ? Ss 14:52 0:00 ./magent -u root -n 4000 -l 127.0.0.1 -p 12001 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213 -b 127.0.0.1:11214 root 4288 0.0 0.0 61136 740 pts/0 S+ 15:11 0:00 grep magent
连接到MAgent-12000,插入key1:
[root@hd026-test agent]# telnet localhost 12000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. set key1 0 0 5 11111 STORED get key1 VALUE key1 0 5 11111 END quit Connection closed by foreign host.
连接到MAgent-12001,插入key2;
之后,分别连接Memcached-11211,Memcached-11212,Memcached-11213,Memcached-11214来get key1和key2,
发现key1在11212和11214中,key2在11211和11213中。
结构如下:
用户在连接到MAgent写数据时,MAgent会根据一定的算法将数据写入一个主memcached和一个备memcached;
这样,在主memcached挂掉时候,MAgent会从备memcached中读取数据,对用户来说是透明的。
实验一下:
kill掉Mem-11211:
kill 4097 [root@hd026-test agent]# ps aux | grep mem 533 4105 0.0 0.0 131304 2224 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid 533 4112 0.0 0.0 65768 2216 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid 533 4123 0.0 0.0 131304 2212 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid root 4265 0.0 0.0 61136 740 pts/0 S+ 15:09 0:00 grep mem
在连接到MAgent-12000或者MAgent-12001, get key2:
[root@hd026-test agent]# telnet localhost 12000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key2 VALUE key2 0 5 22222 END get key1 VALUE key1 0 5 11111 END quit Connection closed by foreign host. [root@hd026-test agent]# telnet localhost 12001 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key2 VALUE key2 0 5 22222 END get key1 VALUE key1 0 5 11111 END quit Connection closed by foreign host.
数据仍然可以正常获取。
使用该方案的优点是可以有多个memcached主从节点。
缺点是当一个主节点挂掉又恢复时候,从MAgent便会取不到数据。
测试如下:
重启11211端口的memcached
[root@hd026-test agent]# ps aux | grep mem 533 4105 0.0 0.0 131304 2224 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -m 2048 -l 127.0.0.1 -p 11212 -c 300 -P/usr/local/memcached/memcached2.pid 533 4112 0.0 0.0 65768 2216 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -m 2048 -l 127.0.0.1 -p 11213 -c 300 -P/usr/local/memcached/memcached3.pid 533 4123 0.0 0.0 131304 2212 ? Ssl 14:47 0:00 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -m 2048 -l 127.0.0.1 -p 11214 -c 300 -P/usr/local/memcached/memcached4.pid 533 4270 0.0 0.0 130280 1144 ? Ssl 15:09 0:00 /usr/local/memcached/bin/memcached -d -p 11211 -u memcached -m 2048 -l 127.0.0.1 -p 11211 -c 300 -P/usr/local/memcached/memcached1.pid root 4279 0.0 0.0 61136 740 pts/0 S+ 15:10 0:00 grep mem
[root@hd026-test agent]# telnet localhost 12000 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key2 END get key1 VALUE key1 0 5 11111 END quit Connection closed by foreign host.
get key2,发现已经取不到数据,但其实key2在Mem-11213上还是存在的。
[root@hd026-test agent]# telnet localhost 11213 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. get key2 VALUE key2 0 5 22222 END quit Connection closed by foreign host.
这其实是个很致命的缺陷,不知道为何没人修复。。或许有其他的方案可以弥补。。
相关推荐
**标题与描述解析** ...总的来说,Memcached 64位 window为Windows环境提供了强大的内存缓存解决方案,可以有效提升依赖数据库的应用性能。正确配置和使用Memcached,能显著改善用户体验,降低服务器压力。
首先,Memcached 1.4.3是Memcached的稳定版本,它提供了高速的数据存储和检索功能,适用于快速读取大量数据的场景。此版本同时支持32位和64位操作系统,这意味着无论你的服务器架构如何,都可以顺利地部署和使用。在...
2. 进入目录:`cd memcached-1.4.15` 3. 配置,指定libevent库的位置(如果需要):`./configure --with-libevent=/usr/local` 4. 编译:`make` 5. 安装:`sudo make install` 安装完成后,启动memcached服务: 1....
2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动...
标签“memcached 服务器端 下载”明确了这是关于获取memcached服务端的资源,而且是下载操作,通常这包括了memcached服务器的运行文件和可能需要的客户端驱动(如PHP扩展)。 在压缩包中的`php_memcached.dll`和`...
**2. libevent 库** libevent 是一个事件通知库,Memcached 可以依赖它实现异步非阻塞I/O。当在编译 Memcached 时,如果选择使用 libevent 模式,可以提高其性能和可扩展性。libevent 提供了一种方式来处理多个长...
描述中提到的“详细你谷歌memcached安装教程”,暗示了用户可能需要通过搜索引擎(如Google)查找关于如何在Windows环境下安装和配置Memcached的步骤。这通常包括以下几个关键步骤: 1. **下载Memcached**: 首先,...
标题中的"memadmin+php_memcached+memcached1.4.5"暗示了这是一个关于内存缓存管理系统、PHP扩展以及memcached服务器的组合。这里的关键技术包括`memadmin`(一个用于管理memcached的工具)、`php_memcached`(PHP...
Memcached 是一个高性能的分布式...总的来说,Memcached提供了一种高效且易于部署的缓存解决方案,通过合理配置和使用,能显著提升Web应用的性能。了解并掌握上述知识,将有助于你在实际项目中有效地利用Memcached。
2. **简单的协议**:Memcached使用自定义的文本协议,简洁明了,易于实现和调试。客户端可以轻松地与Memcached进行交互,存储和检索数据。 3. **基于libevent的事件处理**:libevent是一个跨平台的事件通知库,用于...
Java连接Memcached是一种常见的缓存操作,特别是在处理大数据量或者需要快速响应的Web应用程序中。Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站性能。下面我们将详细探讨如何在...
**Memcached:高性能分布式...总结来说,Memcached是一个高效、轻量级的内存缓存解决方案,广泛应用于需要快速数据访问的场景。正确配置和使用memcached.exe和memcached.dll,可以为你的应用程序带来显著的性能提升。
六、 Memcached的局限性与替代方案 虽然Memcached在很多场景下表现优秀,但也有其局限性,如不支持持久化、数据安全性较低等。在特定情况下,可能会考虑使用Redis这样的更全面的缓存解决方案,它支持更多的数据结构...
【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...
**memcached** 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问...但同时也要注意,memcached并非万能解决方案,对于需要持久化存储和复杂查询的数据,仍需依赖数据库。
**hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统Memcached整合到Hibernate中,作为其二级缓存解决方案。在大型分布式应用中,缓存技术是提高性能的关键,特别是...
使用memcached 方法 package com.war.common.util; import com.danga.MemCached.*; import java.util.Date; public class MemCached { protected static MemCachedClient mcc; protected static Logger log; ...
**标题解析:** "memcached1.5.6.rar" 这个标题表明这是一个关于memcached软件的压缩包,具体版本是1.5.6。memcached是一个高性能、分布式的内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。 **描述解读...