memcached

阅读 / 问答 / 标签

无法连接memcached服务器

加个端口试试$mc->connect("127.0.0.1", 11211) or die("连接失败");

cmd如何进入memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。下载Windows的Server端安装Memcache Server(也可以不安装直接启动)1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:memcached2. 在CMD下输入 "c:memcachedmemcached.exe -d install" 安装.3. 再输入:"c:memcachedmemcached.exe -d start" 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。常用设置:-p <num> 监听的端口-l <ip_addr> 连接的IP地址, 默认是本机-d start 启动memcached服务-d restart 重起memcached服务-d stop|shutdown 关闭正在运行的memcached服务-d install 安装memcached服务-d uninstall 卸载memcached服务-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)-m <num> 最大内存使用,单位MB。默认64MB-M 内存耗尽时返回错误,而不是删除项-c <num> 最大同时连接数,默认是1024-f <factor> 块大小增长因子,默认是1.25-n <bytes> 最小分配空间,key+value+flags默认是48-h 显示帮助

memcached和ecache的区别

Ehcache是纯Java编写的,通信是通过RMI方式,适用于基于Java技术的项目。MemCached服务器端是C编写的,客户端有多个语言实现,如C,PHP(淘宝,sina等各大门户网站),Python(豆瓣网), Java(Xmemcached,spymemcached)。MemcaChed服务器端是使用文本或者二进制通信的。分布式:MemcaChed不完全。集群默认不实现,Ehcache支持。集群:MemcaChed可通过客户端实现。Ehcache支持(默认是异步同步)。持久化:MemcaChed可通过第三方应用实现,如sina研发的memcachedb,将cache的数据保存到[url=]Berkerly DB[/url]。Ehcache支持。持久化到本地硬盘,生成一个.data和.index文件。cache初始化时会自动查找这两个文件,将数据放入cache。效率:MemcaChed高。Ehcache高于Memcache。容灾:MemcaChed可通过客户端实现。Ehcache支持。缓存数据方式:MemcaChed缓存在MemCached server向系统申请的内存中。Ehcache可以缓存在内存(JVM中),也可以缓存在硬盘。通过CacheManager管理cache。多个CacheManager可配置在一个JVM内,CacheManager可管理多个cache。缓存过期移除策略:MemcaChed是LRU。Ehcache是LRU(默认),FIFO,LFU。缺点:MemcaChed功能不完善,相对于Ehcache效率低。Ehcache只适用于java体系,只能用java编写客户端。优点:MemcaChed简洁,灵活,所有支持socket的语言都能编写其客户端。Ehcache效率高。功能强大。

如何遍历memcached中的item

代码实现下面贴上一段php实现的遍历memcache数据的代码,其他语言可以参考代码自己实现。$mem = new Memcache;$host="192.168.1.2";//教学网 eduyo.com$port=11211;$mem->connect($host,$port);$items=$mem->getExtendedStats ("items");$items=$items["$host:$port"]["items"];$items_key=array_keys($items);for($i=1,$len=$items_key[0]+1;$i<$len;$i++){$str=$mem->getExtendedStats ("cachedump",$i,0);echo $i;print_r($str);$line=$str["$host:$port"];if( is_array($line) && count($line)>0){foreach($line as $key=>$value){echo $key."=>";print_r($mem->get($key));echo " ";}}}

memcached和redis的区别

1、性能都比较高,性能对我们来说应该都不是瓶颈总体来讲,TPS方面redis和memcache差不多2、操作的便利性memcache数据结构单一redis丰富一些,数据操作方面,redis更好一些,较少的网络IO次数3、内存空间的大小和数据量的大小redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)memcache可以修改最大可用内存,采用LRU算法4、可用性(单点问题)对于单点问题,redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡Memcache本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。5、可靠性(持久化)对于数据持久化和数据恢复,redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响memcache不支持,通常用在做缓存,提升性能;6、数据一致性(事务支持)Memcache 在并发场景下,用cas保证一致性redis事务支持比较弱,只能保证事务中的每个操作连续执行7、数据分析不支持8、应用场景redis:数据量较小的更性能操作和运算上memcache:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)

Memcached 可以缓存复杂对象吗?如datatable list 对象等?麻烦大家给一个链接,或者给我解答下!

可以,set之前设置对象可序列化。.net中:[Serializable]

centos的php7怎么安装memcached扩展

最近试了一下PHP7,在编译和支持MySQL上都遇到一些问题,相信不少同学也同样遇到,所以在这里聊一下这个过程。简单来讲编译PHP7只需要3步: 1、./buildconf --force 2、./configure 3、make && make install 1、3步,都没啥好管的,configure是编译的关键,涉及到PHP对一些库的支持,这里我们使用最小的支持,包括MySQL: curl gd fpm mysqlnd 之所以把curl和gd拿来说,目的是要搞清楚,这些三方库在编译PHP之前得安装好,可以直接使用yum安装在默认位置,也可以编译安装到指定位置,yum安装后,编译时不用指定库的安装位置,关于安装这些库,可以搜索一下有很多。下面看看基本的configure ./configure --prefix=/apps/php/php7.0 --enable-mbstring --with-curl --with-gd --with-config-file-path=/apps/php/php7.0/etc/ -- enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd PHP-FPM 关于fpm,相信不用多说,用它来支持PHP是一个比较好的选择,PHP5.3.3开始就已经内置了php-fpm,所以PHP7里当然也有,只需要--enable-fpm一下就可以了 php-fpm参数: --start 启动 --stop 强制终止 --quit 平滑终止 --restart 重启 --reload 重新平滑加载php的php.ini --logrotate 重新启用log文件 MySQL支持 重点讲一下这个,因为在它上面花了一点时间,不知道从哪一版本开始,PHP不在希望使用mysql的库来支持mysql的连接,启用了mysqlnd来支持,听说比libmysql要快很多,PHP5.x还可以使用libmysql,PHP7貌似已经取消了支持,编译都没有了--with-mysql参数,只支持--with-mysqli和--with-pdo-mysql,可以通过查看configure的参数来知道: ./configure -help grep mysql 可以看到,PHP希望使用mysqlnd来支持MySQL,所以参数可以这样写: --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd mysqlnd是不需要mysql支持的,所以不用先安装好mysql一样可以编译通过,启动php-fpm,查看一下phpinfo,能看到mysqlnd和pdo_mysql表示php已经可以支持mysql了(这里用的是pdo,mysqli同理) 几个问题 编译问题:cc: Internal error: Killed (program cc1) 这个问题是第一次遇到,原来是我的阿里云服务器关掉了swap,内存不够用,就报了这个错。 解决办法很简单,configure时加上--disable-fileinfo参数就可以了。 PHP报找不到mysql服务 正如它所说,确实没找到,看看phpinfo中pdo_mysql.default_socket项 mysql.sock在哪里,再看一下mysql.sock的真正位置,使用命令:ps -efgrep mysql查看: 明显不在一个位置上,我的正确位置是:/var/lib/mysql/mysql.sock 所以,修改一下php.ini,找到pdo_mysql.default_socket,改为你的实际位置,重启一下php-fpm,很不幸,虽然php.ini有这个配置,修改后,竟然不行,最好是编译的时候,指定mysql.socket的位置: --with-mysql-sock=/var/lib/mysql/mysql.sock 如果还不行,可以到/tmp目录下建立一个mysql.sock的软链接: ln -s /var/lib/mysql/mysql.sock mysql.sock 再重启一次php-fpm,相信已经正常运行了。如果需要PHP支持的库更多,可以再次编译,在configure时把需要的支持加上,就是--with-xxx这中,记得如果是三方的,要先安装这些库才行哦。

memcached 占用内存一般用多少啊 社区 Ruby China

memcached 占用内存一般用多少啊一般先设 256M 或 500M 看服务器内存情况,过段时间看都满了,而内存也足的话,就再提高一些。如果我的回答没帮助到您,请继续追问。。

memcached 占用内存一般用多少啊 社区 Ruby China

memcached 占用内存一般用多少啊一般先设 256M 或 500M 看服务器内存情况,过段时间看都满了,而内存也足的话,就再提高一些。如果我的回答没帮助到您,请继续追问。。

使用memcached后web.xml里配置的session-timeout不起作用了

检查下你的用户登录状态判定是否有读取memcached的缓存;确定下登录信息是存储在session还是cookie;确认下配置的位置是否正确,留意下你主项目是用的nginx?还是tomcat?项目在哪里,配置应该也在那个server下

Java 开发 2.0: 现实世界中的 Redis :Redis 如何在包含大量读取操作的应用程序中战胜 memcached

