memcached&redis性能测试
8种缓存框架介绍

8种缓存框架介绍缓存框架是一种用于存储和管理缓存数据的软件工具或库。
它们用于提高应用程序的性能,减少数据库或其他远程资源的访问次数。
在本文中,我们将介绍8种流行的缓存框架,包括Redis、Memcached、Ehcache、Guava Cache、Caffeine、Hazelcast、Infinispan和Apache Geode。
1. Redis: Redis是一个基于内存的缓存框架,提供了丰富的数据结构和灵活的功能,包括缓存、消息队列和数据持久化。
Redis的性能出色,并且具有高可用性和扩展性。
2. Memcached: Memcached是另一个流行的基于内存的缓存框架,广泛用于提高Web应用程序的性能。
它具有简单的架构和易于使用的API。
Memcached可以在多台服务器上进行水平扩展,以提供更高的负载能力。
3. Ehcache: Ehcache是一个Java缓存框架,可以用于将缓存添加到应用程序中。
它具有简单易用的API,并提供了多种缓存策略,如LRU (最近最少使用)和FIFO(先进先出)。
Ehcache还支持磁盘持久化和分布式缓存。
4. Guava Cache: Guava Cache是Google开发的一个轻量级缓存库,可以在本地JVM中实现缓存功能。
它具有内存敏感的淘汰策略和异步加载机制,可以优化资源利用和应用程序响应时间。
5. Caffeine: Caffeine是另一个基于本地内存的缓存库,由Google开发。
它被设计为高性能、无锁的缓存框架,并且具有比Guava Cache更高的吞吐量和更低的延迟。
6. Hazelcast: Hazelcast是一个分布式缓存框架和数据网格,可以在多个服务器上共享缓存数据。
它提供了分布式数据结构和分布式计算功能,并支持高可用性和容错性。
7. Infinispan: Infinispan是另一个开源的分布式缓存框架,用于构建高性能和高可靠性的应用程序。
Memcached 缓存技术介绍

优化
调试块大小 使用 Growth Factor进行调试: 启动时指定 Growth Factor(通过 -f选项),可以适当控制 slab差异,默认值为1.25。
以 verbose模式启动 Memcached: 默认 Growth Factor输出(f=1.25): # memcached -m 1024 -c 40960 -u root -p 11219 -P /var/run/m11219.pid -vv slab class 1: chunk size 96 perslab 10922 slab class 2: chunk size 120 perslab 8738 slab class 3: chunk size 152 perslab 6898 slab class 4: chunk size 192 perslab 5461 …… 设置 Growth Factor为 2倍(f=2): # memcached -m 1024 -c 40960 -u root -p 11219 -P /var/run/m11219.pid -f2 -vv slab class 1: chunk size 96 perslab 10922 slab class 2: chunk size 192 perslab 5461 slab class 3: chunk size 384 perslab 2730 slab class 4: chunk size 768 perslab 1365 …… 输出可见,从192字节的组开始,组大小依次增大为原来的 2倍。 这样设置后,slab之间的差别比较大,有些情况下会浪费内存。 通过重新计算数据的预期平均长度,调整 growth factor,以获得最恰当的内存使用。
命中率
Java开发中的Memcache原理及实现

Java开发中的Memcache原理及实现作者:jiaxiaoyuan1204整理:chaijunkun来源:/一、概述1. Memcache是什么Memcache(Memcached)是集群环境下的缓存解决方案。
Memcache是的一个项目,最早是为LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
它可以应对任意多个连接,使用非阻塞的网络IO。
它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
Memcache官方网站:/memcached,更多详细的信息可以来这里了解。
2. 为什么会有Memcache和memcached两种名称其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了吧。
一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
3. 如何在Java开发中使用Memcache在Java开发中使用Memcache,一般要用到以下几个程序:1) Memcached该程序用来在Linux或Windows服务器上建立和管理缓存。
其项目网址为:/memcached/。
2) MagentMagent是一款开源的Memcached代理服务器软件,使用它可以搭建高可用性的集群应用的Memcached服务,其项目网址为:/p/memagent/。
3) Memcached客户端程序至于Memcached的客户端程序,一般推荐用memcached client for java,为什么推荐用这种客户端,后面会讲到具体的原因,其项目的网址为:/gwhalin/Memcached-Java-Client/。
4)其它程序i. Libevent在Linux环境下应用Memcache时,Memcache用到了libevent这个库,用于Socket的处理,所以还需要安装libevent。
memcached参数

memcached参数Memcached是一种高性能的分布式内存对象缓存系统,常用于提高Web应用程序的性能和扩展性。
Memcached的设计目标是提供一个简单、快速、可扩展的缓存解决方案,而其参数配置则对其性能和稳定性至关重要。
以下是一些常见的Memcached参数及其作用:2. -U,--udp:启用UDP监听功能。
默认情况下,Memcached使用TCP进行通信,但也可以选择启用UDP。
使用UDP可以提高性能,但同时也可能会导致数据丢失。
3. -l,--listen:指定绑定的IP地址。
默认情况下,Memcached会绑定到所有可用的IP地址上,但可以通过此参数来指定要绑定的特定IP地址。
4. -u,--user:指定运行Memcached进程的用户。
可以使用此参数来提高服务器的安全性,限制只有指定用户才能运行Memcached。
5. -m,--memory:指定Memcached使用的内存大小(以MB为单位)。
这个参数非常重要,它决定了可以缓存的对象数量和大小。
应根据预期的负载和可用内存来调整此参数。
6. -c,--connections:指定Memcached服务器能够处理的最大并发连接数。
默认情况下,这个值是1024,但在高并发情况下,可能需要增加这个值来处理更多的连接。
7. -t,--threads:指定Memcached使用的线程数量。
默认情况下,Memcached会根据可用的处理器核心数量来自动配置线程数,但也可以通过此参数来手动设置线程数量。
9. -R,--max-reqs-per-event:指定每个事件处理器循环中处理的最大请求数。
默认情况下,Memcached每次处理一个请求,但这个参数可以用来限制每个事件处理器循环中处理的请求数,以提高其他连接的响应速度。
以上是一些常用的Memcached参数,通过对这些参数的配置,可以根据实际需求来优化Memcached的性能和稳定性。
使用Docker容器部署和管理Memcached缓存

