详细的解释 英文解释一下

哪位高手能详细解释一下 (*(void*)this)[9] - C++当前位置:& &&&哪位高手能详细解释一下 (*(void*)this)[9]哪位高手能详细解释一下 (*(void*)this)[9]&&网友分享于:&&浏览:45次谁能详细解释一下 (*(void***)this)[9]rt,遇到一个汇编调用的类函数的例子,谁能一步一步详细解释一下这句代码的含义------解决方案--------------------
(*(void***)this)[9](void***)this:将this强制类型转换为void***类型*(void***)this:取void***类型所指的内容,其类型为void**(*(void***)this)[9]:取(*(void***)this)这个void**类型变量的第9个,其类型为void*
------解决方案--------------------this是类对象指针,(void*)this是指向类对象的首地址的指针。*(void**)this是指针的解引用,指向了虚表的首地址*(void***)this是2维指针,指向了存放虚函数地址数组的首地址。要获得第10个就指定下标,就变成了(*(void***)this)[9],就是该对象的第10个虚函数简单理解:this--&vfptr--&virtual func address array需要两次指向(左边一个*,右边一个下标,两次解引用),最终获得的是函数指针,还是指针类型,所以要比解引用次数多1,就是3个*。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分80阅读权限10帖子精华可用积分80 信誉积分307 专家积分0 在线时间114 小时注册时间最后登录
白手起家, 积分 80, 距离下一级还需 120 积分
帖子主题精华可用积分80 信誉积分307 专家积分0 在线时间114 小时注册时间最后登录
论坛徽章:0
谁能具体解释一下DNS服务器中的pps和qps各是什么含义?
俺大概知道:
qps是指正常模式的可接受访问量,
pps是指防火模式下的可接受访问量,
1,pps,qps各是什么单词的缩写?
2,所谓正常模式是什么模式,另外就是保护模式又是什么模式呢?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分33阅读权限10帖子精华可用积分33 信誉积分146 专家积分0 在线时间31 小时注册时间最后登录
白手起家, 积分 33, 距离下一级还需 167 积分
帖子主题精华可用积分33 信誉积分146 专家积分0 在线时间31 小时注册时间最后登录
论坛徽章:0
pps: Packet Per Second& && &每秒报文个数
qps: query per second& && & 每秒查询个数
UID空间积分0 积分22阅读权限10帖子精华可用积分22 信誉积分38 专家积分0 在线时间28 小时注册时间最后登录
白手起家, 积分 22, 距离下一级还需 178 积分
帖子主题精华可用积分22 信誉积分38 专家积分0 在线时间28 小时注册时间最后登录
论坛徽章:0
qps&&是dns服务器单位时间内接受的请求数
请求的方式有很多种
+++ Statistics Dump +++ ()
++ Incoming Requests ++
& && && && && && &24 QUERY
++ Incoming Queries ++
& && && && && && &16 A
& && && && && && & 8 AAAA
++ Outgoing Queries ++
[View: default]
& && && && && && &37 A
& && && && && && &39 NS
& && && && && && &26 AAAA
[View: _bind]
++ Name Server Statistics ++
& && && && && && &24 IPv4 requests received
& && && && && && &15 responses sent
& && && && && && & 6 queries resulted in successful answer
& && && && && && & 6 queries resulted in authoritative answer
& && && && && && & 9 queries resulted in SERVFAIL
& && && && && && &18 queries caused recursion
& && && && && && & 9 duplicate queries received
++ Zone Maintenance Statistics ++
& && && && && && & 2 IPv4 notifies sent
++ Resolver Statistics ++
[View: default]
& && && && && &&&102 IPv4 queries sent
& && && && && && &94 query retries
& && && && && &&&102 query timeouts
[View: _bind]
++ Cache DB RRsets ++
[View: default]
[View: _bind (Cache: _bind)]
++ Socket I/O Statistics ++
& && && && && &&&105 UDP/IPv4 sockets opened
& && && && && && & 3 TCP/IPv4 sockets opened
& && && && && &&&103 UDP/IPv4 sockets closed
& && && && && &&&102 UDP/IPv4 connections established
& && && && && && & 1 TCP/IPv4 connections accepted
++ Per Zone Query Statistics ++
--- Statistics Dump --- ()
UID空间积分0 积分80阅读权限10帖子精华可用积分80 信誉积分307 专家积分0 在线时间114 小时注册时间最后登录
白手起家, 积分 80, 距离下一级还需 120 积分
帖子主题精华可用积分80 信誉积分307 专家积分0 在线时间114 小时注册时间最后登录
论坛徽章:0
RouterGhost
谢谢!!!!
UID空间积分0 积分219阅读权限20帖子精华可用积分219 信誉积分119 专家积分0 在线时间39 小时注册时间最后登录
稍有积蓄, 积分 219, 距离下一级还需 281 积分
帖子主题精华可用积分219 信誉积分119 专家积分0 在线时间39 小时注册时间最后登录
论坛徽章:4
还有dns相关资料吗?我一直想给自己的域名配置一台dns服务器!
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处陈明乾 的BLOG
用户名:陈明乾
文章数:162
评论数:774
访问量:758163
注册日期:
阅读量:5863
阅读量:12276
阅读量:299826
阅读量:1019742
51CTO推荐博文
大纲一、memcached 是什么二、memcached 特点三、memcached 协议四、memcached 基于libevent的事件处理五、memcached 内置内存存储方式六、memcached 过期方式七、memcached 不互相通信的分布式八、memcached 支持的平台 九、memcached 安装与配置十、memcached 使用详解注,操作系统 CentOS 6.4 x86_64,博文中所用到的软件请到这里下载:一、memcached 是什么 & & & &Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。Memcached是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。 & & & &许多Web应用都将数据保存到RDBMS(关系型数据库管理系统)中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。 & & & &这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。如下图,二、memcached 特点Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成; 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期; 各服务器间彼此无视:不在服务器间进行数据同步; O(1)的执行效率 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长; 三、memcached 协议 & & & &Memcached的服务器客户端通信并不使用复杂的XML等格式, 而使用简单的基于文本行的协议(新版本支持二进制传输协议)。因此,通过telnet 也能在memcached上保存数据、取得数据。下面是一个简单的例子,[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
add mykey 0 10 5 (增加数据)
hello (数据)
get mykey (获取数据)
VALUE mykey 0 5
hello (数据)
END协议文档位于memcached的源代码内,也可以参考以下的memcached wiki,。四、memcached 基于libevent的事件处理 & & & &libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。 关于事件处理这里就不再详细介绍,可以参考libevent官方文档与The C10K Problem。五、memcached 内置内存存储方式 & & & &为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。1.数据存储方式:Slab Allocation & &结构图如下: & &
& & & &Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块(chunk),并把尺寸相同的块分成组,以完全解决内存碎片问题。但由于分配的是特定长度的内存,因此无法有效利用分配的内存。比如将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。2.Slab Allocator 相关术语Page:分配给Slab的内存空间,默认是1MB。分配给Slab之后根据slab的大小切分成chunk。 Chunk:用于缓存记录的内存空间。 Slab Class:特定大小的chunk的组。 memcached根据收到的数据的大小,选择最适合数据大小的slab。 memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。 3.在Slab中缓存记录的原理 & & & &下面说明memcached如何针对客户端发送的数据选择slab并缓存到chunk中。memcached根据收到的数据的大小,选择最适合数据大小的slab。 memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk, 然后将数据缓存于其中。如下图,实际上,Slab Allocator也是有利也有弊。下面介绍一下它的缺点。4.Slab Allocator的缺点 & & & &Slab Allocator解决了当初的内存碎片问题,但新的机制也给memcached带来了新的问题。这个问题就是,由于分配的是特定长度的内存,因此无法有效利用分配的内存。 例如,将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。如下图, & & & &对于该问题目前还没有完美的解决方案,但在文档中记载了比较有效的解决方案。就是说,如果预先知道客户端发送的数据的公用大小,或者仅缓存大小相同的数据的情况下, 只要使用适合数据大小的组的列表,就可以减少浪费。但是很遗憾,现在还不能进行任何调优,只能期待以后的版本了。 但是,我们可以调节slab class的大小的差别。 接下来说明growth factor(增长系数)选项。5.使用Growth Factor进行调优 & & & &memcached在启动时指定 Growth Factor因子(通过 -f 选项), 就可以在某种程度上控制slab之间的差异。默认值为1.25。 但是,在该选项出现之前,这个因子曾经固定为2,称为“powers of 2”策略。让我们用以前的设置,以verbose模式启动memcached试试看:[root@memcache ~]# memcached -f 2 -vv下面是启动后的verbose输出:slab class
1: chunk size
128 perslab
slab class
2: chunk size
256 perslab
slab class
3: chunk size
512 perslab
slab class
4: chunk size
1024 perslab
slab class
5: chunk size
2048 perslab
slab class
6: chunk size
4096 perslab
slab class
7: chunk size
8192 perslab
slab class
8: chunk size
16384 perslab
slab class
9: chunk size
32768 perslab
slab class
10: chunk size
65536 perslab
slab class
11: chunk size 131072 perslab
slab class
12: chunk size 262144 perslab
slab class
13: chunk size 524288 perslab
2 & & & &可见,从128字节的组开始,组的大小依次增大为原来的2倍。 这样设置的问题是,slab之间的差别比较大,有些情况下就相当浪费内存。 因此,为尽量减少内存浪费,追加了growth factor这个选项。来看看现在的默认设置(f=1.25)时的输出:slab class
1: chunk size
88 perslab 11915
slab class
2: chunk size
112 perslab
slab class
3: chunk size
144 perslab
slab class
4: chunk size
184 perslab
slab class
5: chunk size
232 perslab
slab class
6: chunk size
296 perslab
slab class
7: chunk size
376 perslab
slab class
8: chunk size
472 perslab
slab class
9: chunk size
592 perslab
slab class
10: chunk size
744 perslab
1409 & & & &可见,组间差距比因子为2时小得多,更适合缓存几百字节的记录。 从上面的输出结果来看,可能会觉得有些计算误差, 这些误差是为了保持字节数的对齐而故意设置的。将memcached引入产品,或是直接使用默认值进行部署时, 最好是重新计算一下数据的预期平均长度,调整growth factor, 以获得最恰当的设置。内存是珍贵的资源,浪费就太可惜了。六、memcached 过期方式数据过期方式:Lazy Expiration + LRU1.Lazy Expiration & & & &memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。2.LRU & & & &memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分配空间。当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。七、memcached 不互相通信的分布式 & & & &memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。如下图,八、memcached 支持的平台 memcached支持许多平台Linux FreeBSD Solaris (memcached 1.2.5以上版本) Mac OS X 另外也能安装在Windows上。九、memcached 安装与配置1.安装libevent注,在上文中提到memcached是基于libevent进行事件处理的,所以我们得先安装libevent。[root@memcache src]# tar xf libevent-2.0.21-stable.tar.gz
[root@memcache src]# cd libevent-2.0.21-stable
[root@memcache libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent
[root@memcache libevent-2.0.21-stable]# make && make install2.安装memcached[root@memcache src]# tar xf memcached-1.4.15.tar.gz
[root@memcache src]# cd memcached-1.4.15
[root@memcache memcached-1.4.15]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
[root@memcache memcached-1.4.15]# make && make install3.配置环境变量[root@memcache ~]# vim /etc/profile.d/memcache.sh
[root@memcache ~]# cat /etc/profile.d/memcache.sh
export PATH=$PATH:/usr/local/memcached/bin/
[root@memcache ~]# source /etc/profile
[root@memcache ~]# memcached -h
memcached 1.4.15
TCP port number to listen on (default: 11211)
UDP port number to listen on (default: 11211, 0 is off)
UNIX socket path to listen on (disables network support)
access mask for UNIX socket, in octal (default: 0700)
interface to listen on (default: INADDR_ANY, all addresses)
&addr& may be specified as host:port. If you don't specify
a port number, the value you specified with -p or -U is
used. You may specify multiple addresses separated by comma
or by using -l multiple times
run as a daemon
maximize core file limit
-u &username& assume identity of &username& (only when run as root)
max memory to use for items in megabytes (default: 64 MB)
return error on memory exhausted (rather than removing items)
max simultaneous connections (default: 1024)
lock down all paged memory.
Note that there is a
limit on how much memory you may lock.
allocate more than that would fail, so be sure you
set the limit correctly for the user you started
the daemon with (not for -u &username&
under sh this is done with 'ulimit -S -l NUM_KB').
verbose (print errors/warnings while in event loop)
very verbose (also print client commands/reponses)
extremely verbose (also print internal state transitions)
print this help and exit
print memcached and libevent license
save PID in &file&, only used with -d option
-f &factor&
chunk size growth factor (default: 1.25)
-n &bytes&
minimum space allocated for key+value+flags (default: 48)
Try to use large memory pages (if available). Increasing
the memory page size could reduce the number of TLB misses
and improve the performance. In order to get large pages
from the OS, memcached will allocate the total item-cache
in one large chunk.
Use &char& as the delimiter between key prefixes and IDs.
This is used for per-prefix stats reporting. The default is
":" (colon). If this option is specified, stats collection
is tur if not, then it may be turned on
by sending the "stats detail on" command to the server.
number of threads to use (default: 4)
Maximum number of requests per event, limits the number of
requests process for a given connection to prevent
starvation (default: 20)
Disable use of CAS
Set the backlog queue limit (default: 1024)
Binding protocol - one of ascii, binary, or auto (default)
Override the size of each slab page. Adjusts max item size
(default: 1mb, min: 1k, max: 128m)
Comma separated list of extended or experimental options
- (EXPERIMENTAL) maxconns_fast: immediately close new
connections if over maxconns limit
- hashpower: An integer multiplier for how large the hash
table should be. Can be grown at runtime if not big enough.
Set this based on "STAT hash_power_level" before a
restart.4.memcached 启动选项[root@memcache ~]# memcached -h-p TCP监听端口 (default: 11211) -U UDP 监听端口 (default: 11211, 0 is off) -s UNIX socket监听路径,不支持网络 -a UNIX socket访问掩码, 八进制 (default: 0700) -l 监听的服务器IP地址 (default: all addresses) -d 启动一个守护进程 -r 最大限度利用核心文件限制 -u 运行memcached用户 -m 最大的内存使用 (default: 64 MB) -M 内存耗尽返回错误 -c 最大并发连接 (default: 1024) -k 锁定所有分页内存 -v 输出警告和错误信息 -vv 同时打印客户端请求和返回信息 -vvv 打印内部状态转换信息 -i 打印memcached 和 libevent 版本信息 -P 设置保存pid文件, only used with -d option -f 块大小增长倍数 (default: 1.25) -n key+value+flags最小分配空间(default: 48) -L 如何有效,尝试使用大内存页。增加内存页大小可以减少失误的TLB数量,提高性能。 -D 指定key和IDs的分隔符 default is “:” (colon). 如果指定此选项,统计信息收集自动开启; -t 使用的线程数量 (default: 4) -R 每个事件的最大请求数 (default: 20) -C 禁止使用 CAS -b 设置积压队列数限制 (default: 1024)、 -B 绑定协议 C one of ascii, binary, or auto (default) -I 分配给每个slab页(default: 1mb, min: 1k, max: 128m) -o 配置额外选项 5.启动memcached[root@memcache ~]# memcached -d -m 500 -u root -l 192.168.18.201 -c 256 -P /tmp/memcached.pid -vvv
slab class
1: chunk size
96 perslab
slab class
2: chunk size
120 perslab
slab class
3: chunk size
152 perslab
slab class
4: chunk size
192 perslab
slab class
5: chunk size
240 perslab
slab class
6: chunk size
304 perslab
slab class
7: chunk size
384 perslab
slab class
8: chunk size
480 perslab
slab class
9: chunk size
600 perslab
slab class
10: chunk size
752 perslab
slab class
11: chunk size
944 perslab
slab class
12: chunk size
1184 perslab
slab class
13: chunk size
1480 perslab
slab class
14: chunk size
1856 perslab
slab class
15: chunk size
2320 perslab
slab class
16: chunk size
2904 perslab
slab class
17: chunk size
3632 perslab
slab class
18: chunk size
4544 perslab
slab class
19: chunk size
5680 perslab
slab class
20: chunk size
7104 perslab
slab class
21: chunk size
8880 perslab
slab class
22: chunk size
11104 perslab
slab class
23: chunk size
13880 perslab
slab class
24: chunk size
17352 perslab
slab class
25: chunk size
21696 perslab
slab class
26: chunk size
27120 perslab
slab class
27: chunk size
33904 perslab
slab class
28: chunk size
42384 perslab
slab class
29: chunk size
52984 perslab
slab class
30: chunk size
66232 perslab
slab class
31: chunk size
82792 perslab
slab class
32: chunk size
103496 perslab
slab class
33: chunk size
129376 perslab
slab class
34: chunk size
161720 perslab
slab class
35: chunk size
202152 perslab
slab class
36: chunk size
252696 perslab
slab class
37: chunk size
315872 perslab
slab class
38: chunk size
394840 perslab
[root@memcache ~]# slab class
39: chunk size
493552 perslab
slab class
40: chunk size
616944 perslab
slab class
41: chunk size
771184 perslab
slab class
42: chunk size
1048576 perslab
&26 server listening (auto-negotiate)
&27 send buffer was 229376, now
&27 server listening (udp)
&27 server listening (udp)
&27 server listening (udp)
&27 server listening (udp)注,默认使用11211端口,root用户,最大使用500M内存,256个并发连接,输出详细信息,以守护进程方式运行。从输出信息可看出memcached分配内存的过程。6.查看一下启动端口[root@memcache ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address
Foreign Address
PID/Program name
0 192.168.18.201:11211
8086/memcached
0 0.0.0.0:22
0 127.0.0.1:25
1103/master
0 127.0.0.1:6010
0 127.0.0.1:6011
1103/master
0 ::1:6010
0 ::1:6011
0 192.168.18.201:11211
8086/memcached注,大家可以看到,memcached已启动,监听在11211端口上。7.登录测试一下(1).安装telnet测试工具[root@memcache ~]# yum install -y telnet(2).测试[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.注,登录成功。下面我们add命令,保存一个数据。用get命令查看一下。(3).add 命令用法:add keyname flag &timeout &datasize案例:[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
add mykey 0 10 5
STORED(4).get 命令用法:get keyname案例:get mykey
VALUE mykey 0 5
END注,好了测试成功。大家有没有发现,每次启动都要输入那么长的命令是不是很不方便,下面我们为memcached提供SysV的startup脚本。8.提供SysV的startup脚本[root@memcache ~]# vim /etc/init.d/memcached
#!/bin/bash
# Init file for memcached
# chkconfig: - 86 14
# description: Distributed memory caching daemon
# processname: memcached
# config: /etc/sysconfig/memcached
. /etc/rc.d/init.d/functions
## Default variables
PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
prog="/usr/local/memcached/bin/memcached"
desc="Distributed memory caching"
lockfile="/var/lock/subsys/memcached"
echo -n $"Starting $desc (memcached): "
daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
echo -n $"Shutting down $desc (memcached): "
killproc $prog
[ $RETVAL -eq 0 ] && rm -f $lockfile
return $RETVAL
restart() {
reload() {
echo -n $"Reloading $desc ($prog): "
killproc $prog -HUP
return $RETVAL
case "$1" in
condrestart)
[ -e $lockfile ] && restart
status $prog
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
esac9.增加执行权限 [root@memcache ~]# chmod +x /etc/init.d/memcached10.加入服务列表并设置开机自启动[root@memcache ~]# chkconfig --add memcached
[root@memcache ~]# chkconfig memcached on
[root@memcache ~]# chkconfig memcached --list
6:关闭11.杀死所有memcached进程并重新启动memcached[root@memcache ~]# killall memcached
[root@memcache ~]# service memcached start
Starting Distributed memory caching (memcached):
[root@memcache ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address
Foreign Address
PID/Program name
0 0.0.0.0:11211
8251/memcached
0 0.0.0.0:22
0 127.0.0.1:25
1103/master
0 127.0.0.1:6010
0 127.0.0.1:6011
0 :::11211
8251/memcached
1103/master
0 ::1:6010
0 ::1:6011
0 0.0.0.0:11211
8251/memcached
0 :::11211
8251/memcached注,启动成功。还有点得说明,由于memcached的内存大小是手动设置的,有的时候需要随时去修改它,总不能每次都去修改memcached脚本吧,所以下面我们为memcached提供配置文件。12.为memcached脚本提供配置文件[root@memcache ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="128"
OPTIONS=""注,这里我们将内存大小改为了128M,方便我们测试对比。13.修改SysV的startup脚本载入配置文件注,[ -f /etc/sysconfig/memcached ] && . /etc/sysconfig/memcached,加入这一行就行,我们先判断一下是否是文件,若是载入。14.测试一下(1).查看一下memcached内存大小 [root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
STAT pid 8251
STAT uptime 852
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.032994
STAT rusage_system 0.033994
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes
#大家可以看到,现在的内存限制是64M
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END(2).重新启动一下memcached[root@memcache ~]# service memcached restart
Shutting down Distributed memory caching (memcached):
Starting Distributed memory caching (memcached):
[确定](3).我们再次查看一下内存大小[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
STAT pid 8279 #进程ID
STAT uptime 8000 #服务器运行秒数
#服务器当前unix时间戳
STAT version 1.4.15 #服务器版本
STAT libevent 2.0.21-stable #libevent版本号
STAT pointer_size 64 #操作系统指针大小(这台服务器是64位的)
STAT rusage_user 0.000999 #进程累计用户时间
STAT rusage_system 0.003999 #进程累计系统时间
STAT curr_connections 10 #当前打开连接数
STAT total_connections 11 #曾打开的连接总数
STAT connection_structures 11 #服务器分配的连接结构数
STAT reserved_fds 20 #内部使用的FD数
STAT cmd_get 0 #执行get命令总数
STAT cmd_set 0 #执行set命令总数
STAT cmd_flush 0 #执行flush命令总数
STAT cmd_touch 0 #执行touch命令总数
STAT get_hits 0 #get命中次数
STAT get_misses 0 #get未命中次数
STAT delete_misses 0 #delete未命中次数
STAT delete_hits 0 #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 7 #读取字节总数
STAT bytes_written 0 #写入字节总数
STAT limit_maxbytes
#现在的内存大小为128M
STAT accepting_conns 1 #目前接受的新接数
STAT listen_disabled_num 0 #失效的监听数
STAT threads 4 #当前线程数
STAT conn_yields 0 #连接操作主支放弃数目
STAT hash_power_level 16 #hash等级
STAT hash_bytes 524288 #当前hash表等级
STAT hash_is_expanding 0 #hash表扩展大小
STAT bytes 0 #当前存储占用的字节数
STAT curr_items 0 #当前存储数据总数
STAT total_items 0 #启动以来存储的数据总数
STAT expired_unfetched 0 #已过期但未获取的对象数目
STAT evicted_unfetched 0 #已驱逐但未获取的对象数目
STAT evictions 0 #LRU释放的对象数目
STAT reclaimed 0 #用已过期的数据条目来存储新数据的数目
END注,大家可以看到,现在的内存大小为128M,说明我们配置文件修改成功。好了,到这里memcached的安装与配置到这里就基本完成了,下面我们来说一下memcached的具体使用。十、memcached 使用详解1.memcached 基本命令注,当memcached 启动后,用于对memcached管理的数据和本身运行状态相关的命令。CommandDescriptionExamplegetReads a valueget mykeysetSet a key unconditionallyset mykey 0 60 5addAdd a new keyadd newkey 0 60 5replace Overwrite existing keyreplace key 0 60 5append Append data to existing keyappend key 0 60 15prepend Prepend data to existing keyprepend key 0 60 15incr Increments numerical key value by given numbermykey 存放的应当是数字 才能增加和减少 incr mykey 2decr Decrements numerical key value by given numbermykey 存放的应当是数字 才能增加和减少decr mykey 5delete Deletes an existing keydelete mykeyflush_all Invalidate specific items immediatelyInvalidate all items in n secondsflush_allflush_all 900stats Prints general statisticsPrints memory statisticsPrints memory statisticsPrint higher level allocation statisticsResets statisticsstatsstats slabsstats mallocstats itemsstats detailstats sizesstats resetversion Prints server version.versionverbosity Increases log levelverbosityquitTerminate telnet sessionquit2.memcached 存储命令的格式格式:&command name& &key& &flags& &exptime& &bytes&&data block&参数说明:&command name& 操作命令:set/add/replace……&key& 缓存的键值&flags& 客户机使用它存储关于键值对的额外信息&exptime& 缓存过期时间 单位为秒 0 表示永远存储&bytes& 缓存值的字节数&data block& 数据块3.memcached 常用命令(1).增加值命令说明:无论如何都添加或更新的set 命令 (值不存在则添加,存在则更新) &set 设置后可以用get命令获取值,也可以使用delete命令删除该值。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
set mykey 0 0 3
VALUE mykey 0 3
delete mykey
END说明:只有数据不存在时添加值的add命令。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
add mykey 0 0 4 #第一次添加成功
add mykey 0 0 4 #第二次添加失败
NOT_STORED说明:只有数据存在时替换的replace命令。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
replace testkey 0 0 2 #元素不存在替换失败
NOT_STORED
add testkey 0 0 2
get testkey
VALUE testkey 0 2
replace testkey 0 0 3 #元素存在替换成功
get testkey
VALUE testkey 0 3
END(2).删除命令 deleteget mykey
VALUE mykey 0 3
delete mykey
END(3).读取命令说明:get 命令 获取一个键或多个键的值 多个键以空格分开。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
set mykey 0 0 2
set testkey 0 0 2
get mykey testkey
VALUE mykey 0 2
VALUE testkey 0 2
END说明:gets 命令比get返回的值多一个数字,用来判断数据是否发生过改变。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
set mykey 0 0 2
set testkey 0 0 2
get mykey testkey
VALUE mykey 0 2
VALUE testkey 0 2
gets mykey testkey
VALUE mykey 0 2 5
VALUE testkey 0 2 6
set testkey 0 0 2
gets mykey testkey
VALUE mykey 0 2 5
VALUE testkey 0 2 7
END说明:cas 的意思是 check and set 的意思,只有当最后一个参数gets获取的那个用来判断数据发生改变的那个值相同时才会存储成功,否则返回 exists。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
gets mykey
VALUE mykey 0 2 5
cas mykey 0 0 2 6
cas mykey 0 0 2 5
gets mykey
VALUE mykey 0 2 8
END说明:自曾(incr) 自减(decr)命令。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
set age 0 0 2
VALUE age 0 2
incr age 2
incr age 2
VALUE age 0 2
decr age 1
VALUE age 0 2
END(4).状态命令说明:stats 显示memcachd状态。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
STAT pid 8279 #进程ID
STAT uptime 8000 #服务器运行秒数
#服务器当前unix时间戳
STAT version 1.4.15 #服务器版本
STAT libevent 2.0.21-stable #libevent版本号
STAT pointer_size 64 #操作系统指针大小(这台服务器是64位的)
STAT rusage_user 0.000999 #进程累计用户时间
STAT rusage_system 0.003999 #进程累计系统时间
STAT curr_connections 10 #当前打开连接数
STAT total_connections 11 #曾打开的连接总数
STAT connection_structures 11 #服务器分配的连接结构数
STAT reserved_fds 20 #内部使用的FD数
STAT cmd_get 0 #执行get命令总数
STAT cmd_set 0 #执行set命令总数
STAT cmd_flush 0 #执行flush命令总数
STAT cmd_touch 0 #执行touch命令总数
STAT get_hits 0 #get命中次数
STAT get_misses 0 #get未命中次数
STAT delete_misses 0 #delete未命中次数
STAT delete_hits 0 #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 7 #读取字节总数
STAT bytes_written 0 #写入字节总数
STAT limit_maxbytes
#现在的内存大小为128M
STAT accepting_conns 1 #目前接受的新接数
STAT listen_disabled_num 0 #失效的监听数
STAT threads 4 #当前线程数
STAT conn_yields 0 #连接操作主支放弃数目
STAT hash_power_level 16 #hash等级
STAT hash_bytes 524288 #当前hash表等级
STAT hash_is_expanding 0 #hash表扩展大小
STAT bytes 0 #当前存储占用的字节数
STAT curr_items 0 #当前存储数据总数
STAT total_items 0 #启动以来存储的数据总数
STAT expired_unfetched 0 #已过期但未获取的对象数目
STAT evicted_unfetched 0 #已驱逐但未获取的对象数目
STAT evictions 0 #LRU释放的对象数目
STAT reclaimed 0 #用已过期的数据条目来存储新数据的数目
END说明 :flush_all 清空所有项目。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
set mykey 0 0 2
set age 0 0 2
get mykey age
VALUE mykey 0 2
VALUE age 0 2
get mykey age
END说明:后续追加append和prepend前面插入命令。[root@memcache ~]# telnet 192.168.18.201 11211
Trying 192.168.18.201...
Connected to 192.168.18.201.
Escape character is '^]'.
set age 0 0 2
VALUE age 0 2
append age 0 0 6
VALUE age 0 8
prepend age 0 0 6
VALUE age 0 14
END4.总结 flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)。flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目,在被执行取回命令时命令被忽略。memecached还有其他命令 ,这里只是平时我们工作中经常用到的一些,在这里总结一下,与大家分享。好了,这一篇博文就到这里结束了,在下一篇博文中我们主要讲解,memcached的应用案例详解。最后想说,希望大家有所收获,^_^……本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 会计科目表及详细解释 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信