此外,我还讨论过较为常见的基于服务器的数据存储,比如 MongoDB 和 CouchDB。每个数据存储都有其优势和劣势,特别是当应用于特定领域时。 本期的 Java 开发 2.0 关注的是 Redis,一种轻量级键值对数据存储。多数 NoSQL 实现本质上都是键值对,但是 Redis 支持非常丰富的值集,其中包括字符串、列表、集以及散列。因此,Redis 通常被称为数据结构服务器。Redis 也以异常快速而闻名,这使得它成为某一特定类型使用案例的最优选择。 当我们想要了解一种新事物时,将其同熟知的事物进行比较可能会有所帮助,因此,我们将通过对比其与 memcached 的相似性以开启 Redis 探索之旅。接着我们将介绍 Redis 的主要功能,这些功能可以使其在某些应用场景可以胜过 memcached。最后我将向您展示如何将 Redis 作为一个传统数据存储用于模型对象。Redis 和 memcached Memcached 是一个众所周知的内存对象缓存系统,通过将目标键和值导入内存缓存运行。因此,Memcached 能回避读取磁盘时发生的 I/O 成本问题。在 Web 应用程序和数据库之间粘贴 memcached 时会产生更好的读取性能。因此,对于那些需要快速数据查询的应用程序,Memcached 是一个不错的选择。其中的一个例子为股票查询服务,需要另外访问数据库获取相对静态数据,如股票名称或价格信息。 MemcacheDB 将Redis 与 memcached 相比较并不公平,它与 MemcacheDB 相比要好的多,MemcacheDB 是一个分布式键值对存储系统,专为数据持久化而设计。MemcacheDB 与 Redis 较为相似,其新增优势可以使其轻松地与 memcached 实现的客户端进行通信。 但是memcached 也有其局限性,其中一个事实就是它所有的值均是简单的字符串。Redis 作为 memcached 的替代者,支持更加丰富的功能集。一些基准 (benchmarks) 也表明 Redis 的速度要比 memcached 快很多。Redis 提供的丰富数据类型使其可以在内存中存储更为复杂的数据,这是使用 memcached 无法实现的。同 memcached 不一样,Redis 可以持久化其数据。 Redis 解决了一个重大的缓存问题,而其丰富的功能集又为其找到了其他用途。由于 Redis 能够在磁盘上存储数据以及跨节点复制数据,因而可以作为数据仓库用于传统数据模式(也就是说,您可以使用 Redis,就像使用 RDBMS 一样)。Redis 还经常被用作队列系统。在本用例中,Redis 是备份和工作队列持久化存储(利用 Redis 的列表类型)的基础。GitHub 是以此种方法使用 Redis 的大规模基础架构示例准备好 Redis,立即开始! 要开始使用 Redis,您需要访问它,可以通过本地安装或者托管供应商来实现访问。如果您使用的 MAC,安装过程可能就不那么简单。如果您使用的是 Windows03,您需要先安装 Cygwin。如果您正在寻找一个托管供应商,Redis4You 拥有一个免费计划。不管您以何种方式访问,您都能够根据本文下列示例进行操作,但是我需要指出的是,使用一个托管供应商进行缓存可能并不是很好的缓存解决方案,因为网络延迟可能会抵消任何性能优势。 您需要通过命令与 Redis 进行交互,这就是说,这里没有 SQL 类查询语言。使用 Redis 工作非常类似于使用传统 map 数据结构,即所有的一切都拥有一个键和一个值,每个值都有多种与之关联的数据类型。每个数据类型都有其自己的命令集。例如,如果您计划使用简单数据类型,比如某种缓存模式,您可以使用命令 set 和 get。 您可以通过命令行 shell 与一个 Reids 实例进行交互。还有多个客户端实现,可以以编程方式与 Redis 进行交互。清单 1 展示了一个使用基础命令的简单命令行 shell 交互:清单1. 使用基础的 Redis 命令 redis 127.0.0.1:6379> set page registration OK redis 127.0.0.1:6379> keys * 1) "foo" 2) "page" redis 127.0.0.1:6379> get page "registration" 在这里,我通过 set 命令将键 "page" 与值 "registration" 相关联。接着,我发出 keys 命令(后缀 * 表示我想看到所有可用的实例键。keys 命令显示有一个 page 值和一个 foo,我可以通过 get 命令检索到与一个键关联的值。请记住,使用 get 检索到的值只能是一个字符串。如果一个键的值是一个列表,那么您必须使用一个特定列表的命令来检索列表元素。(注意,有可以查询值类型的命令)。Java 与 Jedis 集成 对于那些想要将 Redis 集成到 Java 应用程序的编程人员,Redis 团队建议使用一个名为 Jedis 的项目,Jedis 是一个轻量级库,可以将本地 Redis 命令映射到 Java 方法。例如 Jedis 可以获取并设置简单值,如清单 2 所示:清单2. Java 代码中的基础 Redis 命令 JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost"); Jedis jedis = pool.getResource(); jedis.set("foo", "bar"); String foobar = jedis.get("foo"); assert foobar.equals("bar"); pool.returnResource(jedis); pool.destroy(); 在清单 2 中,我配置了一个连接池并捕获连接,(与您在典型 JDBC 场景中的操作非常相似)然后我在清单的底部设置了返回操作。在连接池逻辑之间,我设置了值 "bar" 和键 "foo",这是我通过 get 命令检索到的。 与memcached 类似,Redis 允许您将过期(expiration)时间关联到一个值。因此我设置了这样一个值(比如,股票临时交易价格),最终将从 Redis 缓存中清除掉。如果我想在 Jedis 中设置一个过期时间,需要在发出 set 调用之后将其和一个过期时间关联。如清单 3 所示:清单3. Redis 值可以设置为终止 jedis.set("gone", "daddy, gone"); jedis.expire("gone", 10); String there = jedis.get("gone"); assert there.equals("daddy, gone"); Thread.sleep(4500); String notThere = jedis.get("gone"); assert notThere == null; 在清单 3 中,我使用了一个 expire 调用将 "gone" 的值设置为在 10 秒钟内终止。调用 Thread.sleep 之后,"gone" 的 get 调用会返回 null。Redis 中的数据类型 使用Redis 数据类型,比如列表和散列需要专用命令用法。例如,我可以通过为键附加值来创建列表。

memcached 的flushAll,是不是不清除数据

调用flush_all的时刻,数据所占的内存并不会被释放,但会被标记为过期,是不能再被取得了,你后来添加的值,会根据需要逐渐占用掉之前的空间,所以,实际应用场景里,不需要做特殊处理。另,不知道你用的client是什么,但memcached协议里flush_all操作是可以设置一个延迟的,你可以检查一下,确认是立即清除。

php的memcached分布式hash算法,如何解决分布不均?crc32这个算法没办法把key值均匀的分布出去

最近也正在看这个,可以参考这篇文章 http://charlee.li/memcached-004.html。参考文中的一段话:余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。 那就是当添加或移除服务器时,缓存重组的代价相当巨大。 添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器, 从而影响缓存的命中率。后面提到使用Consistent Hashing来最大限度地减小服务器增减时的缓存重新分布。文中提到的这个库的github地址 https://github.com/RJ/ketama

memcached-tool怎么安装

分2部分安装memcache的服务打开php的memcache的扩展你说的php_memcached.dll是php的扩展文件安装的话,先下载一个memcached.exe,打开cmd,将文件拖入cmd对话框后会自动出现其所在路径,后跟空格-h可以查看命令安装的话打-dinstall开启服务打-dstart如果不成功说明当前win7下的用户权限不够可以自制一个.bat文件,就是新建一个txt文件,把扩展名改成bat,编辑这个文件内容D:memcached.exe-dinstall保存,然后右键这个bat文件,选择管理员运行即可(注:memcached.exe放在英文目录的路径下)安装完后打开php扩展在php.ini中查找extension=php_memcached.dll如果没有在其他扩展下添加,不要加分号!将php_memcached.dll文件下载,放入php的ext目录下,重启整个服务,phpinfo()一下看看是否可以另注意:php_memcached.dll和memcached.exe两文件要兼容的.版本不同可能会不兼容!

php7无法安装memcache扩展 系统 centos-6.8 Nginx-1.10.2 PHP-7.0.13/5.6.28 memcached-1.4

  一 下载需要的源码包  所有安装包均选用最新的。  1. 下载libevent2.0.22  点击红色部分下载  下载memcached1.4.24  点击红色部分,下载最新版本  下载php扩展memcache3.0.8  选择需要的版本  二 安装详细步骤  首先将以上三个软件包下载到/tmp目录下  1. 安装libevent  cd /tmp #首先进入到该下载包的目录  tar zxvf libevent-2.0.22-stable.tar.gz #解压包cd libevent-2.0.22-stable #进入到解压的目录./configure --prefix=/usr/local #编译前配置,生成Makefile文件,路径可自行更改make; make install #编译+安装  1  测试是否安装成功  看到这些信息,表示成功啦  2. 安装memcached  cd /tmp #首先进入到该下载包的目录  tar zxvf memcached-1.4.24.tar.gz #解压包  cd memcached-1.4.24 #进入到解压的目录  ./configure –with-libevent=/usr/local #编译前配置,生成Makefile文件,路径必须与libevent中一致make; make install #编译+安装  1  测试是否安装成功  表示成功的信息  通过以上操作,就完成了memcached服务器的安装。特别的简单吧!现在就来搞一搞memcache的php扩展安装吧3. 安装扩展  cd /tmp #首先进入到该下载包的目录  tar zxvf memcache-3.0.8.tgz #解压包  cd memcache-3.0.8 #进入到解压的目录  /opt/lampp/bin/phpize #动态为php添加扩展。phpize路径可能不一致,请根据自己的实际情况./configure –enable-memcache –with-php-config=/opt/lampp/bin/php-config –with-zlib-dir #php-config请根据自己环境情况填写make; make install #编译+安装  1  完成以上步骤时,心情愉悦的点击了enter,准备喝口水潇洒一下,结果出现了一下错误(这也是我写这篇博客的原因,要不都懒得记录了)错误信息  看了下代码错误信息,说是zlib.h找不到。找不到就给他安一个嘛。真是的安装zlib  下载zlib-1.2.8.tar.gz  下载地址:http://www.zlib.net/  如图:  红色部分点击  cd /tmp #首先进入到该下载包的目录  tar zxvf zlib-1.2.8.tar.gz #解压包  cd zlib-1.2.8 #进入到解压的目录  ./configure --prefix=/usr/local/zlib  make; make install #编译+安装  1  再进行配置一下系统的文件,加载刚才编译安装的zlib生成的库文件vi /etc/ld.so.conf.d/zlib.conf  加入如下内容后保存退出: /usr/local/zlib/lib也就是添加安装目录的文件路径,库文件。ldconfig 运行之后就会加载安装的库文件了。  OK,到这一步了,此时,重新在memcache的php扩展中执行make;make install命令如果看到以下信息,表示成功:  扩展安装成功  三 配置php.ini文件  首先通过phpinfo函数,找到php.ini的路径,我的是:/opt/lampp/etc/php.ini在其中添加如下内容:  修改extension_dir路径:  extension_dir = “/opt/lampp/lib/php/extensions/no-debug-non-zts-20121212/”  extension=memcache.so  [Memcache]  memcache.allow_failover = 1  memcache.max_failover_attempts=20  memcache.chunk_size =8192  然后重新启动apache,再次通过phpinfo查看一下情况。如果有如下内容,表示配置成功:  信息  四 配置memcached服务器  启动memcached服务器  memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid参数说明:  -d选项是启动一个守护进程,  -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,-u是运行Memcache的用户,我这里是root,  -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址127.0.0.1,-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid2. 结束memcached进行  kill cat /tmp/memcached.pid  3. 检查memcached是否已经启动  看到绿色框中内容,就表示完成  五 测试php的memcache扩展  <?php  $mem = new Memcache;  $mem->connect("192.168.12.201", 13001);  $mem->set("key","This is a test!", 0, 60);$val = $mem->get("key");  echo $val;  ?>  写在后面:大家有兴趣可以将session改为使用memcache来保存。php自身使用文件的方式,不太好,动不动文件大小总和就上G了。

手机不支持memcached是什么意思

可能是不兼容的问题,建议咨询一下客服。Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。扩展资料:计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。

如何将PHP session信息缓存到memcached里面

在PHP的ini配置文件里面提供了[Session]相关配置,可以支持将信息存到文件或memcached服务器里面。由配置项session.save_handler = memcached决定。大多数场景,该session数据并不需要持久化,且为了提升网站性能,会选择将session信息缓存到memcached里面。需要修改php.ini配置文件:1、session段找到[Session]段落,修改存储引擎为:session.save_handler = memcached(注意是带d扩展)修改存储地址,即OCS访问地址为:session.save_path = “be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com:11211″(注意带d扩展,则前面不用加tcp://,不带d的扩展需要加)修改缓存到memcached的key的时间session.gc_maxlifetime = 1440(单位是秒,强烈建议必须设置一个合理时间,以保证OCS始终只缓存热点数据)2、memcached段在php.ini的全局段,建一个单独段落[memcached],然后在空白地方加入下面配置[memcached]memcached.use_sasl = Onmemcached.sess_binary = Onmemcached.sess_sasl_username = “your_ocs_name”memcached.sess_sasl_password = “your_ocs_password”memcached.sess_locking = Off举例:<?php$memc = new Memcached();$memc->setOption(Memcached::OPT_COMPRESSION, false);$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);$memc->addServer(“be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com”, 11211);$memc->setSaslAuthData(“your_ocs_name”, “your_ocs_password”);echo $memc->get(“memc.sess.key. ttrct9coa2q62r2sodlq4qf376″);/*注意这里的key是有前缀的,由php.ini中memcached.sess_prefix字段决定,默认值为“memc.sess.key.”。然后再拼接上面打出来的sessionid“ttrct9coa2q62r2sodlq4qf376”即可。*/?>该代码输出如下:ocs_key|s:13:”session_value”;即PHP SESSION已经成功写入OCS。

在php中memcached和利用文件缓存哪个效率更好

当然是memcached了,内存读写肯定是最快的。

memcached 和nosql 的关系,memcache属于nosql数据库吗?怎么形容他们的关系呢?

非关系型的数据库统称NoSQLmemcache是非关系型数据库里的一种,属于NoSQL就像mysql属性关系型数据库一样

memcached 连接 失败,是什么原因,有什么解决办法

1、没有开启memcached服务正解:/usr/bin/memcached -d -m 2048 -p 112112、注意port保持一致telnet 127.0.0.1 11211

memcached 连接 失败,是什么原因,有什么解决办法

把你的错误代码贴上来. 你确认连接的memcached服务端有权限?你安装了php的memcached扩展吗?

memcached 缓存在哪儿。。我实验成功了。但是我不知道他缓存在哪儿。求指点。

memcached缓存在memcached服务器上面了,按一定的格式存储起来,具体是什么格式我也不太清楚

memcached 可以设置数据永不过期吗

定期从DB里查询数据,再刷 到memcached里 这种方法有个缺点是, 有些业务的key可能是变化的,不确定的。 而且不好界定哪些数据是应该查询出来放到缓存中的,难以区分冷热数据。 2.当缓存取到为null时,加锁去查询DB

nodejs用memcached模块操作下边的这几个方法是怎么使用的,直接调用会报错,如memcached.version()

先安装:npm install memcachedvar Memcached = require("memcached");var memcached = new Memcached(Server locations, options);memcached.version()

memcached 连接 失败,是什么原因,有什么解决办法

: 1、没有开启memcached服务 正解:/usr/bin/memcached -d -m 2048 -p 11211 2、注意port保持一致 telnet 127.0.0.1 11211

如何更新MemcacheD Is Your Friend缓存

步骤如下:1、php安装Memcached插件。2、WordPress安装Memcached缓存插件(MemcacheD Is Your Friend)。3、部署Memcached内存缓存图形化界面监控页面。

windows 怎么安装libmemcached

二、安装步骤 1、解压到指定目录,如:C:Memcachedmemcached-win32-1.4.4-14。2、用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -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 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48-h 显示帮助 如:“memcached -d install -l 127.0.0.1 -m 1024 -c2048”。2、如果在安装时没有添加参数,可通过修改注册表信息进行设置,打开注册

memcached 连接 失败,是什么原因,有什么解决办法

以下可做参考:1、执行的命令telnet 127.0.0.1 112112、报错提示Trying 127.0.0.1...telnet: connect to address 127.0.0.1: Connection refusedtelnet: Unable to connect to remote host3、/usr/bin/memcached -hmemcached 1.4.13(正常显示了对应的版本)是什么原因导致不能连接到memcached服务呢,telnet的原因吗?iptables没打开11211端口已经找找到问题:1、没有开启memcached服务正解:/usr/bin/memcached -d -m 2048 -p 112112、注意port保持一致telnet 127.0.0.1 11211

linux怎么查看memcached安装目录

1.由于memcached依赖于libevent,因此需要安装libevent。由于linux系统可能默认已经安装libevent,执行命令:rpm -qa|grep libevent查看系统是否带有该安装软件,如果有执行命令:rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(由于系统自带的版本旧,忽略依赖删除)3. 安装libevent命令:tar zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure --prefix=/usr/local/libevent make make install至此libevent安装完毕;安装过程中出现:configure: error : no acceptable C compiler found in $PATH错误时是没有安装gcc,运行如下命令:yum install gcc* make*4. 安装memcached命令:tar zxvf memcached-1.4.2.tar.gz cd memcached-memcached-1.4.2 ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/makemake install 至此memcached安装完毕;5.当启动memcached时经常不能发现libevent.so;可以通过以下命令检查: 进入/usr/local/memcached/bin目录 LD_DEBUG=help./memcached -v LD_DEBUG=libs ./ memcached。

memcached 连接 失败,是什么原因,有什么解决办法

1、没有开启memcached服务正解:/usr/bin/memcached -d -m 2048 -p 112112、注意port保持一致telnet 127.0.0.1 11211

怎么查看memcached端口号?

1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211,这里 11211是memcached绑定的端口号。2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。stats :显示服务器信息、统计数据等。

Memcached真的过时了吗

这个其实没有什么过时不过时,都是依据你自己的需求和看法来选择。memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议。memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。memcached的API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料。memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。Memcached 的守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

Redis 和 Memcached 各有什么优缺点,主要的应用场景是什么样的

1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。 2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 3. Redis支持数据的备份,即master-slave模式的数据备份。 4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从 6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化) 7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复 以上参考:PHP程序员,雷雪松的个人博客。

ubuntu 怎样启动memcached 命令

当前项目中,linux下memcached的启动/结束的方式默认情况下memcached安装到/usr/local/bin下。进入安装目录,启动memcached:/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -u root获取运行状态:echo stats | nc localhost 11211(可以查看出pid) 或使用ps -ef|grep memcached 停止memcached:kill -9 pid (-9表示强制杀死,pid 为进程的进程标识符)-d 选项是启动一个守护进程,-m 是分配给Memcache使用的内存数量,单位是MB,这里是1024MB,默认是64MB-u 是运行Memcache的用户,这里是root-l 是监听的服务器IP地址,默认应该是本机-p 是设置Memcache监听的端口,默认是11211,最好是1024以上的端口-c 选项是最大运行的并发连接数,默认是1024,这里设置了10240,按照你服务器的负载量来设定-P 是设置保存Memcache的pid文件位置-h 打印帮助信息-v 输出警告和错误信息-vv 打印客户端的请求和返回信息ps -ef|grep memcached(命令说明) grep:功能说明:查找文件里符合条件的字符串。|:管道命令操作符ps(process status):功能说明:报告程序状况。连接到 memcached:telnet ip 端口,如telnet 192.168.100.11 11211stats查看状态,flush_all:清楚缓存

redis和memcached的区别

1、性能都比较高,性能对我们来说应该都不是瓶颈总体来讲,TPS方面redis和memcache差不多2、操作的便利性memcache数据结构单一redis丰富一些,数据操作方面,redis更好一些,较少的网络IO次数3、内存空间的大小和数据量的大小redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对keyvalue设置过期时间(类似memcache)memcache可以修改最大可用内存,采用LRU算法4、可用性(单点问题)对于单点问题,redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash机制。一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡Memcache本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。5、可靠性(持久化)对于数据持久化和数据恢复,redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响memcache不支持,通常用在做缓存,提升性能;6、数据一致性(事务支持)Memcache在并发场景下,用cas保证一致性redis事务支持比较弱,只能保证事务中的每个操作连续执行7、数据分析不支持8、应用场景redis:数据量较小的更性能操作和运算上memcache:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)