使用Docker容器部署和管理Memcached缓存随着互联网的快速发展,大量的数据处理和存储需求逐渐涌现。
为了提高应用程序的性能和响应速度,缓存成为了不可或缺的一部分。
而Memcached作为一种高性能的分布式内存对象缓存系统,被广泛应用于各类网站和应用程序中。
本文将探讨使用Docker容器来部署和管理Memcached缓存的方法和优势。
Docker是一个开源的容器化平台,可以将应用程序及其依赖打包成轻量级、可移植的容器,并进行部署和管理。
相较于传统的虚拟机技术,Docker提供了更快速、更高效的部署和资源利用方式。
对于Memcached这种高性能的缓存系统,使用Docker进行部署和管理是一个理想的解决方案。
首先,在部署Memcached缓存之前,我们需要在本地安装Docker。
安装完成后,可以通过Docker Hub来获取Memcached的Docker镜像。
Docker Hub是一个存储和分享Docker镜像的在线平台,用户可以在其中找到各种基础镜像和应用程序镜像。
在命令行中执行以下命令,即可从Docker Hub上下载Memcached镜像:```docker pull memcached```下载完成后,可以通过以下命令来创建一个Memcached容器:```docker run -d -p 11211:11211 --name my_memcached memcached```上述命令的含义是以后台模式运行一个Memcached容器,将容器内部的11211端口映射到本地的11211端口,并将容器命名为my_memcached。
接下来,我们可以使用telnet命令来测试是否成功部署了Memcached缓存:```telnet localhost 11211```如果成功连接上了Memcached服务器,则说明容器已经正确部署并且可以正常访问了。
使用Docker部署和管理Memcached缓存的好处不仅仅在于简化了部署过程,还包括了以下几个优势:1. 资源隔离:每个Docker容器都有自己独立的进程空间和文件系统,不会相互影响。
memcached工作原理

memcached工作原理
memcached是一款高性能的分布式内存缓存系统,主要用于减轻数据库负载,提高应用程序的性能。
其工作原理如下:
1. 客户端向memcached服务器发送请求,请求可以是获取或设置缓存数据。
2. 如果请求是获取缓存数据,memcached服务器首先检查是否有该数据的缓存副本,如果有,则返回该数据给客户端。
3. 如果请求是设置缓存数据,memcached服务器将数据存储到其内存中,并设置相应的索引。
4. 当memcached服务器的内存空间不足时,会采用LRU(最近最少使用)算法将一些旧的缓存数据删除,以腾出更多的内存空间。
5. 当多个memcached服务器组成一个分布式缓存集群时,客户端需要通过一致性哈希算法来选择具体的服务器,以保证缓存数据的一致性。
6. 当客户端对缓存数据进行修改时,需要同时更新所有memcached服务器上的缓存数据,以保证数据一致性。
总之,memcached工作原理简单、高效,可以提高应用程序的响应速度和吞吐
量,同时减少数据库的负载。
Memcached强大的缓存中间件

Memcached教程2018年5月30日修改记录Mencached1.1介绍Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
相对于session缓存的话,session缓存占用内存太高,分布式的项目也只能用中间件缓存,所以session缓存将会推出历史舞台。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
1.2第二步安装获取Memcached通过wget /files/memcached-1.4.24.tar.gz下载最新源码。
安装Memcached1、解压tar -xf memcached-1.4.24.tar.gz;2、进入目录cd memcached-1.4.24/;3、配置 ./configure;1 /94、编译安装make&&make install;其中&&表示前面的命令执行成功才会执行后面的命令;安装完成后memcached的默认目录为/usr/local/bin/memcached启动memcached启动例子:memcached -u root -d启动参数说明:-d 选项是启动一个守护进程。
-m 是分配给Memcache使用的内存数量,单位是MB,默认64MB。
-u 是运行Memcache的用户,如果当前为root 的话,需要使用此参数指定用户-p <num>是设置Memcache的TCP监听的端口,最好是1024以上的端口。
-c 选项是最大运行的并发连接数,默认是1024。
-P <file> 是设置保存Memcache的pid文件。
参考地址:https:///article/e2284b2b6070eee2e7118d67.html1.3第三步配置gitlabsudo gitlab-ctl reconfigure注意:1、防火墙限制了端口,centos7 开放firewall端口开发防火墙:sudo firewall-cmd--permanent--add-service=http2 /92:阿里云安全组件开发端口3 /94 /9对照:文章 /?p=2733。
Memecached的安装与使用

M e m e c a c h e d的安装与使用公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]Meme cached的安装与使用一、下载Memercached For Windows二、安装步骤1、解压到指定目录,如:C:\Memcached\。
2、用cmd打开命令窗口,转到解压的目录,输入“ -d install”。
3、打开控制面板,打开服务,可以看到memcached已经在上面可,如果没有启动,则手动启动一下。
4、??? 使用telnet命令验证缓存服务器是否可用。
开始什么都不显示,回车后输入命令? stats? 查看统计信息,如下图,说明服务器运作正常。
三、参数介绍1.以上的安装和启动都是在默认环境下进行的,在安装时可设置如下参数:-p 监听的端口-l 连接的IP地址, 默认是本机-d start 启动memcached服务-d restart 重起memcached服务-d stop|shutdown 关闭正在运行的memcached服务-d install 安装memcached服务-d uninstall 卸载memcached服务-u 以的身份运行 (仅在以root运行的时候有效)-m 最大内存使用,单位MB。
默认64MB-M 内存耗尽时返回错误,而不是删除项-c 最大同时连接数,默认是1024-f 块大小增长因子,默认是-n 最小分配空间,key+value+flags默认是48-h 显示帮助如:“memcached -d install -l -m 1024 -c2048”。
2.输入stats命令后,页面出现的参数介绍。
STAT pid 4356 服务器进程IDSTAT uptime 56625 服务器运行时间,单位秒STAT time 79 服务器当前的UNIX时间STAT 服务器的版本号STAT pointer_size 64STAT rusage_user 该进程累计的用户时间(秒:微妙)STAT rusage_system 该进程累计的系统时间(秒:微妙)STAT ibuffer_size 4096STAT curr_connections 13 连接数量STAT total_connections 54136 服务器运行以来接受的连接总数STAT connection_structures 318 服务器分配的连接结构的数量STAT cmd_get 100595 取回请求总数STAT cmd_set 6510 存储请求总数STAT get_hits 96543 请求成功的总次数STAT get_misses 4052 请求失败的总次数STAT bytes_read 4427679 服务器从网络读取到的总字节数STAT bytes_written 6585596 服务器向网络发送的总字节数备注:uptime 是memcached运行的秒数,cmd_get是查询缓存的次数。
memcached 参数

