memcache相关

合集下载

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是另一个开源的分布式缓存框架,用于构建高性能和高可靠性的应用程序。

memcache使用文档

memcache使用文档

Memcache使用指南一线天色天宇星辰概述Memcache 服务为您的应用程序提供了高性能的内存键值缓存,您可通过应用程序的多个实例访问该缓存。

Memcache 对于那些不需要数据库的永久性功能和事务功能的数据很有用,例如临时数据或从数据库复制到缓存以进行高速访问的数据。

Memcache API 与 Danga Interactive 开发的Memcached有类似的功能并兼容。

Memcache API 可通过以下方式让您提高应用程序的性能并减少数据库的负载:∙显著地减少数据库查询的次数。

∙减少使用率非常高的页面的数据库配额的使用。

∙缓存操作量巨大的查询和操作的结果。

∙让使用临时计数器成为可能。

通过使用 Memcache API,您可以为应用程序中的数据创建一致的缓存。

缓存可用于应用程序中的所有实例,而且数据只有通过内存压力(例如缓存中的数据过多)或开发人员设置的缓存政策才能清除。

可以在存储在缓存中的每个键-值对上设置缓存政策。

您可以清除所有缓存或针对每份数据设置缓存过期时间。

Client 类Memcache API 提供一个基于类的接口,以便与其他 Memcache API 兼容。

另请参阅提供相同功能的函数接口。

∙Client()∙实例方法:o set()o set_multi()o get()o get_multi()o delete()o delete_multi()o add()o add_multi()o replace()o replace_multi()o incr()o decr()o flush_all()o get_stats()∙class Client()∙与 Memcache 服务通信的客户端。

∙Client 实例有以下方法:∙set(key, value, time=0, min_compress_len=0)∙设置键的值,与先前缓存中的内容无关。

∙参数:∙key∙要设置的键。

memcached编译

memcached编译

memcached编译
要编译Memcached,首先你需要确保你的系统中安装了编译Memcached所需的依赖项。

通常情况下,你需要安装开发工具包和
相关的库文件。

接下来,你可以按照以下步骤进行编译:
1. 下载Memcached源代码,你可以从Memcached官方网站或者GitHub上获取Memcached的源代码。

下载后解压到你选择的目录中。

2. 进入解压后的Memcached目录,使用终端或命令行工具进入
解压后的Memcached目录。

3. 运行配置脚本,运行`./configure`命令来配置Memcached
的编译选项。

你可以使用`--help`参数来查看可用的配置选项。

例如,你可以指定安装路径等选项。

4. 编译,运行`make`命令来编译Memcached。

这将会生成可执
行文件。

5. 安装,运行`make install`命令来安装编译好的Memcached
可执行文件和相关的文件到系统中。

你可能需要使用`sudo`命令来
获取足够的权限进行安装。

完成上述步骤后,你就成功地编译并安装了Memcached。

你可以通过运行`memcached`命令来启动Memcached服务器。

记得查看Memcached的文档以获取更多详细的信息和配置选项。

希望这些步骤可以帮助你成功编译Memcached。

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。

.net memorycache的用法

.net memorycache的用法

.net memorycache的用法在.NET框架中,内存缓存是一个非常有用的工具,它可以帮助我们提高应用程序的性能和响应速度。

内存缓存通常用于存储常用的数据,以便在需要时快速检索,而无需进行昂贵的数据库查询或网络请求。

.NET框架提供了一个内置的内存缓存系统,称为MemoryCache。

一、MemoryCache简介MemoryCache是.NET Framework中的一个类,它提供了一个简单的内存存储解决方案,用于存储键值对。

MemoryCache使用堆内存来存储数据,因此它的大小通常受限于可用内存。

MemoryCache提供了一种简单的方法来缓存对象、集合和引用类型的数据。

1. 创建MemoryCache实例:要使用MemoryCache,首先需要创建一个MemoryCache实例。

可以使用以下代码创建一个新的MemoryCache 实例:```csharpMemoryCache cache = new MemoryCache();```2. 添加数据到缓存:可以使用Cache.Add方法将数据添加到缓存中。

此方法接受三个参数:键(Key)、值(Value)和一个生存期(Item life time)。

