- 我不懂运营
-
中文音译出的字为什么会差这么远!…… 用我的发音
卖母开斥(的)
- 苏萦
-
Mem/cached 自己在琢磨
- coco
-
美母卡取的
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的方法。2023-07-14 19:41:261
memcached可以持久化吗
官方版本是不支持的。可以考虑用redis,memcache感觉都快淘汰了2023-07-14 19:41:353
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将数据库负载大幅度降低,更好的分配资源,更快速访问。2023-07-14 19:41:421
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命令即可2023-07-14 19:41:491
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节点。2023-07-14 19:41:581
在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/126542023-07-14 19:42:061
如何配置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; }2023-07-14 19:42:141
什么是memcached
memcached是一种高性能的内存式缓存系统,通过将数据存储在内存中减少读取数据库的次数2023-07-14 19:42:221
如何解决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...2023-07-14 19:42:291
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 这样的范围检索语句。2023-07-14 19:42:382
linux memcached 怎么使用
默认安装后php或者MySQL这样的使用插件调用2023-07-14 19:42:592
在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算法2023-07-14 19:43:081
php 一个网站需要用memcached!主要缓存什么内容? 那些该缓存? 应该注意什么?
memecached可以代替session缓存的东西,如果有的功能需要也可以去缓存,比如购物车信息,当然有的购物车也是要求是还存在数据库的,需要注意的是这个缓存在memcached出现问题down机的时候缓存的数据就会全部丢失,注意这点就好了,所以不要存很重要且不能丢失的信息就好了。2023-07-14 19:43:162
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的时候是不是安装相关文档和程序一样2023-07-14 19:43:241
memcached 为什么读取很慢
如果是读10000条记录组成一个List,那么就需要10000次交互,通常Memcached客户端每次交互都是同步进行的,必需是上一条记录返回后才能读取下一条。这样几秒钟的时间是必需要花的,哪怕每条记录就1个字节也快不了。某些Memcached客户端实现支持批量读取,允许你一次读取多条记录,比如你可以一次1000条,分10次读取,这样会快得多。如果是一个包含10000个元素的List对象,只是对应Memcached的一条记录。那么,Memcached没有List这样的数据结构,对Memcached来说只是一个400K的数据而已,正常情况下最多几十毫秒。如果你尝试读取一个400k的数据块也是这么慢得话,那Memcached客户端通讯部分实现可能有问题,否则,可能是序列化/反序列化部分有问题(太慢)。2023-07-14 19:43:311
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) 设置回调函数的最晚执行事件。2023-07-14 19:43:382
如何查看Memcached运行状态
win下面:1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211,这里 11211是memcached绑定的端口号。2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。stats :显示服务器信息、统计数据等2023-07-14 19:43:462
memcached 连接 失败,是什么原因,有什么解决办法
1、没有开启memcached服务正解:/usr/bin/memcached -d -m 2048 -p 112112、注意port保持一致telnet 127.0.0.1 112112023-07-14 19:44:131
window查看memcached安装在哪个目录下
1、先下载安装包,下载完成后解压到指定目录,如:C:Memcachedmemcached-win32-1.4.4-14。2、用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。3、打开控制面板,打开服务,可以看到memcached已经在上面可,如果没有启动,则手动启动一下。4、 使用telnet命令 验证缓存服务器是否可用。开始什么都不显示,回车后输入命令 stats 查看统计信息,如下图,说明服务器运作正常。2023-07-14 19:44:221
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。2023-07-14 19:44:421
memcache 如何卸载呢
方法/步骤 1 将下载的memcached.exe文件放到磁盘固定的地方,不要删除。 打开开始菜单,在输入框里输入cmd按回车。 2 在出现的弹出窗中输入c:memcachedmemcached.exe -d install 3 再输入: "c:memcachedmemcached.exe -d start" 启动。NOTE...2023-07-14 19:44:491
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协议与守护进程通信。2023-07-14 19:44:561
在windows上安装memcached要同时安装memcache扩展吗
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。2023-07-14 19:45:062
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 ufeffufeff2023-07-14 19:45:131
redis和memcached的区别
支持的类型不同,redis数据类型更多,或者叫更丰富。导致使用场景少。memcache原生不支持分布式,redis可以。memcache的发展不如redismemcache单key没有redis大。2023-07-14 19:45:303
如何用英语发音“Memcached”
The keen whistle sings; the mutinous ones2023-07-14 19:45:381
windows环境怎么解决 memcached 未授权访问漏洞
腾讯安全提到过这个,可以安装一个电脑管家在电脑上然后打开工具箱,在里面找到修复漏洞功能使用这个功能,去修复电脑所有检测出的高危漏洞即可2023-07-14 19:45:472
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" (实时状态)2023-07-14 19:45:551
怎么查看memcached启动没
你的环境是什么?win下面:1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211,这里 11211是memcached绑定的端口号。2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。stats :显示服务器信息、统计数据等2023-07-14 19:46:191
php memcached使用getExtendedStats()报错方法不存在,memcache可以,为什么?请问有什么方法替代,求解
用 getStats()替换.2023-07-14 19:46:272
为什么有的时候从memcached中读取数据的时间超过了1秒
读取数据时间较长可能原因有:1)客户机到memcached服务器之间的网络拥塞2)memcached服务器当前满负荷工作,比如大并发访问memcached服务器导致memcached服务器的负载很重,从而延迟了响应时间如果持续出现这种情况的话,建议分析原因在哪里,如果是并发较大导致的,那么可以考虑增加memcached服务器的数据量将并发访问引导到不同的memcached服务器上从而减缓处理压力2023-07-14 19:46:351
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程序员,雷雪松的个人博客。2023-07-14 19:46:421
memcached 和 zend opcache有什么不同
memcached 是变量缓存,比如你可以把一些公共变量缓存到内存里面,不用反复从数据库读取opcache 是代码缓存, 比如一个页面有多个include文件, 他会给合并成一个文件作为缓存,减少服务器的io操作,加载更快2023-07-14 19:46:491
memcache重启是什么命令
1、linux环境下:/usr/local/lib/memcached -d -m 2048 -u root -c 1024 -p 11211 -P /tmp/memcached1.pid/usr/local/lib/memcached -d -m 2048 -u root -c 1024 -p 11211 -P /tmp/memcached2.pid2、windows环境下:在windows下我们可以用命令memcached -d install memcached -m 128 -n 128 -c 30720 -p 11211 -d start 把memcached注册为服务,让系统启动时自动运行memcached为了减少单个memcached的负载,可以在一台机器上运行多个实例,如果把多个memcached注册为服务呢,通过SC命令我们可以创建服务建立服务器1:sc create memcached1 binPath= "d:zwampmemcachedmemcached.exe -d runservice -m 128 -c 512 -p 11211" start= auto DisplayName= "memcached1"建立服务器2:sc create memcached2 binPath= "d:zwampmemcachedmemcached.exe -d runservice -m 128 -c 512 -p 11212" start= auto DisplayName= "memcached2"建立服务器3:sc create memcached3 binPath= "d:zwampmemcachedmemcached.exe -d runservice -m 128 -c 512 -p 11213" start= auto DisplayName= "memcached3"另外-p 指定端口号(默认11211) -m 指定最大使用内存大小(默认64MB) -t 线程数(默认4) -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -m 最大内存使用,单位MB。默认64MB -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48例如:/home/memcache/bin/memcached -d -m 1024 -u root -l 192.168.1.123 -p 1121 -c 512 -P /tmp/memcached.pid重启:先kill -9 掉进程,再执行启动相关参数的memcache2023-07-14 19:46:561
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了2023-07-14 19:47:141
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" (实时状态)2023-07-14 19:47:211
如何在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 114732023-07-14 19:47:291
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更合适。2023-07-14 19:47:492
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)2023-07-14 19:47:582
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:清楚缓存2023-07-14 19:48:071
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程序员,雷雪松的个人博客。2023-07-14 19:48:162
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将数据库负载大幅度降低,更好的分配资源,更快速访问。2023-07-14 19:48:252
怎么查看memcached端口号?
1、windows系统连接memcached端口 cmd命令行中键入telnet 192.168.1.1 11211,这里 11211是memcached绑定的端口号。2、连接上端口后输入 stats命令,即可得到描述Memcached服务器运行情况的参数。stats :显示服务器信息、统计数据等。2023-07-14 19:48:331
memcached 连接 失败,是什么原因,有什么解决办法
1、没有开启memcached服务正解:/usr/bin/memcached -d -m 2048 -p 112112、注意port保持一致telnet 127.0.0.1 112112023-07-14 19:49:051
memcache和mysql的区别
怎么部署mysql和memcache的关系1.首先明确是不是一定要上缓存,当前架构的瓶颈在哪里,若瓶颈真是数据库操作上,再继续往下看。2.明确memcached和redis的区别,到底要使用哪个。前者终究是个缓存,不可能永久保存数据(LRU机制),支持分布式,后者除了缓存的同时也支持把数据持久化到磁盘等,redis要自己去实现分布式缓存(貌似最新版本的已集成),自己去实现一致性hash。因为不知道你们的应用场景,不好说一定要用memcache还是redis,说不定用mongodb会更好,比如在存储日志方面。2023-07-14 19:49:302
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。2023-07-14 19:49:492
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 112112023-07-14 19:49:561
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、如果在安装时没有添加参数,可通过修改注册表信息进行设置,打开注册2023-07-14 19:50:031
怎样升级安装mcached-1.4.33
一、下载Memercached For Windows 二、安装步骤 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、如果在安装时没有添加参数,可通过修改注册表信息进行设置,打开注册表,找 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached 在其中有一个“ImagePath”项,值为: “C:Memcachedmemcached-win32-1.4.4-14memcached.exe” -d runservice 在后面加上“-m 1024 -c2048”。如下图: 3、输入stats命令后,页面出现的参数介绍。 STAT pid 4356 服务器进程ID STAT uptime 56625 服务器运行时间,单位秒 STAT time 1225249079 服务器当前的UNIX时间 STAT version1.1.0服务器的版本号 STAT pointer_size 64 STAT rusage_user 151.845489 该进程累计的用户时间(秒:微妙) STAT rusage_system 121.667603 该进程累计的系统时间(秒:微妙) STAT ibuffer_size 4096 STAT 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是查询缓存的次数。 cmd_get/uptime得到平均每秒请求缓存的次数。 cmd_set是设置key=>value的次数。整个memcached是个大hash,用cmd_get没有找到的内容,就会调用cmd_set写进缓存里。 get_hits是缓存命中的次数,缓存命中率 = get_hits/cmd_get *100%。 get_misses加上get_hits等于cmd_get。 total_itemscurr_items表示现在在缓存中的键值对个数。 total_items == cmd_set == get_misses,不过当可用最大内存用光时,如果memcached设置为删掉内容,上面的等式就不成立了。2023-07-14 19:50:111
缓存系统中的主要使用的数据结构是什么
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 这样的范围检索语句。2023-07-14 19:50:303