Memcached 是一个高性能的分布式内存对象缓存系统,它可以用于加速Web 应用程序。
下面是一些常见的Memcached 参数:
1. -m <num>:所有slab 类可用内存的上限,以MB 为单位。
默认值为64MB。
2. -M:内存用光时报错。
3. -p <num>:指定Memcached 监听的TCP 端口号。
默认值为11211。
4. -U <num>:指定Memcached 监听的UDP 端口号。
默认值为0,表示关闭UDP 监听。
5. -s <file>:指定Memcached 监听的UNIX 套接字文件名。
禁用网络支持。
6. -a <num>:UNIX 套接字访问掩码,以八进制表示。
默认值为700。
7. -A:启用ASCII 格式的"shutdown" 命令。
8. -l <ip_addr>:指定Memcached 监听的IP 地址。
默认值为INADDR_ANY,表示绑定所有可用IP 地址。
9. -D <dir>:指定Memcached 的数据目录。
10. -q:关闭日志输出。
这些是Memcached 的一些常见参数,您可以根据需要进行配置。
请注意,Memcached 还提供了许多其他选项和功能,您可以通过运行man memcached 命令查看完整的命令行手册来了解更多信息。
常用内存数据库介绍

常用内存数据库介绍随着互联网和大数据的快速发展,传统的磁盘数据库在处理大规模数据时面临着性能瓶颈。
相比之下,内存数据库因其高性能、低延迟和高并发性能等优势,正在成为许多企业和组织中的首选。
本文将介绍几种常用的内存数据库及其特点。
1. RedisRedis是一个开源的内存数据库,它支持键值存储模型,并提供了丰富的数据结构,如字符串、哈希表、列表、集合和有序集合等。
Redis以其快速的读写速度、持久化能力和高扩展性而闻名。
它可以通过持久化机制将数据保存到磁盘,以克服内存大小的限制。
此外,Redis还支持发布/订阅和事务等功能,使其成为构建缓存、会话管理、消息队列和实时分析等应用的理想选择。
2. MemcachedMemcached是一个开源的高性能分布式内存对象缓存系统。
它可以将数据存储在内存中,并提供简单、快速的键值存储访问接口。
Memcached使用键值对的方式存储数据,支持多线程并发访问,可以通过增加服务器的数量来扩展性能。
在互联网应用中,Memcached通常用于减轻数据库的负载,提高应用性能。
3. Apache IgniteApache Ignite是一个内存计算平台,它提供了分布式的内存数据库、缓存和计算引擎。
Ignite将数据存储在内存中,以实现极高的读写性能和低延迟。
它支持多种数据模型,如键值存储、关系型存储和对象存储,可以处理大规模数据和复杂查询。
此外,Ignite还提供了分布式查询、事务处理和机器学习等功能,使其成为构建实时分析、推荐系统和流式处理等应用的首选。
4. AerospikeAerospike是一个高性能的内存和闪存数据库,它专注于处理大规模的实时数据。
Aerospike使用内存和闪存的组合存储,可以实现低延迟的读写操作。
它支持键值存储和部分索引,可以处理高并发访问和大规模数据集。
Aerospike还提供了数据持久化、自动故障恢复和可扩展性等功能,适用于处理实时广告、个性化推荐和物联网等场景。
Memcached操作命令