Redis和Memcached的区别

Redis与Memcached的区别传统MySQL+ Memcached架构遇到的问题  实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:  1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。  2.Memcached与MySQL数据库数据一致性问题。  3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。  4.跨机房cache同步问题。  众多NoSQL百花齐放,如何选择  最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题  1.少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。  2.海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。  3.这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。  4.Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。  面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。  Redis适用场景,如何正确的使用  前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢? 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。2 Redis支持数据的备份,即master-slave模式的数据备份。3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以 保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存 中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个 操作,直到子线程完成swap操作后才可以进行修改。使用Redis特有内存模型前后的情况对比:VM off: 300k keys, 4096 bytes values: 1.3G usedVM on: 300k keys, 4096 bytes values: 73M usedVM off: 1 million keys, 256 bytes values: 430.12M usedVM on: 1 million keys, 256 bytes values: 160.09M usedVM on: 1 million keys, values as large as you want, still: 160.09M used当 从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行 批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程 池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的。 补充的知识点:memcached和redis的比较1 网络IO模型  Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。(Memcached网络IO模型)  Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。  2.内存管理方面  Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除,原因可以参考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/  Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。  3.数据一致性问题  Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。  4.存储方式及其它方面  Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能  Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS  进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。  5.关于不同语言的客户端支持  在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一些,目前看在客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能等,对应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。  根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。  关于Redis的一些周边功能  Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。  总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。  总结:  1.Redis使用最佳方式是全部数据in-memory。  2.Redis更多场景是作为Memcached的替代者来使用。  3.当需要除key/value之外的更多数据类型支持时,使用Redis更合适。  4.当存储的数据不能被剔除时,使用Redis更合适。