以下是一个示例代码片段,演示如何将数据添加到缓存中:```csharpstring key = "myKey";int value = 100; // 要缓存的数据TimeSpan timeout = TimeSpan.FromMinutes(5); // 数据生存期为5分钟cache.Add(key, value, timeout);```3. 从缓存中检索数据:要从缓存中检索数据,可以使用Cache.Get方法。

此方法接受一个键作为参数,并返回与该键关联的值。

以下是一个示例代码片段,演示如何从缓存中检索数据:```csharpstring key = "myKey";object retrievedValue = cache.Get(key);int retrievedInt = (int)retrievedValue;```4. 清除缓存中的数据:可以使用Cache.Remove方法清除缓存中的数据。

天翼云分布式缓存服务Memcache介绍

天翼云分布式缓存服务Memcache介绍

天翼云分布式缓存服务Memcache介绍MemCache是一套高性能分布式的高速缓存系统,用于动态Web应用以减轻数据库负载,由LiveJournal的Brad Fitzpatrick开发。

目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。

这是一套开放源代码软件,以BSD license授权发布。

MemCache通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。

MemCache是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。

MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

MemCache工作原理MemCache采用C/S架构,在服务器端启动后,以守护程序的方式,监听客户端的请求。

启动时可以指定监听的IP(服务器的内网ip/外网ip)、端口号(所以做分布式测试时,一台服务器上可以启动多个不同端口号的MemCached进程)、使用的内存大小等关键参数。

一旦启动,服务就会一直处于可用状态。

为了提高性能,MemCache缓存的数据全部存储在MemCache 管理的内存中,所以重启服务器之后缓存数据会清空,不支持持久化。

MemCache内存管理内存结构每个slab_class里面包含若干个slab。

每个slab里面包含若干个page,page的默认大小是1M。

每个page里面包含若干个chunk,chunk是数据的实际存放单位,每个slab 里面的chunk大小相同内存分配方式Memcached使用slab allocation机制来分配和管理内存。

php的Memcache方法介绍及应用实例

php的Memcache方法介绍及应用实例

使用Memcache在PHP中调试方法的介绍及应用如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce。

首先我们必须要安装,接下来如何使用memcache,在这里介绍下在linux下安装和windows下安装如下及配置:一、linux下的Memcache安装:1.下载memcache的linux版本,注意memcached 用libevent 来作事件驱动,所以要先安装有libevent。

2. 安装pecl::memcache。

用pecl 命令行工具安装:pecl install memcache或直接从源码安装:phpize./configuremakemake install二、Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入‘c:\memcached\memcached.exe -d install’安装3. 再输入:‘c:\memcached\memcached.exe -d start’启动。

NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。

这样服务器端已经安装完毕了。

4.下载/ext.php/php_memcache.dll,请自己查找对应的php版本的文件5. 在C:\winnt\php.ini 加入一行‘extension=php_memcache.dll’6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!三、memcached的基本设置:-p 监听的端口-l 连接的IP地址, 默认是本机-d start 启动memcached服务-d restart 重起memcached服务-d stop|shutdown 关闭正在运行的memcached服务-d install 安装memcached服务-d uninstall 卸载memcached服务-u 以的身份运行(仅在以root运行的时候有效)-m 最大内存使用,单位MB。

memcache 用法

memcache 用法

memcache 用法
Memcache 是分布式缓存系统,主要服务于动态Web 应用,以减轻数据库负载。

其运作机理是基于存储键值对的数据结构(在内存中建立一个巨大的hash表,可以存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等)。

以下是Memcache的使用方法:1.添加一个键值对:使用 add 方法,例如:$mem->add('test','123',0,60);。

其中,'test' 是键,'123' 是值,0 是过期时间(单位:秒),60 是缓存时间(单位:秒)。

2.获取一个键的值:使用 get 方法,例如:$mem->get('test');。

这将返回键'test' 的值。

3.覆写已存在的键值对:使用 replace 方法,例如:$mem->replace('test','456',0,60);。

这将会替换键'test' 的值,新的值为'456'。

4.删除一个键值对:使用 delete 方法,例如:$mem->delete('test',60);。

这将删除键'test' 及其对应的值。