memcached的基本命令(安装、卸载、启动、配置相关) memcached的基本命令(安装、卸载、启动、配置相关):-p 监听的端口-l 连接的IP地址, 默认是本机-d start 启动memcached服务-d restart 重起memcached服务-d stop|shutdown 关闭正在运行的memcached服务-d install 安装memcached服务-d uninstall 卸载memcached服务-u 以的身份运行(仅在以root运行的时候有效)-m 最大内存使用,单位MB。
默认64MB-M 内存耗尽时返回错误,而不是删除项-c 最大同时连接数,默认是1024-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48-h 显示帮助memcached的基本命令(当memcached 启动后用于对memcached管理的数据和本身运行memcached telnet 命令与返回结果详解博客分类:memcachedmemcachedtelent参数不算多,我们来启动一个Memcache的服务器端:# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid-d选项是启动一个守护进程,-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,-u是运行Memcache的用户,我这里是root,-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,-P是设置保存Memcache 的pid文件,我这里是保存在/tmp/memcached.pid,如果要结束Memcache进程,执行:# kill `cat /tmp/memcached.pid`get key1ENDset key1 0 3600 3123STOREDincr key1 5128decr key1 5123delete key1DELETEDget key1ENDquitdelete 命令格式: delete <key>基本memcached 客户机命令您将使用五种基本memcached 命令执行最简单的操作。
如何在Docker中部署Memcached缓存

如何在Docker中部署Memcached缓存在现代软件开发领域,缓存的使用变得越来越普遍,以提高应用程序的性能和响应速度。
而Memcached作为一款高度可扩展的分布式内存缓存系统,是许多开发人员的首选。
本文将介绍如何在Docker中部署Memcached缓存,并简要讨论一些相关的概念和技术。
1. Docker简介Docker是一种开源的容器化平台,可以将应用程序和它们的依赖项打包在一个虚拟容器中,从而实现快速部署、可移植性和可扩展性。
Docker容器可以运行在各种操作系统上,无需修改代码或重新配置。
2. Memcached简介Memcached是一款高性能的分布式内存对象缓存系统,常被用于加速动态数据库驱动网站的性能。
它将数据存储在内存中,以减少对数据库等后端存储系统的负载,从而提高读取和写入数据的速度。
3. 在Docker中部署Memcached步骤一:安装Docker首先,您需要在您的计算机上安装Docker。
您可以从Docker官方网站上下载和安装适用于您操作系统的Docker版本。
步骤二:拉取Memcached镜像打开终端或命令提示符窗口,并执行以下命令以下载并拉取Memcached的Docker镜像:```docker pull memcached```步骤三:运行Memcached容器运行以下命令来启动一个新的Memcached容器:```docker run --name my-memcached -d memcached```该命令会在后台启动一个名为"my-memcached"的Memcached容器。
4. 配置和管理Memcached您可以通过Docker的命令行工具或使用Docker Compose来配置和管理Memcached容器。
以下是一些常用的命令示例:- 停止和启动容器:```docker stop my-memcached # 停止Memcached容器docker start my-memcached # 启动Memcached容器```- 进入容器:```docker exec -it my-memcached bash```这将打开一个交互式的bash终端,您可以在其中执行Memcached相关的命令。
memcached 参数

memcached参数
Memcached是一种高性能的分布式内存缓存系统,它常用于提升Web应用程序的性能和可扩展性。
以下是一些常见的Memcached参数和其作用的简要说明:
1.`-p`或`--port`:指定Memcached服务器监听的端口号,默认为11211。
2.`-l`或`--listen`:指定Memcached服务器监听的IP地址,默认为所有可用地址。
3.`-m`或`--memory`:指定分配给Memcached的内存容量,以MB为单位。
4.`-c`或`--connections`:指定Memcached服务器可以同时处理的最大连接数。
5.`-t`或`--threads`:指定Memcached服务器使用的线程数。
6.`-k`或`--lock-memory`:锁定分配给Memcached的内存,防止其他进程使用。
7.`-M`或`--disable-eviction`:禁用缓存淘汰机制,即不会自动删除过期或较少使用的数据。
8.`-I`或`--max-item-size`:设置Memcached中每个存储项的最大大小,默认为1MB。
9.`-f`或`--factor`:设置缓存大小增长的因子,用于动态扩展内存。
10.`-n`或`--min-threads`:指定空闲线程的最小数量,用于处理请求。
11.`-R`或`--max-requests`:限制每个连接的最大请求数。
12.`-B`或`--binary-protocol`:启用Memcached的二进制协议。
memc 原理

memc 原理Memcached是一种常用的内存缓存系统,其原理主要包括数据存储、缓存失效和并发控制三个方面。
一、数据存储Memcached将数据存储在内存中,以提高数据访问速度。
具体而言,它通过将数据分散存储在多个服务器节点上,实现了数据的分布式存储。
每个节点都有唯一的标识符,称为key,用于标识存储的数据。
当客户端需要获取数据时,它会向Memcached发送一个请求,包含所需数据的key。
Memcached根据这个key计算出数据所在的节点,并将数据从该节点返回给客户端。
这种分布式存储方式使得数据可以被高效地存储和访问。
二、缓存失效为了保证缓存数据的有效性,Memcached引入了缓存失效机制。
当数据发生变化时,应用程序负责通知Memcached进行缓存失效操作。
具体而言,应用程序在数据发生变化时,将相应的key发送给Memcached,告知其相应的缓存数据已过时。
Memcached接收到该信息后,会将相应的数据从缓存中删除,以保证下一次访问时能够获取到最新的数据。
这种缓存失效机制能够确保缓存数据与后端数据的一致性。
三、并发控制由于多个客户端可能同时对同一个数据进行读写操作,为了保证数据的一致性和并发性,Memcached引入了并发控制机制。
具体而言,当多个客户端同时请求同一份数据时,Memcached会使用一种称为CAS(Compare and Swap)的机制来实现并发控制。
CAS机制通过比较数据的版本号来判断数据是否被修改过,在修改数据时,如果版本号与当前版本号一致,则可以进行修改操作,否则需要重新获取最新的数据。
这样可以避免多个客户端同时修改同一份数据造成的冲突问题。
Memcached通过数据存储、缓存失效和并发控制三个方面的原理,实现了高效的内存缓存系统。
它将数据存储在内存中,以提高数据访问速度,并通过分布式存储的方式实现数据的高效存储和访问;通过缓存失效机制保证缓存数据的有效性,与后端数据的一致性;通过并发控制机制保证多个客户端对同一份数据的一致性和并发性。
redis和memcached的区别(总结)

redis和memcached的区别(总结)观点⼀:1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。
不过memcache还可⽤于缓存其他东西,例如图⽚、视频等等;2、Redis不仅仅⽀持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;3、--Redis当物理内存⽤完时,可以将⼀些很久没⽤到的value 交换到磁盘;4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。
Redis可以通过例如expire 设定,例如expire name 10;5、分布式--设定memcache集群,利⽤magent做⼀主多从;redis可以做⼀主多从。
都可以⼀主⼀从;6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);7、--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;8、Redis⽀持数据的备份,即master-slave模式的数据备份;观点⼆:如果简单地⽐较Redis与Memcached的区别,⼤多数都会得到以下观点:1 Redis不仅仅⽀持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
2 Redis⽀持数据的备份,即master-slave模式的数据备份。
3 Redis⽀持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进⾏使⽤。
在Redis中,并不是所有的数据都⼀直存储在内存中的。
这是和Memcached相⽐⼀个最⼤的区别(我个⼈是这么认为的)。
Redis 只会缓存所有的key的信息,如果Redis发现内存的使⽤量超过了某⼀个阀值,将触发swap的操作,Redis根据“swappability =age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。
64位Linux上安装memcached详细步骤(实践版)