如何在ubuntu 12.04上面为php5.6安装memcached及扩展

apt-get install memcached启动memcached服务端,使用了memcache用户来启动。memcached -m 64 -p 11211 -u memcache -l 127.0.0.1或者使用root用户来启动,都是可以的。memcached -d -l 127.0.0.1 -p 11211 -m 64 -u root将memcached服务端加入开机启动,ubuntu 12.04上需要打开/etc/init.d/rc.local来添加,这与centos的也不一样。vi /etc/init.d/rc.local /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1或者用root用户来启动。/usr/bin/memcached -d -l 127.0.0.1 -p 11211 -m 64 -u root安装memcached客户端客户端的安装分为安装libmemcached和php的memcached扩展。我们先安装libmemcached,切换目录。cd /usr/local/src/下载libmemcached包。考虑到是php5.6,它只能用php-memcached 2.2.0,为了兼容,所以只下载了libmemcached-1.0.18。其实,libmemcached已经有更新的版本了。wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz解压libmemcached-1.0.18。tar -zxf libmemcached-1.0.18.tar.gz切换目录到libmemcached-1.0.18。cd libmemcached-1.0.18开始编译安装。./configure make make install安装完成后,我们找一下memcached.h是在那个目录的,等下要用。find / -name memcached.h/usr/local/include/libmemcached/memcached.h/usr/local/include/libmemcached-1.0/memcached.h/usr/local/include/libmemcached-1.0/struct/memcached.h/usr/local/src/libmemcached-1.0.18/libmemcached/memcached.h/usr/local/src/libmemcached-1.0.18/libmemcached-1.0/memcached.h/usr/local/src/libmemcached-1.0.18/libmemcached-1.0/struct/memcached.h/usr/local/src/libmemcached-1.0.18/libtest/memcached.h切换目录。cd /usr/local/src/下载php的扩展memcached-2.2.0。如果你是php7,请使用memcached 3x。wget -c http://pecl.php.net/get/memcached-2.2.0.tgz解压memcached-2.2.0的包。tar -zxf memcached-2.2.0.tgz切换目录到memcached-2.2.0。cd memcached-2.2.0在此目录下执行phpize。如果不知道phpize在什么地方,可以用find命令来查找。/usr/local/php-5.6/bin/phpize还是在此目录执行./configure。--with-libmemcached-dir的目录就是你刚刚查找出来的memcached.h的目录,它是上面的第一条。include/libmemcached/是编译时会自动查找的目录,所以我们只需要填上/usr/local/就可以了。./configure --with-php-config=/usr/local/php-5.6/bin/php-config --with-libmemcached-dir=/usr/local/ --disable-memcached-sasl Build complete.Don"t forget to run "make test". Installing shared extensions: /usr/local/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/编译安装成功后,它提示在/usr/local/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/。我们可以用find来查找一下memcached.so。find / -name memcached.so/usr/local/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/memcached.so/usr/local/src/memcached-2.2.0/modules/memcached.so/usr/local/src/memcached-2.2.0/.libs/memcached.so用vi打开php.ini文件,如果你不知道使用的那个php.ini文件,可以使用phpinfo.php来查看。vi /home/wwwroot/lamp/etc/php.ini在php.ini末尾添加下面的代码。extension = /usr/local/php-5.6/lib/php/extensions/no-debug-non-zts-20131226/memcached.so重启php-fpmps aux|grep php-fpm kill -USR2 11473

windows怎么与linux中的memcached链接

当前项目中,linux下memcached的启动/结束的方式 默认情况下memcached安装到/usr/local/bin下。 进入安装目录,启动memcached:/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -u root 获取运行状态:echo stats nc localhost 11211(可以查看出pid) 或使用ps -efgrep memcached 停止memcached:kill -9 pid (-9表示强制杀死,pid 为进程的进程标识符) -d 选项是启动一个守护进程, -m 是分配给Memcache使用的内存数量,单位是MB,这里是1024MB,默认是64MB -u 是运行Memcache的用户,这里是root -l 是监听的服务器IP地址,默认应该是本机 -p 是设置Memcache监听的端口,默认是11211,最好是1024以上的端口 -c 选项是最大运行的并发连接数,默认是1024,这里设置了10240,按照你服务器的负载量来设定 -P 是设置保存Memcache的pid文件位置 -h 打印帮助信息 -v 输出警告和错误信息 -vv 打印客户端的请求和返回信息 ps -efgrep memcached(命令说明) grep:功能说明:查找文件里符合条件的字符串。 :管道命令操作符 ps(process status):功能说明:报告程序状况。 连接到 memcached: telnet ip 端口,如telnet 192.168.100.11 11211 stats查看状态,flush_all:清楚缓存 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT version 1.4.4 服务器版本 STAT pointer_size 64 操作系统字大小(这台服务器是64位的) STAT rusage_user 0.040000 进程累计用户时间 STAT rusage_system 0.260000 进程累计系统时间 STAT curr_connections 10 当前打开连接数 STAT total_connections 82 曾打开的连接总数 STAT connection_structures 13 服务器分配的连接结构数 STAT cmd_get 54 执行get命令总数 STAT cmd_set 34 执行set命令总数 STAT cmd_flush 3 指向flush_all命令总数 STAT get_hits 9 get命中次数 STAT get_misses 45 get未命中次数 STAT delete_misses 5 delete未命中次数 STAT delete_hits 1 delete命中次数 STAT incr_misses 0 incr未命中次数 STAT incr_hits 0 incr命中次数 STAT decr_misses 0 decr未命中次数 STAT decr_hits 0 decr命中次数 STAT cas_misses 0 cas未命中次数 STAT cas_hits 0 cas命中次数 STAT cas_badval 0 使用擦拭次数 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 15785 读取字节总数 STAT bytes_written 15222 写入字节总数 STAT limit_maxbytes 1048576 分配的内存数(字节) STAT accepting_conns 1 目前接受的链接数 STAT listen_disabled_num 0 STAT threads 4 线程数 STAT conn_yields 0 STAT bytes 0 存储item字节数 STAT curr_items 0 item个数 STAT total_items 34 item总数 STAT evictions 0 为获取空间删除item的总数 另外一个例子: 启动/结束 memcached -d -m 10 -u root -l 192.168.0.122 -p 11200 -c 256 -P /tmp/memcached.pid -d 选项是启动一个守护进程, -m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB -u 是运行Memcache的用户,这里是root -l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.122 -p 是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口 -c 选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定 -P 是设置保存Memcache的pid文件 kill `cat /tmp/memcached.pid` 获取运行状态 echo stats nc 192.168.1.123 11200 watch "echo stats nc 192.168.1.123 11200" (实时状态)

memcached不是可以存数组的吗

PHP的Memcached的驱动会自动进行serialize和unserialize,你所需要做的是:1. 选取一个合适key,比如 "POST_OF_USER_" . $userId2. 调用set函数把数据丢进去就行了示例代码:全选复制放进笔记// 0. 准备:$cache = new Memcache();$cache->connect("127.0.0.1", 11211); // 请替换为你的memcache服务器地址和端口$userId = // 你自己想办法获取...// 1. 构造cache KEY$cacheKey = "POSTS_OF_USER_" . $userId;// 2. 从缓存中获取数据$posts = $cache->get($cacheKey);if ($posts === false){// 3. 缓存失效了,加载数据$posts = // 你自己想办法加载数据// 4. 保存数据到缓存中$cache->set($cacheKey, $posts); }// OK,可以使用posts了

Memcached怎么读

美母卡取的

memcached 和 zend opcache有什么不同

memcached 是变量缓存,比如你可以把一些公共变量缓存到内存里面,不用反复从数据库读取opcache 是代码缓存, 比如一个页面有多个include文件, 他会给合并成一个文件作为缓存,减少服务器的io操作,加载更快

Redis和Memcached的区别

1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。3. Redis支持数据的备份,即master-slave模式的数据备份。4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复以上参考:PHP程序员,雷雪松的个人博客。

为什么有的时候从memcached中读取数据的时间超过了1秒

读取数据时间较长可能原因有:1)客户机到memcached服务器之间的网络拥塞2)memcached服务器当前满负荷工作,比如大并发访问memcached服务器导致memcached服务器的负载很重,从而延迟了响应时间如果持续出现这种情况的话,建议分析原因在哪里,如果是并发较大导致的,那么可以考虑增加memcached服务器的数据量将并发访问引导到不同的memcached服务器上从而减缓处理压力

php memcached使用getExtendedStats()报错方法不存在,memcache可以,为什么?请问有什么方法替代,求解

用 getStats()替换.

怎么查看memcached启动没

你的环境是什么?win下面:1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211,这里 11211是memcached绑定的端口号。2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。stats :显示服务器信息、统计数据等

linux 怎样 查看memcached是否安装成功