请注意,以上只是Memcache 的基础使用方式,实际应用中可能涉及更多复杂的操作和设置。

如果您需要更深入的了解或使用,建议查阅Memcache 的官方文档或相关教
程。

memorycache 用法

memorycache 用法

memorycache 用法[memorycache 用法]本文将详细介绍memorycache 的用法和操作步骤,诸如何创建、读写及删除缓存等等。

1. 什么是memorycache?MemoryCache 是 .NET Framework 中的一个缓存类,它提供了轻量级的内存缓存功能。

通过MemoryCache,我们可以将数据保存在内存中,以提高应用程序的性能和响应速度。

MemoryCache 是线程安全的,可以在多个线程中读取和写入缓存数据。

2. 如何创建MemoryCache?要创建一个MemoryCache 实例,我们可以使用以下步骤:using System.Runtime.Caching;...MemoryCache memoryCache = MemoryCache.Default;这将创建一个名为"Default" 的MemoryCache 实例,它是全局静态实例,可以在应用程序中共享。

我们也可以创建自定义的MemoryCache 实例,方式如下:var cacheSettings = new NameValueCollection{{ "CacheMemoryLimitMegabytes", "200" }, 设置缓存限制为200MB { "PhysicalMemoryLimitPercentage", "50" } 设置缓存使用物理内存的百分比上限为50%};MemoryCache memoryCache = new MemoryCache("CustomCache", cacheSettings);这将创建一个名为"CustomCache" 的自定义MemoryCache 实例,我们可以根据需求调整缓存限制和使用内存的百分比上限。

3. 如何添加和读取缓存数据?下面是向MemoryCache 添加和读取缓存数据的基本步骤:string key = "CacheKey"; 缓存键string value = "CacheValue"; 缓存值添加缓存数据memoryCache.Add(key, value, DateTimeOffset.Now.AddMinutes(10));读取缓存数据object cachedValue = memoryCache.Get(key);在添加缓存数据时,我们需要指定一个缓存键、缓存值以及过期时间。

常用内存数据库介绍

常用内存数据库介绍

常用内存数据库介绍随着互联网和大数据的快速发展,传统的磁盘数据库在处理大规模数据时面临着性能瓶颈。

相比之下,内存数据库因其高性能、低延迟和高并发性能等优势,正在成为许多企业和组织中的首选。

本文将介绍几种常用的内存数据库及其特点。

1. RedisRedis是一个开源的内存数据库,它支持键值存储模型,并提供了丰富的数据结构,如字符串、哈希表、列表、集合和有序集合等。

Redis以其快速的读写速度、持久化能力和高扩展性而闻名。

它可以通过持久化机制将数据保存到磁盘,以克服内存大小的限制。

此外,Redis还支持发布/订阅和事务等功能,使其成为构建缓存、会话管理、消息队列和实时分析等应用的理想选择。

2. MemcachedMemcached是一个开源的高性能分布式内存对象缓存系统。

它可以将数据存储在内存中,并提供简单、快速的键值存储访问接口。

Memcached使用键值对的方式存储数据,支持多线程并发访问,可以通过增加服务器的数量来扩展性能。

在互联网应用中,Memcached通常用于减轻数据库的负载,提高应用性能。

3. Apache IgniteApache Ignite是一个内存计算平台,它提供了分布式的内存数据库、缓存和计算引擎。

Ignite将数据存储在内存中,以实现极高的读写性能和低延迟。

它支持多种数据模型,如键值存储、关系型存储和对象存储,可以处理大规模数据和复杂查询。

此外,Ignite还提供了分布式查询、事务处理和机器学习等功能,使其成为构建实时分析、推荐系统和流式处理等应用的首选。

4. AerospikeAerospike是一个高性能的内存和闪存数据库,它专注于处理大规模的实时数据。

Aerospike使用内存和闪存的组合存储,可以实现低延迟的读写操作。

它支持键值存储和部分索引,可以处理高并发访问和大规模数据集。

Aerospike还提供了数据持久化、自动故障恢复和可扩展性等功能,适用于处理实时广告、个性化推荐和物联网等场景。

Java memcache缓存实现for Windows

Java memcache缓存实现for Windows