64位Linux上安装Memcached详细步骤由于memcached是基于libevent的,因此需要安装libevent,libevent-devel。
检查系统是否已经安装memcached# rpm -aq | grep memcachedmemcached-1.4.4-3.el6.x86_64libmemcached-0.31-1.1.el6.x86_64python-memcached-1.43-6.el6.noarch如果已经安装,可以使用系统自带的。
安装libevent# tar zxvf libevent-1.4.12-stable.tar.gz# cd libevent-1.4.12# ./configure --prefix=/usr/local/libeventconfigure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating test/Makefileconfig.status: creating sample/Makefileconfig.status: creating config.hconfig.status: executing depfiles commands# make/bin/sh ../libtool --tag=CC --mode=link gcc -g -O2 -Wall -fno-strict-aliasing -o regress regress-regress.o regress-regress_buffer.o regress-regress_http.o regress-regress_dns.o regress-regress_testutils.o regress-regress_rpc.o regress-regress.gen.o regress-regress_et.o regress-regress_bufferevent.o regress-regress_listener.o regress-regress_util.o regress-tinytest.o regress-regress_main.o regress-regress_minheap.o regress-regress_thread.o regress-regress_zlib.o regress-regress_ssl.o ../ ../libevent_ -lz ../libevent_ -lssl -lcrypto -lrtlibtool: link: gcc -g -O2 -Wall -fno-strict-aliasing -o .libs/regress regress-regress.o regress-regress_buffer.o regress-regress_http.o regress-regress_dns.o regress-regress_testutils.o regress-regress_rpc.o regress-regress.gen.o regress-regress_et.o regress-regress_bufferevent.o regress-regress_listener.o regress-regress_util.o regress-tinytest.o regress-regress_main.o regress-regress_minheap.o regress-regress_thread.o regress-regress_zlib.o regress-regress_ssl.o ../.libs/libevent.so ../.libs/libevent_pthreads.so -lz ../.libs/libevent_openssl.so -lssl -lcrypto -lrt -Wl,-rpath -Wl,/usr/local/libevent/libmake[3]: Leaving directory `/home/soft/libevent-2.0.19-stable/test'make[2]: Leaving directory `/home/soft/libevent-2.0.19-stable/test'make[1]: Leaving directory `/home/soft/libevent-2.0.19-stable'# make install----------------------------------------------------------------------Libraries have been installed in:/usr/local/libevent/libIf you ever happen to want to link against installed librariesin a given directory, LIBDIR, you must either use libtool, andspecify the full pathname of the library, or use the `-LLIBDIR'flag during linking and do at least one of the following:- add LIBDIR to the `LD_LIBRARY_PATH' environment variableduring execution- add LIBDIR to the `LD_RUN_PATH' environment variableduring linking- use the `-Wl,-rpath -Wl,LIBDIR' linker flag- have your system administrator add LIBDIR to `/etc/ld.so.conf'See any operating system documentation about shared libraries formore information, such as the ld(1) and ld.so(8) manual pages.----------------------------------------------------------------------test -z "/usr/local/libevent/include" || /bin/mkdir -p "/usr/local/libevent/include"/usr/bin/install -c -m 644 event.h evhttp.h evdns.h evrpc.h evutil.h '/usr/local/libevent/include' test -z "/usr/local/libevent/lib/pkgconfig" || /bin/mkdir -p "/usr/local/libevent/lib/pkgconfig"/usr/bin/install -c -m 644 libevent.pc libevent_pthreads.pc libevent_openssl.pc '/usr/local/libevent/lib/pkgconfig'make[3]: Leaving directory `/home/soft/libevent-2.0.19-stable'make[2]: Leaving directory `/home/soft/libevent-2.0.19-stable'Making install in includemake[2]: Entering directory `/home/soft/libevent-2.0.19-stable/include'make[3]: Entering directory `/home/soft/libevent-2.0.19-stable/include'make[3]: Nothing to be done for `install-exec-am'.test -z "/usr/local/libevent/include" || /bin/mkdir -p "/usr/local/libevent/include"/bin/mkdir -p '/usr/local/libevent/include/event2'/usr/bin/install -c -m 644 event2/buffer.h event2/buffer_compat.h event2/bufferevent.h event2/bufferevent_compat.h event2/bufferevent_ssl.h event2/bufferevent_struct.h event2/dns.h event2/dns_compat.h event2/dns_struct.h event2/event.h event2/event_compat.h event2/event_struct.h event2/http.h event2/http_compat.h event2/http_struct.h event2/keyvalq_struct.h event2/listener.h event2/rpc.h event2/rpc_compat.h event2/rpc_struct.h event2/tag.h event2/tag_compat.h event2/thread.h event2/util.h '/usr/local/libevent/include/event2'test -z "/usr/local/libevent/include" || /bin/mkdir -p "/usr/local/libevent/include"/bin/mkdir -p '/usr/local/libevent/include/event2'/usr/bin/install -c -m 644 ./event2/event-config.h '/usr/local/libevent/include/event2'make[3]: Leaving directory `/home/soft/libevent-2.0.19-stable/include'make[2]: Leaving directory `/home/soft/libevent-2.0.19-stable/include'Making install in samplemake[2]: Entering directory `/home/soft/libevent-2.0.19-stable/sample'make[3]: Entering directory `/home/soft/libevent-2.0.19-stable/sample'make[3]: Nothing to be done for `install-exec-am'.make[3]: Nothing to be done for `install-data-am'.make[3]: Leaving directory `/home/soft/libevent-2.0.19-stable/sample'make[2]: Leaving directory `/home/soft/libevent-2.0.19-stable/sample'Making install in testmake[2]: Entering directory `/home/soft/libevent-2.0.19-stable/test'make install-ammake[3]: Entering directory `/home/soft/libevent-2.0.19-stable/test'make[4]: Entering directory `/home/soft/libevent-2.0.19-stable/test'make[4]: Nothing to be done for `install-exec-am'.make[4]: Nothing to be done for `install-data-am'.make[4]: Leaving directory `/home/soft/libevent-2.0.19-stable/test'make[3]: Leaving directory `/home/soft/libevent-2.0.19-stable/test'make[2]: Leaving directory `/home/soft/libevent-2.0.19-stable/test'make[1]: Leaving directory `/home/soft/libevent-2.0.19-stable'# tar zxvf memcached-1.2.6.tar.gz# cd memcached-1.2.6# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent --enable-64bit --enable-threads--enable-64bit 64位系统需要这个参数--enable-threads 支持多线程configure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating doc/Makefileconfig.status: creating config.hconfig.status: executing depfiles commands# makemake all-recursivemake[1]: Entering directory `/home/soft/memcached-1.2.6'Making all in docmake[2]: Entering directory `/home/soft/memcached-1.2.6/doc'make[2]: Nothing to be done for `all'.make[2]: Leaving directory `/home/soft/memcached-1.2.6/doc'make[2]: Entering directory `/home/soft/memcached-1.2.6'gcc -DHAVE_CONFIG_H -I. -DNDEBUG -I/usr/local/libevent//include -m64 -g -O2 -MT memcached-memcached.o -MD -MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f 'memcached.c' || echo './'`memcached.cmv -f .deps/memcached-memcached.Tpo .deps/memcached-memcached.Pogcc -DHAVE_CONFIG_H -I. -DNDEBUG -I/usr/local/libevent//include -m64 -g -O2 -MT memcached-slabs.o -MD -MP -MF .deps/memcached-slabs.Tpo -c -o memcached-slabs.o `test -f 'slabs.c' || echo './'`slabs.cmv -f .deps/memcached-slabs.Tpo .deps/memcached-slabs.Pogcc -DHAVE_CONFIG_H -I. -DNDEBUG -I/usr/local/libevent//include -m64 -g -O2 -MT memcached-items.o -MD -MP -MF .deps/memcached-items.Tpo -c -o memcached-items.o `test -f 'items.c' || echo './'`items.cmv -f .deps/memcached-items.Tpo .deps/memcached-items.Pogcc -DHAVE_CONFIG_H -I. -DNDEBUG -I/usr/local/libevent//include -m64 -g -O2 -MT memcached-assoc.o -MD -MP -MF .deps/memcached-assoc.Tpo -c -o memcached-assoc.o `test -f 'assoc.c' || echo './'`assoc.cmv -f .deps/memcached-assoc.Tpo .deps/memcached-assoc.Pogcc -DHAVE_CONFIG_H -I. -DNDEBUG -I/usr/local/libevent//include -m64 -g -O2 -MT memcached-thread.o -MD -MP -MF .deps/memcached-thread.Tpo -c -o memcached-thread.o `test -f 'thread.c' || echo './'`thread.cthread.c: In function ‘worker_libevent’:thread.c:324: warning: cast to pointer from integer of different sizemv -f .deps/memcached-thread.Tpo .deps/memcached-thread.Pogcc -DHAVE_CONFIG_H -I. -DNDEBUG -I/usr/local/libevent//include -m64 -g -O2 -MT memcached-stats.o -MD -MP -MF .deps/memcached-stats.Tpo -c -o memcached-stats.o `test -f 'stats.c' || echo './'`stats.cmv -f .deps/memcached-stats.Tpo .deps/memcached-stats.Pogcc -m64 -g -O2 -L/usr/local/libevent//lib -o memcached memcached-memcached.o memcached-slabs.o memcached-items.o memcached-assoc.o memcached-thread.o memcached-stats.o -leventgcc -DHAVE_CONFIG_H -I. -I/usr/local/libevent//include -m64 -g -O2 -MT memcached.o -MD -MP -MF .deps/memcached.Tpo -c -o memcached.o memcached.cmv -f .deps/memcached.Tpo .deps/memcached.Pogcc -DHAVE_CONFIG_H -I. -I/usr/local/libevent//include -m64 -g -O2 -MT slabs.o -MD -MP -MF .deps/slabs.Tpo -c -o slabs.o slabs.cmv -f .deps/slabs.Tpo .deps/slabs.Pogcc -DHAVE_CONFIG_H -I. -I/usr/local/libevent//include -m64 -g -O2 -MT items.o -MD -MP -MF .deps/items.Tpo -c -o items.o items.cmv -f .deps/items.Tpo .deps/items.Pogcc -DHAVE_CONFIG_H -I. -I/usr/local/libevent//include -m64 -g -O2 -MT assoc.o -MD -MP-MF .deps/assoc.Tpo -c -o assoc.o assoc.cmv -f .deps/assoc.Tpo .deps/assoc.Pogcc -DHAVE_CONFIG_H -I. -I/usr/local/libevent//include -m64 -g -O2 -MT thread.o -MD -MP -MF .deps/thread.Tpo -c -o thread.o thread.cthread.c: In function ‘worker_libevent’:thread.c:324: warning: cast to pointer from integer of different sizemv -f .deps/thread.Tpo .deps/thread.Pogcc -DHAVE_CONFIG_H -I. -I/usr/local/libevent//include -m64 -g -O2 -MT stats.o -MD -MP -MF .deps/stats.Tpo -c -o stats.o stats.cmv -f .deps/stats.Tpo .deps/stats.Pogcc -m64 -g -O2 -L/usr/local/libevent//lib -o memcached-debug memcached.o slabs.o items.o assoc.o thread.o stats.o -leventmake[2]: Leaving directory `/home/soft/memcached-1.2.6'make[1]: Leaving directory `/home/soft/memcached-1.2.6'出现下面错误提示,可能是因为libevent版本不匹配,换成libevent-1.4.*版本试试。
Memcached命令行用法