一、使用memcache top脚本memcache-top 是一个用 Perl 编写的命令行小工具,用来实时的获取 memcached 缓存服务器的详细信息,例如缓存命中率等。到官网下载脚本,放到用户目录,直接运行即可。/home/nihaoya/memcache-top INSTANCE USAGE HIT % CONN TIME EVICT/s READ/s WRITE/s10.50.11.5:11211 88.8% 69.6% 1123 1.9ms 0.3 13.1K 36.2K 10.50.11.5:11212 88.7% 69.6% 1175 0.6ms 0.3 12.4K 28.1K 10.50.11.5:11213 88.8% 69.4% 1148 0.7ms 0.0 16.6K 32.1K 10.50.12.5:11211 89.3% 81.5% 1460 0.7ms 0.3 17.7K 204.0K 10.50.12.5:11212 89.4% 69.3% 1174 0.6ms 1.0 28.9K 63.5K 10.50.12.5:11213 89.3% 69.4% 1158 0.7ms 0.7 166.3K 194.4K 10.50.15.5:11211 89.3% 71.8% 1472 0.8ms 0.0 37.3K 59.2K 10.50.15.5:11212 89.4% 69.3% 1143 0.7ms 0.7 44.9K 35.4K 10.50.15.5:11213 89.3% 84.5% 1371 0.7ms 0.7 49.0K 187.2K 10.50.9.90:11211 30.2% 76.3% 259 0.7ms 0.0 243 999 10.50.9.90:11212 19.2% 60.3% 261 0.7ms 0.0 40 801 10.50.9.90:11213 17.5% 16.9% 235 0.6ms 0.0 70 600 AVERAGE: 72.4% 67.3% 998 0.8ms 0.3 32.2K 70.2K TOTAL: 23.4GB 11.7K 9.2ms 4.0 386.4K 842.3K 二、使用telnet方式,只能查看某个节点的[nihaoya@SHANGH-39-DX-APP ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is "^]". stats STAT pid 22362 //memcache服务器的进程ID www.2cto.com STAT uptime 1469315 //服务器已经运行的秒数 STAT time 1339671194 //服务器当前的unix时间戳 STAT version 1.4.9 //memcache版本 STAT libevent 1.4.9-stable //libevent版本 STAT pointer_size 64 //当前操作系统的指针大小(32位系统一般是32bit,64就是64位操作系统) STAT rusage_user 3695.485200 //进程的累计用户时间 STAT rusage_system 14751.273465 //进程的累计系统时间 STAT curr_connections 69 //服务器当前存储的items数量 STAT total_connections 855430 //从服务器启动以后存储的items总数量 STAT connection_structures 74 //服务器分配的连接构造数 STAT reserved_fds 20 // STAT cmd_get 328806688 //get命令(获取)总请求次数 STAT cmd_set 75441133 //set命令(保存)总请求次数 www.2cto.com STAT cmd_flush 34 //flush命令请求次数 STAT cmd_touch 0 //touch命令请求次数 STAT get_hits 253547177 //总命中次数 STAT get_misses 75259511 //总未命中次数 STAT delete_misses 4 //delete命令未命中次数 STAT delete_hits 565730 //delete命令命中次数 STAT incr_misses 0 //incr命令未命中次数 STAT incr_hits 0 //incr命令命中次数 STAT decr_misses 0 //decr命令未命中次数 STAT decr_hits 0 //decr命令命中次数 STAT cas_misses 0 //cas命令未命中次数 STAT cas_hits 0 //cas命令命中次数 STAT cas_badval 0 //使用擦拭次数 STAT touch_hits 0 //touch命令未命中次数 STAT touch_misses 0 //touch命令命中次数 STAT auth_cmds 0 //认证命令处理的次数 STAT auth_errors 0 //认证失败数目 STAT bytes_read 545701515844 //总读取字节数(请求字节数) STAT bytes_written 1649639749866 //总发送字节数(结果字节数) STAT limit_maxbytes 2147483648 //分配给memcache的内存大小(字节) STAT accepting_conns 1 //服务器是否达到过最大连接(0/1) STAT listen_disabled_num 0 //失效的监听数 STAT threads 4 //当前线程数 STAT conn_yields 14 //连接操作主动放弃数目 STAT hash_power_level 16 // STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT expired_unfetched 30705763 STAT evicted_unfetched 0 STAT bytes 61380700 //当前存储占用的字节数 STAT curr_items 28786 //当前存储的数据总数 STAT total_items 75441133 //启动以来存储的数据总数 STAT evictions 0 //为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) STAT reclaimed 39957976 //已过期的数据条目来存储新数据的数目 END 退出:quit或者ctrl + ] 然后在按q就行了。 安装telenet方法 1、yum install telnet-server 服务端 2、yum install telnet 客户端 3、vi /etc/xinetd.d/telnet service telnet{ flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = yes}将disable项由yes改成no。 4、/etc/init.d/xinetd restart 其他方式: 前项目中,linux下memcached的启动/结束的方式 默认情况下memcached安装到/usr/local/bin下。 进入安装目录,启动memcached:/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -u root 获取运行状态:echo stats | nc localhost 11211(可以查看出pid) 或使用ps -ef|grep memcached 停止memcached:kill -9 pid (-9表示强制杀死,pid 为进程的进程标识符) -d 选项是启动一个守护进程, -m 是分配给Memcache使用的内存数量,单位是MB,这里是1024MB,默认是64MB -u 是运行Memcache的用户,这里是root -l 是监听的服务器IP地址,默认应该是本机-p 是设置Memcache监听的端口,默认是11211,最好是1024以上的端口 -c 选项是最大运行的并发连接数,默认是1024,这里设置了10240,按照你服务器的负载量来设定 -P 是设置保存Memcache的pid文件位置 -h 打印帮助信息 -v 输出警告和错误信息 -vv 打印客户端的请求和返回信息 ps -ef|grep memcached(命令说明) grep:功能说明:查找文件里符合条件的字符串。 |:管道命令操作符 ps(process status):功能说明:报告程序状况。连接到 memcached: telnet ip 端口,如telnet 192.168.100.11 11211 stats查看状态,flush_all:清楚缓存 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT version 1.4.4 服务器版本 STAT pointer_size 64 操作系统字大小(这台服务器是64位的)STAT rusage_user 0.040000 进程累计用户时间 STAT rusage_system 0.260000 进程累计系统时间 STAT curr_connections 10 当前打开连接数 STAT total_connections 82 曾打开的连接总数 STAT connection_structures 13 服务器分配的连接结构数STAT cmd_get 54 执行get命令总数 STAT cmd_set 34 执行set命令总数 STAT cmd_flush 3 指向flush_all命令总数 STAT get_hits 9 get命中次数 STAT get_misses 45 get未命中次数 STAT delete_misses 5 delete未命中次数 STAT delete_hits 1 delete命中次数 STAT incr_misses 0 incr未命中次数 STAT incr_hits 0 incr命中次数 STAT decr_misses 0 decr未命中次数 STAT decr_hits 0 decr命中次数STAT cas_misses 0 cas未命中次数STAT cas_hits 0 cas命中次数STAT cas_badval 0 使用擦拭次数 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 15785 读取字节总数 STAT bytes_written 15222 写入字节总数 STAT limit_maxbytes 1048576 分配的内存数(字节) STAT accepting_conns 1 目前接受的链接数 STAT listen_disabled_num 0 STAT threads 4 线程数 STAT conn_yields 0 STAT bytes 0 存储item字节数 STAT curr_items 0 item个数 STAT total_items 34 item总数 STAT evictions 0 为获取空间删除item的总数 另外一个例子:启动/结束 memcached -d -m 10 -u root -l 192.168.0.122 -p 11200 -c 256 -P /tmp/memcached.pid -d 选项是启动一个守护进程, -m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB -u 是运行Memcache的用户,这里是root -l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.122 -p 是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口 -c 选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定 -P 是设置保存Memcache的pid文件kill `cat /tmp/memcached.pid` 获取运行状态 echo stats | nc 192.168.1.123 11200 watch "echo stats | nc 192.168.1.123 11200" (实时状态)

如何用英语发音“Memcached”

The keen whistle sings; the mutinous ones

redis和memcached的区别

支持的类型不同,redis数据类型更多,或者叫更丰富。导致使用场景少。memcache原生不支持分布式,redis可以。memcache的发展不如redismemcache单key没有redis大。

memcached新建的服务启动不了,跪求原因及办法

要将memcached作为系统服务启动,需要在/etc/init.d/目录下新建一个脚本,名称为:memcached。内容如下:[plain] view plain copy #! /bin/bash # # memcached start/stop the memcached daemon # # chkconfig: 35 80 70 # description: memcached is a memory cache server. # prog="memcached" exec=/usr/local/memcached/bin/memcached lockfile=/var/lock/subsys/memcached # source function library. . /etc/rc.d/init.d/functions start() { if [ $UID -ne 0 ]; then echo "User has insufficient privilege." exit 4 fi [ -x $exec ] || exit 5 echo -n $"starting $prog: " daemon $exec -u root -d -P /var/run/memcached.pid retval=$? echo [ $retval -eq 0 ] && touch $lockfile } stop() { if [ $UID -ne 0 ]; then echo "User has insufficient privilege." exit 4 fi echo -n $"Stopping $prog: " if [ -n "`pidfileofproc $exec`" ]; then killproc $exec else failure $"stopping $prog" fi retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile } restart() { stop start } rh_status() { # run checks to determine if the service is running or use generic status status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in "start") rh_status_q && exit 0 $1 ;; "stop") rh_status_q || exit 0 $1 ;; "restart") rh_status_q || exit 7 $1 ;; "status") rh_status ;; *) echo $"Usage: $0 {start|stop|status|restart}" exit 2 ;; esac exit $? 此脚本使用了functions文件里的函数,因此需要将其加载进来。 因为要判断memcached服务的运行状态,所以在调用memcached程序时,传递了pid文件参数。因为在此脚本中判断运行状态以及停止memcached服务时,是使用pid文件来进行的。 由上面的脚本可以看出,提供了四个动作:start、stop、status、restart。memcached服务的启动 通过执行以下命令可以使memcached服务启动:[plain] view plain copy [root@rhl6 init.d]# service memcached start starting memcached: [ OK ] 或[plain] view plain copy [root@rhl6 init.d]# ./memcached start starting memcached: [ OK ] memcached服务开机启动 查看memcached服务是否在chkconfig管理列表:[plain] view plain copy [root@rhl6 init.d]# chkconfig --list memcached service memcached supports chkconfig, but is not referenced in any runlevel (run "chkconfig --add memcached") 由提示信息可以看出,memcached还没有加入chkconfig管理,将其加入chkconfig管理:[plain] view plain copy <p><pre class="plain" name="code">[root@rhl6 init.d]# chkconfig --add memcached 再次查看memcached服务被管理:[plain] view plain copy [root@rhl6 init.d]# chkconfig --list memcached memcached 0:off 1:off 2:off 3:on 4:off 5:on 6:off 可以看到,在运行级别3、5上,memcached服务已经设置为开机启动了。这个设置是在shell脚本中设置的(上面脚本第五行):[plain] view plain copy # chkconfig: 35 80 70 ufeffufeff

memcached哪一年发布的

版本发布2012年02月03日,Memcached 1.4.13 发布。2012年08月02日,Memcached 1.4.14 发布。2012年09月05日,Memcached 1.4.15 发布。2015年04月25日,Memcached 1.4.23发布。Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

linux怎么查看memcached安装目录

  1.由于memcached依赖于libevent,因此需要安装libevent。由于linux系统可能默认已经安装libevent,执行命令:rpm-qagreplibevent查看系统是否带有该安装软件,如果有执行命令:rpm-elibevent-1.4.13-4.el6.x86_64--nodeps(由于系统自带的版本旧,忽略依赖删除)3.安装libevent命令:tarzxvflibevent-2.0.21-stable.tar.gzcdlibevent-2.0.21-stable./configure--prefix=/usr/local/libeventmakemakeinstall至此libevent安装完毕;安装过程中出现:configure:error:noacceptableCcompilerfoundin$PATH错误时是没有安装gcc,运行如下命令:yuminstallgcc*make*4.安装memcached命令:tarzxvfmemcached-1.4.2.tar.gzcdmemcached-memcached-1.4.2./configure--prefix=/usr/local/memcached--with-libevent=/usr/local/libevent/makemakeinstall至此memcached安装完毕;5.当启动memcached时经常不能发现libevent.so;可以通过以下命令检查:进入/usr/local/memcached/bin目录LD_DEBUG=help./memcached-vLD_DEBUG=libs./memcached。

window查看memcached安装在哪个目录下

1、先下载安装包,下载完成后解压到指定目录,如:C:Memcachedmemcached-win32-1.4.4-14。2、用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。3、打开控制面板,打开服务,可以看到memcached已经在上面可,如果没有启动,则手动启动一下。4、 使用telnet命令 验证缓存服务器是否可用。开始什么都不显示,回车后输入命令 stats 查看统计信息,如下图,说明服务器运作正常。

memcached 连接 失败,是什么原因,有什么解决办法

1、没有开启memcached服务正解:/usr/bin/memcached -d -m 2048 -p 112112、注意port保持一致telnet 127.0.0.1 11211

如何查看Memcached运行状态

win下面:1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211,这里 11211是memcached绑定的端口号。2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。stats :显示服务器信息、统计数据等

memcached 可以设置数据永不过期吗

memcached允许用户设置数据的过期时间,那么memcached是如何管理过期数据的呢?原理很简单:首先通过hash表查找该数据,然后判断该数据是否过期。如果过期,那么就将数据删除,否则将数据交给用户。系统中有一个定时器事件。点击(此处)折叠或打开/* libevent uses a monotonic clock when available for event scheduling. Aside * from jitter, simply ticking our internal timer here is accurate enough. * Note that users who are setting explicit dates for expiration times *must* * ensure their clocks are correct before starting memcached. */static void clock_handler(const int fd, const short which, void *arg) { struct timeval t = {.tv_sec = 1, .tv_usec = 0}; static bool initialized = false; evtimer_set(&clockevent, clock_handler, 0); event_base_set(main_base, &clockevent); evtimer_add(&clockevent, &t);#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC) if (monotonic) { struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1) return; current_time = (rel_time_t) (ts.tv_sec - monotonic_start); return; }#endif { struct timeval tv; gettimeofday(&tv, NULL); current_time = (rel_time_t) (tv.tv_sec - process_started); }}可以看到事件驱动模型的魅力,大大简化了网络编程的难度。事件驱动libevent库编程模型需如下几步:1.为事件绑定处理函数2.将事件绑定到event_base中(一般一个thread对应一个event_base,可以向event_base上绑定很多事件)3.event_add(base,&timeout) 设置回调函数的最晚执行事件。

memcached 为什么读取很慢

如果是读10000条记录组成一个List,那么就需要10000次交互,通常Memcached客户端每次交互都是同步进行的,必需是上一条记录返回后才能读取下一条。这样几秒钟的时间是必需要花的,哪怕每条记录就1个字节也快不了。某些Memcached客户端实现支持批量读取,允许你一次读取多条记录,比如你可以一次1000条,分10次读取,这样会快得多。如果是一个包含10000个元素的List对象,只是对应Memcached的一条记录。那么,Memcached没有List这样的数据结构,对Memcached来说只是一个400K的数据而已,正常情况下最多几十毫秒。如果你尝试读取一个400k的数据块也是这么慢得话,那Memcached客户端通讯部分实现可能有问题,否则,可能是序列化/反序列化部分有问题(太慢)。

memcached 线程安全吗

安全的但是官方文档也明说了,你的机器必须支持多线程编程,否则还是用不了那个memcache的多线程模式You must have the POSIX thread functions (pthread_*) on your system in orderto use memcached"s multithreaded mode.同时,默认的线程数是4,还特别声明,你的线程数如果超过你的cpu数量,增加了发生内容操作死锁的情况的概率。会严重影响缓存效果。----总结说来,不会用多线程,或者机器不是那么牛,还是不要用啦,如果真有必要,你好好研究下官方的线程文件,别乱用导致更加严重的性能问题! 备注:linux的编译时候的那些乱七八糟的命令,其实就和我们在windows下安装tomcat的时候是不是安装相关文档和程序一样

php 一个网站需要用memcached!主要缓存什么内容? 那些该缓存? 应该注意什么?

memecached可以代替session缓存的东西,如果有的功能需要也可以去缓存,比如购物车信息,当然有的购物车也是要求是还存在数据库的,需要注意的是这个缓存在memcached出现问题down机的时候缓存的数据就会全部丢失,注意这点就好了,所以不要存很重要且不能丢失的信息就好了。

在linux中启动memcached出问题!

MemCache是高性能分布式内存对象缓存系统(将数据调用到内存中,然后在内存中读取,从而大大提高读取速度)Memcached安装与启动:安装memcached需要先安装libeventShell>tar zxvf libevent-1.4.14b-stable.tar.gz Shell>cd libevent-1.4.14b-stable Shell>./configure Shell>make && make install 安装memcachedShell>tar zxvf memcached-1.2.5.tar.tar Shell>cd memcached-1.2.5 Shell>./configure –prefix=/usr/local/memcached Shell>make && make install 启动memcachedShell>/usr/local/memcached/bin/memcached –p 11211 –d –u root –P /tmp/memcached.pid-P是表示使用TCP,默认端口为11211 -d表示后台启动一个守护进程(daemon) -u表示指定root用户启动,默认不能用root用户启动 -P表示进程的pid存放地点,此处“p”为大写“P” -l,后面跟IP地址,手工指定监听IP地址,默认所有IP都在监听 -m后面跟分配内存大小,以MB为单位,默认为64M -c最大运行并发连接数,默认为1024 -f 块大小增长因子,默认是1.25 -M 内存耗尽时返回错误,而不是删除项,即不用LRU算法

linux memcached 怎么使用

默认安装后php或者MySQL这样的使用插件调用

redis和memcached的区别

memcache 本身是一款分布式的高速缓存系统,以 key-value 的形式常驻内存,一般用来做网站或者数据库的缓存使用。特别是对以下场景非常适合用 memcache 来做缓存:1. 频繁访问的数据2. 安全性要求比较低的数据3. 更新比较频繁的小表(用户状态表、物品库存等)MySQL memcached api MySQL 5.6 —— 开始支持MySQL 5.6 把 memcache 功能以插件形式集成到 MySQL 数据库中,称为 memcached api。这样一来,memcache 的数据以 InnoDB 关系表的形式同步于磁盘,解决了 memcache 的几个问题:1. 解决了 memcache 的数据持久化的问题;2. 可以很方便的以 SQL 语句的形式直接访问 memcache 的数据;3. 不需要单独安装 memcache,安装 MySQL 即可使用。MySQL 5.7 —— 深入优化MySQL 5.7 对 memcached api 做了深入优化,官方数据显示使用 memcached api,在只读的场景中,QPS 提升到 100W。 MySQL 8.0 —— 新增特性MySQL 8.0 发布后,又在功能上给 memcached api 增加了两个新特性。1. 批量获取 KEY相比原来一次只能读取一个 Key 来讲,减少了客户端与 MySQL 服务端的数据交互次数。2. 可以对 KEY 进行 RANGE 操作可以直接类似于 select * from t1 where id between 10 and 20 这样的范围检索语句。

如何解决memcached连接数过高导致后续连接失败的问题

一、下载MemercachedForWindows二、安装步骤1、解压到指定目录,如:C:Memcachedmemcached-win32-1.4.4-14。2、用cmd打开命令窗口,转到解压的目录,输入“memcached.exe-dinstall”。3、打开控制面板,打开服务,可以看到memcached已经在上面可,如果没有启动,则手动启动一下。4、使用telnet命令验证缓存服务器是否可用。开始什么都不显示,回车后输入命令stats查看统计信息,说明服务器运作正常。三、参数介绍1、以上的安装和启动都是在默认环境下进行的,在安装时可设置如下参数:-p监听的端口-l连接的IP地址,默认是本机-dstart启动memcached服务-drestart重起memcached服务-dstop|shutdown关闭正在运行的memcached服务-dinstall安装memcached服务-duninstall卸载memcached服务-u以的身份运行(仅在以root运行的时候有效)-m最大内存使用,单位MB。默认64MB-M内存耗尽时返回错误,而不是删除项-c最大同时连接数,默认是1024-f块大小增长因子,默认是1.25-n最小分配空间,key+value+flags默认是48-h显示帮助如:“memcached-dinstall-l127.0.0.1-m1024-c2048”。2、如果在安装时没有添加参数,可通过修改注册表信息进行设置,打开注册表,找HKEY_LOCAL_MACHINESYSTEMCurr...

什么是memcached

memcached是一种高性能的内存式缓存系统,通过将数据存储在内存中减少读取数据库的次数

如何配置Memcached服务器

Windows下的Memcache安装1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:memcached2. 在终端(也即cmd命令界面)下输入 c:memcachedmemcached.exe -d install --安装memcached成为服务,这样才能正常运行,否则运行失败! 3. 再输入: c:memcachedmemcached.exe -d start --启动memcached的。 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。Linux下的安装:1.下载memcached和libevent,放到 /tmp 目录下# cd /tmp# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz2.先安装libevent:# tar zxvf libevent-1.2.tar.gz# cd libevent-1.2# ./configure –prefix=/usr# make# make install3.测试libevent是否安装成功:# ls -al /usr/lib | grep libeventlrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.lalrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.34.安装memcached,同时需要安装中指定libevent的安装位置:# cd /tmp# tar zxvf memcached-1.2.0.tar.gz# cd memcached-1.2.0# ./configure –with-libevent=/usr# make# make install如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。安装完成后会把memcached放到 /usr/local/bin/memcached ,5.测试是否成功安装memcached:# ls -al /usr/local/bin/mem*-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debugmemcached的基本设置:1.启动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,2.如果要结束Memcache进程,执行:# kill `cat /tmp/memcached.pid`也可以启动多个守护进程,不过端口不能重复。3.重启apache,service httpd restart java的客户端连接程序: 将java_memcached-release_1.6.zip解压后的目录中的java_memcached-release_2.0.jar文件复制到java项目的lib目录下。 package utils.cache;import java.util.Date;import com.danga.MemCached.MemCachedClient;import com.danga.MemCached.SockIOPool;/*** 使用memcached的缓存实用类.*/public class MemCached{ // 创建全局的唯一实例 protected static MemCachedClient mcc = new MemCachedClient(); protected static MemCached memCached = new MemCached(); // 设置与缓存服务器的连接池 static { // 服务器列表和其权重 String[] servers = {"127.0.0.1:11211"}; Integer[] weights = {3}; // 获取socke连接池的实例对象 SockIOPool sockIOPool = SockIOPool.getInstance(); // 设置服务器信息 sockIOPool.setServers( servers ); sockIOPool.setWeights( weights ); // 设置初始连接数、最小和最大连接数以及最大处理时间 sockIOPool.setInitConn( 5 ); sockIOPool.setMinConn( 5 ); sockIOPool.setMaxConn( 250 ); sockIOPool.setMaxIdle( 1000 * 60 * 60 * 6 ); // 设置主线程的睡眠时间 sockIOPool.setMaintSleep( 30 ); // 设置TCP的参数,连接超时等 sockIOPool.setNagle( false ); sockIOPool.setSocketTO( 3000 ); sockIOPool.setSocketConnectTO( 0 ); //sockIOPool.setFailover(bFailover); //sockIOPool.setAliveCheck(bAliveCheck); // 初始化连接池 sockIOPool.initialize(); // 压缩设置,超过指定大小(单位为K)的数据都会被压缩 if (memCachedClient == null) { mcc = new MemCachedClient(sPoolName); mcc.setCompressEnable(true); mcc.setCompressThreshold(4096); mcc.setPrimitiveAsString(true); } }/*<h3>基于Spring的配置,如下:</h3> <pre> <bean id="memCachedService" class="com.ms.memcached.MemCachedServiceImpl"> <constructor-arg index="0" value="${memcached.pool.name}" /> <constructor-arg index="1" value="${memcached.pool.servers}" /> <constructor-arg index="2" value="${memcached.pool.initConn}" /> <constructor-arg index="3" value="${memcached.pool.maxConn}" /> <constructor-arg index="4" value="${memcached.pool.minConn}" /> <constructor-arg index="5" value="${memcached.pool.socketTO}" /> <constructor-arg index="6" value="${memcached.pool.maintSleep}" /> <constructor-arg index="7" value="${memcached.pool.nagle}" /> <constructor-arg index="8" value="${memcached.pool.failover}" /> <constructor-arg index="9" value="${memcached.pool.aliveCheck}" /> </bean> </pre> <h3>利用com.MS.cache.properties来设置参数,如下:</h3> <pre> memcached.pool.name = MS memcached.pool.servers = 192.168.9.132:12000,192.168.9.133:12000 memcached.pool.initConn = 128 memcached.pool.maxConn = 1024 memcached.pool.minConn = 20 memcached.pool.socketTO = 3000 memcached.pool.maintSleep = 30 memcached.pool.nagle = false memcached.pool.failover = true memcached.pool.aliveCheck = true </pre>*/ /** * 保护型构造方法,不允许实例化! */ protected MemCached() { } /** * 获取唯一实例. */ public static MemCached getInstance() { return memCached; } /** * 添加一个指定的值到缓存中. * @param key * @param value */ //新增指定key的缓存内容,但不覆盖已存在的内容。 public boolean add(String key, Object value) { return mcc.add(key, value); } //expiry过期时间 public boolean add(String key, Object value, Date expiry) { return mcc.add(key, value, expiry); } //新增或覆盖指定Key的缓存内容 public boolean set(String key, Object value) { return mcc.set(key, value); } //lExpiry过期时间 public boolean set(String key, Object value, long lExpiry) { return mcc.set(key, value, new Date(lExpiry)); } //根据指定的Key获取缓存内容 public boolean get(String key) { return mcc.get(key); } //根据指定Key更新缓存内容 public boolean replace(String key, Object value) { return mcc.replace(key, value); } //lExpiry 指定的时间 public boolean replace(String key, Object value, long lExpiry) { return mcc.replace(key, value, new Date(lExpiry)); } //根据指定Key删除缓存内容 public boolean delete(String key, Object value) { return mcc.delete(key, value); } //根据指定Key在指定时间后删除缓存内容 public boolean delete(String key, Object value, long lExpiry) { return mcc.delete(key, value, new Date(lExpiry)); } //检测Cache中当前Key是否存在 public boolean exists(String key) { return mcc.exists(key); } //根据指定一批Key批量获取缓存内容。 /* * @param sKeys 指定的一批Key。 * @return Object[oValue] */ public Object[] getMultiArray(String[] sKeys) throws ServiceException { return memCachedClient.getMultiArray(sKeys); } /** * 根据指定一批Key批量获取缓存内容。 * * @param sKeys 指定的一批Key。 * @return Map<sKey, oValue> */ public Map<String, Object> getMulti(String[] sKeys) throws ServiceException { return memCachedClient.getMulti(sKeys); } public static void main(String[] args) { MemCached memCached= MemCached.getInstance(); memCached.add("hello", 234); System.out.print("get value : " + memCached.get("hello")); }} 那么我们就可以通过简单的像main方法中操作的一样存入一个变量,然后再取出进行查看,我们可以看到先调用了add,然后再进行get,我们运行一次 后,234这个值已经被我们存入了memcached的缓存中的了,我们将main方法中红色的那一行注释掉后,我们再运行还是可以看到get到的 value也是234,即缓存中我们已经存在了数据了。 对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为 memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须实现该接口,否则会报错的。Entity/** * 获取当前实体的缓存Id * * @return */ public String getCacheId() { return getCacheId(this.getClass(), sBreedId); } get public Breed getBreedById(String sBreedId) throws ServiceException { Breed breed = (Breed)memCachedService.get(getCacheId(Breed.class, sBreedId)); if(breed == null) { breed = service.get("breed.getBreedById", sBreedId); if(breed != null) { memCachedService.set(breed.getBreedId(), breed); } } return breed; } save memCachedService.set(spider.getCacheId(), breed); update memCachedService.replace(spider.getCacheId(), breed); remove memCachedService.delete(getCacheId(Spider.class, IbreedId)); 或 memCachedService.delete(breed.getCacheId());listAll public List listAll() throws ServiceException { List breeds = new ArrayList (); List breedIds = (List)memCachedService.get(getKeyByMap("Breed", null)); if(ObjectUtils.isEmpty(breedIds)) { breeds = service.list("breed.getAllBreed", null); if (!ObjectUtils.isEmpty(breeds)) { breedIds = new ArrayList(); for (Breed breed : breeds) { breedIds.add(breed.getBreedId()); } memCachedService.set(getKeyByMap("Breed", null), breedIds); } } else { for (String sBreedId : breedIds) { Breed breed = getBreedById(sBreedId); if (breed != null) { breeds.add(breed); } } } return breeds; }

在ASP.NET中使用Memcached

  现在一些 NET开发人员开始放弃ASP NET内置的缓存机制 转而使用Memcached——一种分布式的内存缓存系统 其最初是由Danga Interactive公司为LiveJournal网站而开发   存的一个基础性问题就是如何处理过时数据 当运行在单独的Web服务器上 你可以很容易地清除一个已经确认被改变了的缓存 可惜 ASP NET没有一个很好的方法来支持多服务器 每个服务器上的缓存都对其他缓存的改变一无所知   ASP NET允许通过基于文件系统和数据库表的触发器来作废一个缓存 然而 这也存在问题 比如数据库触发器需要使用昂贵的轮询 以及触发器本身冗长的编程 但是 我们还是有其他的选择的   不像ASP NET内置的缓存机制 Memcached是一个分布式的缓存系统 任何Web服务器都能更新或删除一个缓存项 并且所有其他的服务器都能在下次访问这些缓存项的时候自动获取到更新的内容 这是通过把这些缓存项存储在一个或者多个缓存服务器上来实现的 每一个缓存项都根据它的关键字的哈希值来分配到一个服务器上   表面看来 Memcached针对ASP NET的API就像和内置的API一样 这让开发人员很容易地转换到Memcached上 仅仅通过在代码中查找和替换即可实现   然而仅仅只是让其运行起来还不够 如果要在大型Web Farms(译者注 大型站点)正确地使用还需要注意一些问题 Richard Jones写到   当我们添加很多节点后 get_multi函数的有用性在降低——这可能是由于单独的页面 需要访问几乎所有的Memcached实例 我在某处读到 Facebook(译者注 现在很火的校园社交网站)把他们的Memcached集群进行分割以提高get_multi的性能(例如 所有用户的数据都放置在名为mc的子集节点上) 有人能告诉我这样做的效果吗? lishixinzhi/Article/program/net/201311/12654

Redis 和 Memcached 各有什么优缺点,主要的应用场景是什么样的

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:1、Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。2、内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。3、性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。具体为什么会出现上面的结论,以下为收集到的资料:1、数据类型支持不同与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部使用一个redisObject对象来表示所有的key和value。redisObject最主要的信息如图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:”123″ “456”这样的字符串。只有打开了Redis的虚拟内存功能,vm字段字段才会真正的分配内存,该功能默认是关闭状态的。1)String常用命令:set/get/decr/incr/mget等;应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。2)Hash常用命令:hget/hset/hgetall等应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。3)List常用命令:lpush/rpush/lpop/rpop/lrange等;应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。4)Set常用命令:sadd/spop/smembers/sunion等;应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。5)Sorted Set常用命令:zadd/zrange/zrem/zcard等;应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。2、内存管理机制不同在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。 这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。对于像Redis和Memcached这种基于内存的数据库系统来说,内存管理的效率高低是影响系统性能的关键因素。传统C语言中的malloc/free函数是最常用的分配和释放内存的方法,但是这种方法存在着很大的缺陷:首先,对于开发人员来说不匹配的malloc和free容易造成内存泄露;其次频繁调用会造成大量内存碎片无法回收重新利用,降低内存利用率;最后作为系统调用,其系统开销远远大于一般函数调用。所以,为了提高内存的管理效率,高效的内存管理方案都不会直接使用malloc/free调用。Redis和Memcached均使用了自身设计的内存管理机制,但是实现方法存在很大的差异,下面将会对两者的内存管理机制分别进行介绍。Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Memcached的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响Slab Allocation的原理相当简单。 如图所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Memcached启动的时候通过制定Growth Factor来控制。假定图中Growth Factor的取值为1.25,如果第一组Chunk的大小为88个字节,第二组Chunk的大小就为112个字节,依此类推。当Memcached接收到客户端发送过来的数据时首先会根据收到数据的大小选择一个最合适的Slab Class,然后通过查询Memcached保存着的该Slab Class内空闲Chunk的列表就可以找到一个可用于存储数据的Chunk。当一条数据库过期或者丢弃时,该记录所占用的Chunk就可以回收,重新添加到空闲列表中。从以上过程我们可以看出Memcached的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。因为每个Chunk都分配了特定长度的内存空间,所以变长数据无法充分利用这些空间。如图 所示,将100个字节的数据缓存到128个字节的Chunk中,剩余的28个字节就浪费掉了。Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。如图所示,real_ptr是redis调用malloc后返回的指针。redis将内存块的大小size存入头部,size所占据的内存大小是已知的,为size_t类型的长度,然后返回ret_ptr。当需要释放内存的时候,ret_ptr被传给内存管理程序。通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存。Redis通过定义一个数组来记录所有的内存分配情况,这个数组的长度为ZMALLOC_MAX_ALLOC_STAT。数组的每一个元素代表当前程序所分配的内存块的个数,且内存块的大小为该元素的下标。在源码中,这个数组为zmalloc_allocations。zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。所以,总的来看,Redis采用的是包装的mallc/free,相较于Memcached的内存管理方法来说,要简单很多。3、数据持久化支持Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志。而memcached是不支持数据持久化操作的。1)RDB快照Redis支持将当前数据的快照存成一个数据文件的持久化机制,即RDB快照。但是一个持续写入的数据库如何生成快照呢?Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。我们可以通过Redis的save指令来配置RDB快照生成的时机,比如配置10分钟就生成快照,也可以配置有1000次写入就生成快照,也可以多个规则一起实施。这些规则的定义就在Redis的配置文件中,你也可以通过Redis的CONFIG SET命令在Redis运行时设置规则,不需要重启Redis。Redis的RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时,Redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件,这样在任何时候出现故障,Redis的RDB文件都总是可用的。同时,Redis的RDB文件也是Redis主从同步内部实现中的一环。RDB有他的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。在某些业务下,这是可以忍受的。2)AOF日志AOF日志的全称是append only file,它是一个追加写入的日志文件。与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。只有那些会导致数据发生修改的命令才会追加到AOF文件。每一条修改数据的命令都生成一条日志,AOF文件会越来越大,所以Redis又提供了一个功能,叫做AOF rewrite。其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作。其生成过程和RDB类似,也是fork一个进程,直接遍历数据,写入新的AOF临时文件。在写入新文件的过程中,所有的写操作日志还是会写到原来老的AOF文件中,同时还会记录在内存缓冲区中。当重完操作完成后,会将所有缓冲区中的日志一次性写入到临时文件中。然后调用原子性的rename命令用新的AOF文件取代老的AOF文件。AOF是一个写文件操作,其目的是将操作日志写到磁盘上,所以它也同样会遇到我们上面说的写操作的流程。在Redis中对AOF调用write写入后,通过appendfsync选项来控制调用fsync将其写到磁盘上的时间,下面appendfsync的三个设置项,安全强度逐渐变强。appendfsync no 当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。appendfsync everysec 当设置appendfsync为everysec的时候,Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。所以结论就是,在绝大多数情况下,Redis会每隔一秒进行一次fsync。在最坏的情况下,两秒钟会进行一次fsync操作。这一操作在大多数数据库系统中被称为group commit,就是组合多次写操作的数据,一次性将日志写到磁盘。appednfsync always 当设置appendfsync为always时,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响。对于一般性的业务需求,建议使用RDB的方式进行持久化,原因是RDB的开销并相比AOF日志要低很多,对于那些无法忍数据丢失的应用,建议使用AOF日志。4、集群管理的不同Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。下图给出了Memcached的分布式存储实现架构。当客户端向Memcached集群发送数据之前,首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储。但客户端查询数据时,同样要计算出查询数据所在的节点,然后直接向该节点发送查询请求以获取数据。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。下图给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096。Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER。为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。