Java memcache缓存实现for WindowsMemcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速LiveJournal 访问速度而开发的,后来被很多大型的网站采用。

Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。

目前memcached支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL和Protocol等语言客户端。

1、Windows 下安装memcache1. 下载memcache的windows稳定版,解压放某个盘下面,比如在d:\memcached2. 在终端(也即cmd命令界面)下输入'd:\memcached\memcached.exe -d install' 安装3. 再输入:'d:\memcached\memcached.exe -d start' 启动。

NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。

这样服务器端已经安装完毕了。

2、Memcached Java Client API详解Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemCachedClient?,关键类及方法整理说明如下。

·SockIOPool这个类用来创建管理客户端和服务器通讯连接池,客户端主要的工作包括数据通讯、服务器定位、hash码生成等都是由这个类完成的。

public static SockIOPool getInstance()·获得连接池的单态方法。

Memcached操作命令

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

如何在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是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

最初为了加速LiveJournal 访问速度而开发的,后来被很多大型的网站采用。

起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。

它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统,这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcached作者对分布式cache的理解和解决方案。

memcached完全可以用到其他地方比如分布式数据库,分布式计算等领域。

1、 memcached 协议理解memcache是为了加快/访问速度而诞生的一个项目。

它的官方主页是:/memcached/目前在网站开发中应用较少,主要的应用有:/memcached/users.bml在国内的网站开发中,还很少没见到有应用的,中文资料十分匮乏。

工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的。

但是目前主要用来缓存数据库的数据。

允许多个server通过网络形成一个大的hash,用户不必关心数据存放在哪,只调用相关接口就可。

存放在内存的数据通过LRU算法进行淘汰出内存。

同时可以通过删除和设置失效时间来淘汰存放在内存的数据。

2、 memcached 使用入门2.1 memcached的安装?<1>memcached服务的安装先检查linux内核版本,建议将memcached 安装在2.6以上。

因为memcached 需要用到libevent和epoll 。

memcached安装前首先确定你的服务器上面安装了libevent库,libevent下载地址(/~provos/libevent/)。

Memcache 1.2.0 源码分析报告

Memcache 1.2.0 源码分析报告

Memcache 1.2.0源码分析报告Kingkai/10.9.26概述Memcache在系统中扮演的角色往往是分布式Cache。

但两个主要的概念首先需要澄清:1.Memcache本身不支持分布式的流量分发,负载均衡等。

这些工作均是由php扩展,perl扩展等完成。

2.Memcache本身是一个单进程单线程的模块。

Memcache代码总量在3000行左右,思路清晰,设计精巧,是业余阅读的上等选择。

Memcache在日志,save/load方面的弱点可以通过二次开发来弥补。

Memcache在多线程方面,则不容易进行二次开发,那将破坏相当多的内部设计。