Memcache 的命令行用法1、启动Memcache 常用参数memcached 1.4.3 -p <num> -U <num> 设置端口号(默认不设置为: 11211) UDP 监听端口(默认: 11211, 0 时关闭) -l <ip_addr> 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1 就只能本机访问) -d 独立进程运行-u <username> 绑定使用指定用于运行进程<username> -m <num> -P <file> 如:在linux 下:./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121 在window 下:d:\App_Serv\memcached\memcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500 在windows 下注册为服务后运行:sc.exe create jb-Memcached binpath= “d:\App_Serv\memcached\memcached.exe -d RunService -p 11211 -m 500〃start= auto net start jb-Memcached 允许最大内存用量,单位M (默认: 64 MB) 将PID 写入文件<file>,这样可以使得后边进行快速进程终止, 需要与-d 一起使用2、连接:telnet 127.0.0.1 11211 不要说不会用这个?3、写入memcache <command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n a) <command name> 可以是”set”, “add”, “replace”。
memcached告警指标

memcached告警指标Memcached 是一种常用的开源内存对象缓存系统,广泛应用于大型分布式系统中,能够有效提高系统的性能和响应速度。
然而,由于其本身的特性,Memcached 在某些情况下也存在一些潜在的问题,如内存消耗、吞吐量、平均响应时间等。
为了及时发现和解决这些问题,需要对Memcached 进行合理的监控和告警。
下面将介绍一些常见的Memcached告警指标和如何通过监控来实现。
1. 内存消耗:Memcached 主要使用内存作为缓存存储介质,因此内存消耗是一个重要的指标。
如果缓存中的数据量超过可用内存限制,会导致系统性能下降或崩溃。
因此,监控Memcached 的内存消耗是非常必要的。
可以通过监控以下指标来判断内存消耗是否正常:- curr_items:当前数据库中的数据项数目。
- bytes:缓存中当前使用的字节数。
- limit_maxbytes:缓存可用的最大字节数。
告警阈值可以根据实际情况设置,一般可以设置为缓存可用内存的百分比,比如80%。
2. 平均响应时间:Memcached 提供了快速的读写操作,一般情况下响应时间应该较低。
如果平均响应时间过高,说明系统性能可能存在问题,导致用户请求的延迟增加。
可以通过监控以下指标来判断平均响应时间是否正常:- get命令的average(avg)响应时间- set命令的average(avg)响应时间- delete命令的average(avg)响应时间告警阈值可以根据实际情况设置,一般可以根据具体的SLA (Service Level Agreement)要求。
3. 吞吐量:Memcached 是一种高性能的缓存系统,吞吐量是衡量其性能的重要指标。
如果系统吞吐量下降,可能存在网络瓶颈、硬件故障或系统负载过高等问题。
可以通过监控以下指标来判断Memcached 的吞吐量是否正常:- cmd_get:从缓存中读取数据的请求数。
- cmd_set:向缓存中写入数据的请求数。
redis和memcached选择,对比分析