Memcached

Memcached报错:CLIENT_ERROR bad data chunk 这是因为存储的字节长度与指定的长度不匹配造成的,如: set username 0 0 2 你是打算存储两个字节,但如果你输入不等于2个字节就会报 CLIENT_ERROR bad data chunk 错误,注意必须是2个,多于或少于2个字节都会报这个错误。Ubuntu sudo apt-get install memcached sudo service memcached status/stop/start/restartLinux下设置memcached访问IP vim /etc/memcached.conf 注释掉-l 127.0.0.1 sudo service memcached restart一、安装gcc 由于memcached和libevent是由C编写的,所以首先确保你的系统安装了gcc,如果没有安装,使用yum安装即可 $ yum -y install gcc $ yum -y install gcc-c++ $ gcc --version二、安装libevent wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz $ tar -xzf libevent-2.0.21-stable.tar.gz $ cd libevent-2.0.21-stable $ ./configure --prefix=/usr $ make $ make install 安装完后可以查看下/usr/lib是否有libevent等文件(ls -al /usr/lib | grep libevent) #如果时间不对,需要修改系统时间三、安装memcached wget http://memcached.org/files/memcached-1.4.21.tar.gz $ tar xzvf memcached-1.4.15.tar.gz $ cd memcached-1.4.15 $ ./configure --with-libevent=/usr $ make $ make install 安装结果(ls -al /usr/local/bin/memcached)四、启动memcached memcached -d -m 512 -p 11211 -u root -c 256 -P /var/run/memcached.pid五、关闭防火墙11211端口 $ vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT $ service iptables restart六、telnet访问 然后就可以使用telnet,来测试memcache的连接状态,如果没有安装telnet服务,可以执行 $ yum install telnet-server #安装服务 $ yum install telnet #安装命令然后编辑vi /etc/xinetd.d/telnet文件,激活telnet,默认是禁用的,默认为yes,需要改成no disable = no然后重启服务,执行命令 $ service xinetd restart然后就可以测试memcached的连接,执行命令 $ telnet 127.0.0.1 11211 输入stats,会输出memcache的一些连接信息,包括PID 如果需要退出,则执行quit命令即可