数据结构:Slab结构体意义typedef struct {unsigned int size; //该ID槽中的slab里item的大小unsigned int perslab; //一个slab里可以包含多少个itemvoid **slots; //指向空闲的item,空闲由于delete等操作造成unsigned int sl_total; //当前slot可以支持的最大空闲item数量unsigned int sl_curr; //当前空闲item下标,需要时可以直接获取,在add,set 等操作时优先采用空闲的itemvoid *end_page_ptr; //指向当前slab里下一个空闲的item,如果没有,则为0 unsigned int end_page_free; //当前slab里还剩余多少个itemunsigned int slabs; //当前这个ID槽中已经分配出去的slab数量void **slab_list; //指向已分配出的slab头指针unsigned int list_size; //slab_list可以支持的slab个数unsigned int killing; /* index+1 of dying slab, or zero if none */} slabclass_t;typedef struct _stritem {struct _stritem *next; //同一个slab ID中的下一个itemstruct _stritem *prev; //同一个slab ID中的上一个itemstruct _stritem *h_next; //同一个hash 桶中的下一个itemrel_time_t time; /* least recent access */rel_time_t exptime; //即最终使得该节点失效的时间点int nbytes; //value部分的大小unsigned short refcount; //被引用的计数unsigned char nsuffix; //nsuffix部分的大小unsigned char it_flags; //该节点当前的状态,如DELETED或LINKEDunsigned char slabs_clsid; //属于哪一个slab IDunsigned char nkey; //key部分的大小void * end[0]; //尾部填充/* then null-terminated key *//* then " flags length\r\n" (no terminating null) *//* then data with terminating \r\n (no terminating null; it's binary!) */} item;尾部填充宏:#define ITEM_key(item) ((char*)&((item)->end[0]))#define ITEM_suffix(item) ((char*) &((item)->end[0]) + (item)->nkey)#define ITEM_data(item) ((char*) &((item)->end[0]) + (item)->nkey + (item)->nsuffix)#define ITEM_ntotal(item) (sizeof(struct _stritem) + (item)->nkey + (item)->nsuffix + (item)->nbytes)内存管理:命令格式:可以支持的操作包括add,set,replace,get,delete等。

memc 原理

memc 原理

memc 原理Memcached是一种常用的内存缓存系统,其原理主要包括数据存储、缓存失效和并发控制三个方面。

一、数据存储Memcached将数据存储在内存中,以提高数据访问速度。

具体而言,它通过将数据分散存储在多个服务器节点上,实现了数据的分布式存储。

每个节点都有唯一的标识符,称为key,用于标识存储的数据。

当客户端需要获取数据时,它会向Memcached发送一个请求,包含所需数据的key。

Memcached根据这个key计算出数据所在的节点,并将数据从该节点返回给客户端。

这种分布式存储方式使得数据可以被高效地存储和访问。

二、缓存失效为了保证缓存数据的有效性,Memcached引入了缓存失效机制。

当数据发生变化时,应用程序负责通知Memcached进行缓存失效操作。

具体而言,应用程序在数据发生变化时,将相应的key发送给Memcached,告知其相应的缓存数据已过时。

Memcached接收到该信息后,会将相应的数据从缓存中删除,以保证下一次访问时能够获取到最新的数据。

这种缓存失效机制能够确保缓存数据与后端数据的一致性。

三、并发控制由于多个客户端可能同时对同一个数据进行读写操作,为了保证数据的一致性和并发性,Memcached引入了并发控制机制。

具体而言,当多个客户端同时请求同一份数据时,Memcached会使用一种称为CAS(Compare and Swap)的机制来实现并发控制。

CAS机制通过比较数据的版本号来判断数据是否被修改过,在修改数据时,如果版本号与当前版本号一致,则可以进行修改操作,否则需要重新获取最新的数据。

这样可以避免多个客户端同时修改同一份数据造成的冲突问题。

Memcached通过数据存储、缓存失效和并发控制三个方面的原理,实现了高效的内存缓存系统。

它将数据存储在内存中,以提高数据访问速度,并通过分布式存储的方式实现数据的高效存储和访问;通过缓存失效机制保证缓存数据的有效性,与后端数据的一致性;通过并发控制机制保证多个客户端对同一份数据的一致性和并发性。

Memcached命令行用法

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”。

memcache数据类型

memcache数据类型

memcache数据类型Memcache是一个开源、高性能、分布式的内存对象缓存系统。

它能够帮助开发者更快速、高效的处理大规模网站的数据访问。

Memcache支持多种数据类型,包括字符串、整数、布尔型、数组和对象等。

因此,在使用Memcache时,需要学会不同数据类型的存储和操作。

本文将围绕Memcache数据类型进行详细介绍。

一、字符串类型字符串是Memcache支持的最基本数据类型,使用起来非常简单。

可以通过set命令存储单个字符串,如下所示:```$memcache_obj->set("key1", "value1");```这样就将字符串"value1"存储在了"key1"的位置上。

通过get命令可以取出该字符串:```$value1 = $memcache_obj->get("key1")```二、整型类型Memcache还支持存储整型数据。

同样使用set和get命令,存储时将整型数据转化为字符串存储,取出时再将字符串转化为整型数据:```$memcache_obj->set("key2", 123);$value2 = $memcache_obj->get("key2")```三、布尔型类型布尔型数据在Memcache中同样可以存储。

但是,由于Memcache只支持字符串类型存储,因此布尔型数据需要转化为字符串类型后再进行存储。

例如,将true存储在"key3"的位置上:```$memcache_obj->set("key3", "true");```取出数据时,再将字符串类型转换为布尔型即可:```$value3 = ($memcache_obj->get("key3") == "true") ? true: false;```四、数组类型在Memcache中,存储数组类型数据比较复杂。

memcachedclient 默认时间单位

memcachedclient 默认时间单位

memcachedclient 默认时间单位MemcachedClient是一个用于与Memcached服务器进行交互的Java 客户端库。

在Memcached中,存储的数据可以设置过期时间,以控制数据在服务器上的存储时间。

默认情况下,MemcachedClient使用的时间单位是秒。

在使用MemcachedClient进行数据存储时,可以通过以下方法指定数据的过期时间:1. set方法:使用set方法可以设置键值对,并指定过期时间。

过期时间的单位是秒。

```javaMemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211));client.set("key", 3600, "value");```上述代码中,将键为"key"、值为"value"的数据存储到Memcached服务器,并设置过期时间为3600秒(即1小时)。

2. add方法和replace方法:add方法和replace方法也可以用于存储数据,并指定过期时间。

过期时间的单位同样是秒。

```javaMemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211));client.add("key", 3600, "value");client.replace("key", 3600, "new value");```上述代码中,add方法将在键值对不存在时存储数据,replace方法将在键值对存在时替换数据。

两种方法都可以指定过期时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分布式应用:
首先memcache 支持分布式,在客户端改造,可以更好的支持;分布式部署策略: key可以有规律的封装,和有规律的存储在不同的memcache服务器中,例如: 以user为主的网站来说,每个用户都有userid,可以按照固定的规律来读取和存取用户信息,用户id以1开头的用户信息,存储在第一台memcache服务器上,用户id以2开头的保存在第二台memache服务器上;
memcache是项目的名称;memcached是服务器端主程序的文件名;
2,memcache的使用
使用memcache的网站一般流量都比较大,为了缓解数据库压力,让memcache做为一个缓存区域,把部分的信息保存在内存中,在前端能够迅速的存取。焦点一般集中在如何分担数据库压力和分布式上,毕竟单台的memcache服务器的内存数是有限的。
1,memcache 是什么?
memcache是一个内存缓存技术的项目;
目前世界上有很多人在使用这个缓存项目,来构建大负载的网站,来分担数据库压力;
它可以应用任意多个链接,使用非阻塞的网络IO;
它的工作机制是在内存中开辟一块空间,然后建立一个hash table , memcached自己管理这个hash table。
尽量的去解决这些问题:
内网访问:
一般的服务器可以安装两块网卡,一块是外网,一块是内网的,让web服务器通过内网来访问memcache服务器,在memcache服务器启动的时候就监听内网访问的ip地址和端口,可以有效的阻止其它的非法访问;
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。
缺点: 数据不能时实展示,数据做了修 Nhomakorabea无法及时的展示出来,比且还有可能对内存占用很多;所以在set到memcache前的考虑select数据的多少的问题来配合部署memcache服务器;
3,memcache的安全性
memache服务器端是客户端直接链接开始操作的,没有任何的验证操作,并且服务器端memcached是root用户直接运行的,这样服务器直接暴露在外网上是比较危险的 ,并且服务器里可能存在一些未知bug和缓冲区溢出等情况,轻则数据信息泄漏,重则服务器被入侵,所以危险可以预见。
缺点就是要对userid进行判断,还的根据实际应用来设计。
减少数据库压力:
频繁的读写数据库,会导致数据库的性能大跌,eg:mysql会频繁的锁表;
mysql配置主从读写分离;主服务器负责write,delete,update 功能; 从服务器负责select,同时配置memcache,把对应的sql进行hash算法,计算一个hash(可以用md5或者sha)对应的key,去memache中查找对应的key值是否存在,如果不存在,说明还没有写入到memcache中,经sql提取的数据结果set到memcache中去,key就是sql的hash值,然后设置一个相应的失效时间,比如一个小时,一个小时的数据提取都从memcache中提取,这样可以有效的减少数据库的压力。
Memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接
设置防火墙:
防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网IP来访问Memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。
一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的Web服务器来访问我们Memcache服务器,同时阻止其他的访问。
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
相关文档
最新文档