redis和memcached选择,对⽐分析memcache和redis是互联⽹分层架构中,最常⽤的KV缓存。
不少同学在选型的时候会纠结,到底是选择memcache还是redis?memcache提供的功能是redis提供的功能的⼦集,不⽤想太多,选redis准没错?redis倾向:复杂的数据结构:value是哈希,列表,集合,有序集合这类复杂的数据结构时,会选择redis,因为mc⽆法满⾜这些需求。
⽤户订单列表,⽤户消息,帖⼦评论列表等。
持久化: mc⽆法满⾜持久化的需求,只得选择redis。
但是千万不要把redis真的做数据库⽤a. redis的定期快照不能保证数据不丢失b.redis的AOF会降低效率,并且不能⽀持太⼤的数据量c.不要期望redis做固化存储会⽐mysql做得好,不同的⼯具做各⾃擅长的事情d.redis挂掉重启后能够快速恢复热数据,但是如果着期间有数据修改,可能导致数据不⼀致,因此,只读场景,或者允许⼀些不⼀致的业务场景,可以尝试开启redis的固化功能⾃带⾼可⽤集群: redis⾃⾝⽀持集群,实现主从读写分离功能,官⽅也提供sentinal哨兵的集群管理⼯具,实现主从监控,故障转移,memcached实现集群需要⼆次开发了但是很多时候需要考虑,真的需要⾼可⽤么?缓存很多时候是运⾏cache miss的,cache挂了可以读db的存储的内容⽐较⼤: macache 单个value最⼤存储 1M,超过1M只能⽤redis了。
注意:纯的k-v ⽽且数据量特别⼤,并发也很⼤或许使⽤memcache更合适a.内存分配:memcache使⽤预分配内存池的烦事管理内存,更节省内存分配时间,redis使⽤临时申请的⽅式,kennel导致碎⽚。
对⽐看memcache更快⼀点b.memcache把所有的数据存储在物理内存⾥。
redis有⾃⼰的VM机制,理论上能够存储⽐物理内存更多的数据,当数据超量时,会引发swap,把冷数据刷到磁盘上。
常见缓存方案

