memcached&redis性能测试

合集下载

8种缓存框架介绍

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 缓存技术介绍

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原理及实现

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参数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缓存

使用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工作原理
memcached是一款高性能的分布式内存缓存系统,主要用于减轻数据库负载,提高应用程序的性能。

其工作原理如下:
1. 客户端向memcached服务器发送请求,请求可以是获取或设置缓存数据。

2. 如果请求是获取缓存数据,memcached服务器首先检查是否有该数据的缓存副本,如果有,则返回该数据给客户端。

3. 如果请求是设置缓存数据,memcached服务器将数据存储到其内存中,并设置相应的索引。

4. 当memcached服务器的内存空间不足时,会采用LRU(最近最少使用)算法将一些旧的缓存数据删除,以腾出更多的内存空间。

5. 当多个memcached服务器组成一个分布式缓存集群时,客户端需要通过一致性哈希算法来选择具体的服务器,以保证缓存数据的一致性。

6. 当客户端对缓存数据进行修改时,需要同时更新所有memcached服务器上的缓存数据,以保证数据一致性。

总之,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的安装与使用

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是查询缓存的次数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 算法和写入主服务器一样的方式分别写入备份服务器。

相关文档
最新文档