Memcached真的过时了吗?

这个其实没有什么过时不过时,都是依据你自己的需求和看法来选择。memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议。memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。memcached的API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料。memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。Memcached 的守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

memcached可以持久化吗

官方版本是不支持的。可以考虑用redis,memcache感觉都快淘汰了

win7系统安装memcached的详细步骤(图文)

本教程小编和大家分享win7系统安装memcached的方法,许多小伙伴不知道如何安装memcached,Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。接下来教程分享win7系统安装memcached的详细步骤。推荐:win764位系统下载具体方法如下:1、软件包下载;安装步骤1、解压到指定目录,如:E:memcached;2、用cmd打开命令窗口,转到解压的目录,输入“memcached-dinstall”;3、查看是否安装成功,输入memcached_h,出现下图窗口说明已经安装成功;4、默认参数说明-p监听的端口-l连接的IP地址,默认是本机-dstart启动memcached服务-drestart重起memcached服务-dstop|shutdown关闭正在运行的memcached服务-dinstall安装memcached服务-duninstall卸载memcached服-u以的身份运行(仅在以root运行的时候有效-m最大内存使用,单位MB。默认64M-M内存耗尽时返回错误,而不是删除-c最大同时连接数,默认是102-f块大小增长因子,默认是1.2-n最小分配空间,key+value+flags默认是4-h显示帮助5、telnet测试是否正常运行telnet127.0.0.111211;6、进入后先按ctrl+]启动回示功能,否则无法看到输入信息。回示功能启动成功后;7、stats命令查看运行状态;8、注意:如果提示telnet命令不存在,需要去控件面板开启windows的tel服务功能,win7的开启tel功能操作步骤是:【控制面板】-【程序和功能】-【打开或关闭window功能】,然后找到并勾选tel相关即可。本教程分享win7系统安装memcached的方法。

如何在phpstudy中开启memcached的扩展

解压缩文件,将*.dll文件复制到PHP程序主目录下的“ext”或者“extension”目录。3、打开php.ini文件,在“Dynamic Extensions”配置段中加上“extension=*.dll”,关闭文件,重新启动一下服务器就可以加载成功了。