常见缓存方案缓存是提高系统性能的重要手段之一,通过预先加载数据或计算结果,可以减少系统对繁重和耗时的操作的依赖。
在现代计算机系统中,有许多常见的缓存方案可供选择。
本文将讨论一些常见的缓存方案,包括内存缓存、数据库缓存和分布式缓存。
一、内存缓存内存缓存是最常见的缓存方案之一,它利用系统的内存资源来存储经常使用的数据。
通过将数据存储在内存中,可以大大提高访问速度,从而加快系统的响应时间。
内存缓存一般使用键值对的方式存储数据,通过键来快速查找和获取对应的值。
常见的内存缓存实现包括Memcached和Redis。
1. MemcachedMemcached是一个高性能的内存对象缓存系统,它可以用来存储任意类型的数据。
Memcached将数据存储在内存中,并使用哈希表来快速查找数据。
它支持分布式架构,可以在多台服务器上部署,实现数据的分布式存储。
由于其高效的性能和可扩展性,Memcached被广泛应用于大规模网站和应用程序中。
2. RedisRedis是一个开源的内存数据结构存储系统,它支持多种数据类型,包括字符串、哈希、列表和有序集合等。
Redis也是基于键值对的存储方式,并提供了丰富的命令集合来操作数据。
与Memcached相比,Redis 具有更丰富的功能,例如支持持久化、事务和发布订阅等特性。
因此,Redis在许多场景下被用作高性能缓存解决方案。
二、数据库缓存数据库缓存是指在应用程序和数据库之间增加一个中间层,用来缓存数据库查询结果。
通过将热数据存储在数据库缓存中,可以大大减少对数据库的访问次数,提高系统的响应速度和并发能力。
常见的数据库缓存实现包括Query Cache和第三方缓存组件。
1. Query CacheQuery Cache是MySQL数据库自带的缓存功能,它可以缓存查询语句的结果集。
当应用程序执行相同的查询语句时,MySQL会首先检查Query Cache中是否存在该查询的缓存结果,如果存在则直接返回缓存结果,而不会再次执行查询。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、Memcached1.1、memcached简介Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web 应用以减轻数据库负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
Memcached基于一个存储键/值对的hashmap。
其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。
用于提升LiveJournal . com访问速度的。
LJ每秒动态页面访问量几千次,用户700万。
Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
1.2、Memcached是如何工作的Memcached的神奇来自两阶段哈希(two-stage hash)。
Memcached就像一个巨大的、存储了很多<key,value>对的哈希表。
通过key,可以存储或查询任意的数据。
客户端可以把数据存储在多台memcached上。
当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)。
举个列子,假设有3个客户端1, 2, 3,3台memcached A, B, C:Client 1想把数据”tuletech”以key “foo”存储。
Client 1首先参考节点列表(A, B, C),计算key “foo”的哈希值,假设memcached B被选中。
接着,Client 1直接connect 到memcached B,通过key “foo”把数据”tuletech”存储进去。
Client 2使用与Client 1相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的memcached列表(A, B, C)。
于是,经过相同的哈希计算(阶段一),Client 2计算出key “foo”在memcached B上,然后它直接请求memcached B,得到数据”tuletech”。
1.3、memcached提供的操作Memcached的客户端api接口提供了如下的方法存储和获取缓存数据,并且这节方法在不同的客户端都是一致的:get(key):读取数据从缓存中,如果数据存在的话返回值,否则返回Null,nil,underfined。
Set(key,value [,expiry]):写入缓存数据value,如果key已经存在了就更新value 值,否则就增加一个新的key/value对,如果设定了expiry值,超过设定expiry 时间后键值对就失效,时间单位是秒。
Add(key,value, [,expiry]):添加键值对到缓存如果key不存在的话。
Replace(key ,value [,expiry]:替换已经存在的键值对。
Deleted(key [, time]):从缓存中删除键,如果提供一个时间,在这段时间内这个键是处于阻塞状态。
二、安装部署Memcached服务2.1、安装libevent库memcached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接的,所以它实际的并发能力是有限制的。
在保守情况下memcached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。
关于libevent可以参考相关文档。
memcachd有自己的内存分配算法和管理方式,它和共享内存没有关系,也没有共享内存的限制,通常情况下,每个memcached进程可以管理2GB的内存空间,如果需要更多的空间,可以增加进程数。
libevent下载地址:/distfiles/libevent-2.0.16-stable.tar.gz# wget /distfiles/libevent-2.0.16-stable.tar.gz然后是正常步骤的解压安装:# tar zxvf lilbevent-2.0.16-stable.tar.gz# cd libevent-2.0.16-stable# ./configure –prefix = /usr/local/libvent-2.0.16-stable# make#make install测试libevent是否安装成功:# ls –al /usr/local/libevent-2.0.16-stable/lib | grep libevent修改配置文件把libevent库加入ld.so.conf文件# nano /etc/ld.so.conf 加入/usr/local/libevent-2.0.16-stable/lib运行ldconfig否则运行memcached会报错,提示找不到so文件2.2、安装memcached:memcached下载地址:/files/memcached-1.4.13.tar.gz# wget /files/memcached-1.4.13.tar.gz #tar memcached-1.4.13.tar.gz# cd memcached-1.4.13# ./configure# make &make install测试是否成功安装memcached:2.3、编译安装magent代理:magent是一款开源的memcached代理服务器软件,magent是解决memcached的单点故障的解决方案;magent的hash算法:magent采用的是:Consistent Hashing原理,Consistent Hashing如下所示:首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。
然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。
然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。
如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。
编译安装magent:# wget /files/magent-0.5.tar.gz# mkdir magent# cd magent/# tar zxvf magent-0.5.tar.gz# cd magent/# nano magent.c 加入如下宏定义:(# ifndef SSIZE_MAX# define SSIZE__MAX 32767# endif)否则编译会报错:未指定最大值magent.c:729: error: ‘SSIZE_MAX’ undeclared (first use in this function)#/sbin/ldconfig# sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile# make# cp magent /usr/bin/magent测试magent代理服务器是否安装成功:root@ubuntu:~# magentplease provide -s "ip:port" argumentmemcached agent v0.5 Build-Date: Feb 21 2012 16:39:44Usage:-h this message-u uid-g gid-p port, default is 11211. (0 to disable tcp support)-s ip:port, set memcached server ip and port-b ip:port, set backup memcached server ip and port-l ip, local bind ip address, default is 0.0.0.0-n number, set max connections, default is 4096-D don't go to background-k use ketama key allocation algorithm-f file, unix socket path to listen on. default is off-i number, set max keep alive connections for one memcached server, default is 20-v verbose三、memcached集群测试3.1、测试环境1.Memcached提供了很多客户端api,可供java,c,c++,python…的客户端的调用,在这里我们用python这门语法优雅功能强大的语言进行此次测试。
首先安装python lib库,运行如下命令:# sudo apt-get install python自动安装完成后,默认版本为2.7.2。
测试是否正确安装:接着安装python-memcached-latest.tar.gz.这是memcached的客户端api,安装好了之后直接用python操作调用memcached。
下载地址:ftp:///pub/python-memcached/python-memcached-latest.tar.gz 安装如下:# tar –zxvf python-memcached-latest.tar.gz# cd python-memcached-latest# python setup.py install测试安装是否成功:若import memcache没有报错则导入无误。
2.memcached环境已经部署完毕,接下来分别在四台虚拟linux服务器上运行测试任务:分别在四台台主机上启动配置相同的memcached服务:在主机192.168.1.108上启动magent代理服务器:其中-s代表主服务器,-b 192.168.1.111:11211为备份服务器。
我为此写了一个python客户端程序(Memcached.py)调用magent代理往三个主服务器写入和读取数据。
3.2、测试脚本源码'''Created on 2012-2-22@author: Administrator''''''multiprocess :current instance# Memcached –d –u root –m100 –l 192.168.1.108 –p 11211# Memcached –d –u root –m100 –l 192.168.1.109 –p 11211# Memcached –d –u root –m100 –l 192.168.1.110 –p 11211# Memcached –d –u root –m100 –l 192.168.1.111 –p 11211magent proxy# magent –u root –n 4096 –l 192.168.1.108 –p 11212 –s 192.168.1.108:11211 –s 192.168.1.109:11211 –s 192.168.1.101:11211 –b 192.168.1.111:11211'''if __name__ == '__main__':import memcachekey = Nonevalue = Nonem = []# 用代理节点实现数据写入和读取magent = memcache.Client(['192.168.1.108:11212'],debug = 1)for i in range(8): #测试向服务器写入8个数据key = 'key'+str(i)value = 'value'+str(i)magent.set(key,value)m.append(key)server_one = memcache.Client(['192.168.1.108:11211'],debug = 1print("server_one store list:")for keys in m:values =server_one.get(keys)print(values)server_two = memcache.Client(['192.168.1.109:11211'],debug = 1) print("server_two store list:")for keys in m:values = server_two.get(keys)print(values)server_three = memcache.Client(['192.168.1.110:11211'],debug = 1) print("server_three store list:")for keys in m:values = server_three.get(keys)print(values)back_up_server = memcache.Client(['192.168.1.111:11211'],debug = 1) print("back_up_server store list:")if back_up_server is not None:print "backup is not none"for keys in m:values = back_up_server.get(keys)print(values)运行程序:# python Memcache.pyserver_one store list:Nonevalue1Nonevalue4NoneNonevalue7server_two store list: value0Nonevalue2NoneNonevalue5NoneNoneserver_three store list: NoneNoneNonevalue3NoneNonevalue6Noneback_up_server store list: value0value1value2value3value4value6value73.3、测试结论测试结果和预期的一样,magent通过consistant hase算法根据key值的不同分别把value写入主服务器,如果备份服务器只有一个的话,把所以key_value映射到同一个备份服务器,相同的,我们可以启动几个备份服务器,这时候magent根据consistent hase 算法和写入主服务器一样的方式分别写入备份服务器。