陈奇网络工作室

内存缓存配置

网站建设服务器

1.memecached简介

是一款开源的高性能内存缓存软件。通过将数据库中的各类数据临时缓存在预先规划的内存空间中,可以减少业务对数据库的直接和高并发访问,从而提高数据库的访问性能,加速动态服务的能力。

Memcache是基于libevent的事件处理,这个库用于异步事件处理。

2.memecached在企业中的应用

1)作为数据库的前端缓存应用,完整缓存和热点缓存。

2)会话会话共享存储作为一个群集。

3.企业业务中memecached服务的工作流程

web程序访问后端数据库时,会优先访问memcached内存缓存。如果缓存命中数据,会直接获取数据并返回给前端用户。如果没有命中数据,程序会请求后端数据库服务器,获取相应的数据,返回给前端用户并将数据存储在memcached内存中进行缓存,等待下一次访问请求。

2)当程序更新、修改或删除数据库中已有的数据时,也会发送请求通知memcached已经缓存的同一个ID内存无效,从而保证memcached中的数据与数据库中的数据一致。

3)数据库插件在写入更新的数据库后,可以自动将更新的数据推送到memcached。

4.memcached服务分布式集群的实现

在memcached集群中,每个memcache服务器都是独立的,彼此之间不进行通信。每个服务器只管理自己服务器的数据,所有memcached服务器的缓存数据之和就是数据库中的全部数据。

1)程序端实现:程序加载所有memcached ip列表,并散列密钥。

2)负载均衡器:(Load凯普莱维)

一致性哈希:确保每个对象只请求一个对应的服务器,并在节点宕机时最小化数据更新。

5.memcached服务的特点和工作原理

1)完全基于记忆

2)节点是相互独立的

3)基于异步I/O模型,我们使用libevent作为事件通知机制。

4)缓存数据以键/值对的形式存在。

5)c/s模式架构,用C语言编写,总代码2000多行。

6)所有数据都存储在内存中,没有持久存储设计,所以重启服务时数据会丢失。

7)您可以设置存储数据的到期时间。服务本身不会监控过期时间,但会检查密钥的时间戳以确定它是否过期。

8)memcached内存分配机制是分块特定内存,然后分组多个块。

6.memcached内存管理机制

Malloc的全称是内存分配,中文叫动态内存分配。在无法知道内存具体位置的情况下,如果要绑定内存空间,就需要使用动态内存分配。

在早期,memcached内存是通过malloc分配的。使用后回收的内存会产生碎片,会减少操作系统的内存管理,增加操作系统内存管理器的负担,导致操作系统在本地比memcached进程慢。为了解决上述问题,slab allocator内存分配机制诞生了。

Slab分配机制的原理是将分配给memcached的内存按照预先指定的大小划分成特定长度的内存块,然后将相同大小的内存块分组。这些内存块不会被释放,可以重用。

Memcached服务器保存了一个slab Uchikoga块的列表。根据这个列表,选择块,然后在其中存储数据。存储数据时,memcached会根据数据大小选择最合适数据大小的slab,并分配一个可以存储该数据的最小内存块。例如,100字节的数据将被分配并存储在112字节的内存块中,这将浪费12字节的内存空间。

1)板坯分配的主要条款:

Page:分配给slab的内存空间,默认为1MB。分配到slab后,根据slab的大小划分成chunk。

Chunk:用于缓存数据的内存空间或内存块。

Slab类:特定大小多个块的集合或组。

2)内存管理机制优化2)memcached片分配:

在启动时指定-f参数,能控制内存组之间的大小差异,在应用中使用memcached时,通常不重新设置这个参数,默认值为1.25进行部署,如果想优化memcached对内存的使用,可以考虑重新计算数据的预期平均长度,调整这个参数来获取合适的设置值。

-f因子块大小增长因子(默认值:1.25)

例如:

使用2时,组块的大小会以2的倍数增加:

memcached-m512m-d-u root-c 8192-F2-vv

[root @ zxqtmp]# slab类1:块大小96 perslab 10922

2类板:块尺寸192 perslab 5461

3类板:块尺寸384 perslab 2730

第4类板:块尺寸768 perslab 1365

第5类板:块尺寸1536 perslab 682

第6类板:块尺寸3072 perslab 341

第7类板:块尺寸6144 perslab 170

第8类板:块尺寸12288 perslab 85

平板类别9:块大小24576 perslab 42

第10类板:块尺寸49152 perslab 21

第11类板:块尺寸98304 perslab 10

第12类平板:块大小196608 perslab 5

第13类板:块尺寸393216 perslab 2

第14类板:块大小1048576 perslab 1

26服务器监听(自动协商)

27服务器监听(自动协商)

28日发送缓冲曾经是,现在,26386 .488488886826

29发送缓冲区曾经是,现在,26386 .484868868627

28服务器监听(udp)

29服务器监听(udp)

28服务器监听(udp)

29服务器监听(udp)

28服务器监听(udp)

29服务器监听(udp)

28服务器监听(udp)

29服务器监听(udp)

使用1.25时,组块间隔会很小,存储小文件时内存浪费会减少很多:

[root @ zxqtmp]# memcached-m512m-d-u root-c 8192-f 1.25-vv

[root @ zxqtmp]# slab类1:块大小96 perslab 10922

2类板:块大小120人lab 8738

3类板:块尺寸152 perslab 6898

4类板:块尺寸192 perslab 5461

第5类板:块尺寸240 perslab 4369

第6类板:块尺寸304 perslab 3449

第7类板:块尺寸384 perslab 2730

第8类板:块尺寸480 perslab 2184

9级平板:600人的大块尺寸lab 1747

第10类板:块尺寸752 perslab 1394

第11类板:块尺寸944 perslab 1110

第12类板:块尺寸1184 perslab 885

第13类板:块尺寸1480 perslab 708

第14类板:块尺寸1856 perslab 564

第15类板:块尺寸2320 perslab 451

第16类板:块尺寸2904 perslab 361

第17类板:块尺寸3632 perslab 288

第18类板:块尺寸4544 perslab 230

第19类板:块尺寸5680 perslab 184

平板类20:块尺寸7104 perslab 147

平板类21:块大小8880 perslab 118

平板类22:块大小11104 perslab 94

平板类23:块大小13880 perslab 75

平板类24:块大小17352 perslab 60

板坯等级25:块度21696 perslab 48

平板类26:块尺寸27120 perslab 38

板坯类别27:块尺寸33904 perslab 30

平板类28:块大小42384 perslab 24

板坯类别29:块尺寸52984 perslab 19

30级平板:块尺寸66232 perslab 15

第31类板:块大小82792 perslab 12

第32类板:块尺寸103496 perslab 10

第33类板:块尺寸129376 perslab 8

34级平板:块大小161720 perslab 6

第35类板:块尺寸202152 perslab 5

第36类板:块大小252696 perslab 4

板坯等级37:块度315872 perslab 3

板坯等级38:块尺寸394840 perslab 2

板坯等级39:块度493552 perslab 2

平板类40:块大小616944 perslab 1

第41类平板:块尺寸771184 perslab 1

第42类平板:块尺寸1048576 perslab 1

失败的tolistenontcpport 11211:Addressalreadyinuse

7、内存缓存对象删除原来与隐藏物机制

迷因缓存主要的隐藏物机制是LRU最近最少用的算法,加上项目过期失效,当存储数据到memcached中,可指定该数据在缓存中可以呆多久,如果memcached的内存不够用了,过期的平板会优先被替换,接着就会轮到最老的未被使用的平板电脑。在某些情况下(完整缓存),如果不想使用LRU算法,可以通过-M参数来启动memcached这样,memcahced在内存耗尽时,会返回一个报错信息。

-M内存耗尽时返回错误(而不是删除项目)

8、内存缓存服务端的安装

1)服务端的安装

memcached下载地址:http://www.danga.com/memcached/

memcached其他下载地址:http://memcached谷歌代码。com/files/memcached-1。4 .13 .焦油。地面零点

libevent下载地址:http://猴子。org/~ provs/libevent/

网友安装参考:http://实例。iteye。com/blog/1691705

由于memcache是基于libevent事件库文件的,所以要先安装libevetn:

wget https://github . com/downloads/lib event/lib event/lib event-1 . 4 . 13-stable . tar . gz

tarzxflibevent-1.4.13-stable.tar.gz

cdlibevent-1 . 4 . 13-稳定。/配置

制造

make安装

激光唱片.

安装内存缓存:

wgethttp://memcached.org/files/old/memcached-1.4.13.tar.gz

tarzxfmemcached-1.4.13.tar.gz

cdmemcached-1.4.13。/配置

制造

make安装

激光唱片.

开始错误报告:

[root @ zxq tools]# memcached-m1m-p 11212-d-c 8192

memcached:errorwhileloadingsharedlibraries:libevent-1.4 . so . 2:cannotopensharedobjectfile:Nosuchfileordirectory

解决方案:让系统加载到libevent库文件中。

echo/usr/local/lib/etc/LD . so . conf

ldconfig

2)启动memcached服务:

[root @ zxqmemcached-1 . 4 . 13]# which memcached

/usr/local/bin/memcached

memcached-m16m-p 11212-d-u root-c 8192

lsof-i:11212

COMMANDPIDUSERFDTYPEDEVICESIZE/off nodename

memcached 46673 root 26 uipv 42444550 t0tcp *:11212(侦听)

memcached 46673 root 27 uipv 62444560 t0tcp *:11212(侦听)

memcached 46673 root 28 uipv 42444590t 0 UDP *:11212

memcached 46673 root 29 uipv 62444600t 0 UDP *:11212

netstat-ln tup | grepmmcached

TCP 000 . 0 . 0 . 0:112120 . 0 . 0 . 0:* listen 46673/memcached

TCP 00:11212:* list EN46673/memcached

UDP 000 . 0 . 0 . 0:112120 . 0 . 0 . 0:* 46673/memcached

UDP 00:11212:* 46673/memcached

ps-ef|grepmemcached

root466731017:15?00:00:00mm cached-m16m-p 11212-d-u root-c 8192

3)memcached相关启动参数描述:

-p指定memcached服务侦听的TCP端口号,默认值为11211。

-m指定memcached服务可以缓存数据的最大内存,默认值为64MB。

-u运行memcached的用户

-d作为守护程序在后台运行。

-c最大并发连接数(默认为1024)是根据安装服务器的并发访问数设置的。

-vv在very vrebose模式下启动,调试信息和错误输出到控制台。

-P设置PID文件以保存memcached。

-l指定监听服务器的ip地址。

-f调谐因子

-M不使用LRU算法删除缓存,内存不足时会报错。

其他选项可以通过memcached -h h查看。

memcached-m15m-d-u root-P 11213-M-c 8192-P/var/run/memcached . PID-f 1.25-l 127 . 0 . 0 . 1

4)存储和查看数据

语法:命令名关键字标志超时字节\ \ \ r \ \ \ ndatablock \ \ \ r \ \ \ \ n

set k01 0 0 10 \ \ \ \ r \ \ \ \ n 999999999 \ \ \ \ r \ \ \ \ n

命令名设置/添加/替换

Set存储这些数据,如果它存在,以前的值将被替换。

只有当服务器不保留这个键-值对的数据时,Add才存储这些数据。

仅当服务器保留了该键值的数据时,Replace才存储该数据。

Key是下一个客户端需要存储的数据的键值。

Flags是一个任意的16位无符号整数(十进制)客户端,在检索内容时与数据和发送块一起存储在服务器上。它可以用作“位字段”来存储一些特定的信息,这些信息对于服务器来说是不透明的。

过期时间是终止时间。如果该值为0,则该项永远不会过期,尽管可能会被删除以便为其他缓存项腾出空间。如果不为0,则在终止时间之后,客户端无法再获取该项目的内容。

Bytes是后面数据块的字节长度,不包括\ \ \ r \ \ \ n它可以是0,但后面会跟一个空数据块。

Datablock \ \ \ r \ \ \ nDatablock是一大段8位数据,其长度由前面命令行中的字节指定。

使用printf打印数据,使用nc连接到memcached。

将key设置为k01,value设置为999999999,主要指定字符串大小要对应以下数据。

[root @ zxqlib]# printfsetk 010010 \ \ \ \ r \ \ \ \ n 999999999 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111212

存信息的

查看k01键的值:

[root @ zxqlib]# printfgetk 01 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111212

VALUEk01010

9999999999

结束

删除删除键k01的键-值对数据:

[root @ zxqlib]# printfdeletek 01 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111212

删除

Add添加一个键值。如果缓存中没有值,如果有值,它将响应NOT_STORED。

[root @ zxqbin]# printfsetkey 01002 \ \ \ \ r \ \ \ \ nab \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

存信息的

[root @ zxqbin]# printfaddkey 01002 \ \ \ \ r \ \ \ \ nab \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

未存储

替换当键值存在时,替换命令将替换缓存中的键。如果缓存中不存在该键,将报告NOT_STORED错误响应:

[root @ zxqbin]# printfreplacekey 01002 \ \ \ \ r \ \ \ \ n88 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

存信息的

[root @ zxqbin]# printfreplacekey 02002 \ \ \ \ r \ \ \ \ n99 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

未存储

Gets类似于get,只是它返回键-值对的标识值。

[root @ zxqbin]# printfsetkey 03005 \ \ \ \ r \ \ \ \ n 55555 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

存信息的

[root @ zxqbin]# printfgetskey 03 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

VALUEkey03055

55555

结束

[root @ zxqbin]# printfgetkey 03 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

VALUEkey0305

55555

结束

Cas用于设置键-值对,其语法类似于set,但它会在gets执行后使用额外的标识值来更改上次读取的键-值对。如果识别值不正确,将报告错误:

[root @ zxqbin]# printfgetskey 03 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

VALUEkey03057

88888

结束

[root @ zxqbin]# printfcaskey 030058 \ \ \ \ r \ \ \ \ n 99999 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

存在

[root @ zxqbin]# printfcaskey 030057 \ \ \ \ r \ \ \ \ n 99999 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

存信息的

[root @ zxqbin]# printfgetskey 03 \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

VALUEkey03058

99999

结束

5)stats查看memcached的当前实例信息:

[root @ zxqtmp]# printfstats \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111212

STATpID46673进程ID

状态时间25336服务器运行秒数

STATtime1494173893服务器当前unix时间戳

stat version 1 . 4 . 13内存缓存版本

statlibevent 1 . 4 . 13-稳定libevent版本

STATpointer_size64操作系统位数,64位。

STATrusage_user0.642902进程的累计用户时间。

STATrusage_system0.303953过程累计系统时间

STATcurr_connections10当前打开的连接

Stattotal _ Connections25自memecached运行以来的连接总数。

stat connection _ structure 11 memcached分配的连接结构数。

STATreserved _ fds20内部使用的fds数量。

STATcmd_get7执行的get命令总数。

STATcmd_set3执行set命令总数。

STATcmd_flush0已执行flush_all命令总数。

STATcmd_touch0touch命令请求的总数。

STATget _ hits 3获取点击次数

STATget _ miss 4获取未命中

STATdelete _ misses0delete删除未命中

stat delete _ hits 1删除命中

STATincr_misses0incr未命中次数

统计点击数增加点击数

STATdecr_misses0decr未命中次数

STATdecr_hits0decr点击次数

STATcas_misses0cas未命中

STATcas_hits0cas命中

STATcas_badval0使用的擦拭次数

stat touch _ hits 0触摸点击

stat touch _ misses 0触摸未命中

STATauth_cmds0身份验证命令处理时间

STATauth_errors0身份验证失败次数

STATbytes_read358读取的总字节数。

STATbytes_written160写入的总字节数。

STATlimit_maxbytes16777216分配的总内存(字节)

STATaccepting_conns1当前接受的连接数。

STATlisten_disabled_num0无效的侦听器的数量。

STATthreads4线程计数

STATconn_yields0号连接操作主动放弃。

STAThash _ power _ level16hash哈希表级别

STAThash_bytes524288当前哈希表大小

STAThash _ is _ expanding0hash哈希表正在扩展。

STATexpired _ unfetched0已过期,但未获得大对象的数量。

STATevicted _ unfetched0已被逐出,但尚未获得大对象的数量。

STATbytes166存储当前占用的字节数

STATcurr_items2当前存储的数据总数。

自STATtotal_items3启动后存储的数据总数。

STATevictions0LRU释放的对象数

STATreclaimed0存储新数据的过期数据条目数。

结束

统计项目查看项目行的内容:

[root @ zxqbin]# printfstatsitems \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

STATitems:1:number4该层中的对象数量(不包括过期的对象)

statitems:1:age 1941 LRU队列中最早对象的过期时间。

statitems:1:evident 0 llu释放的对象数

STATitems:1:evicted_nonzero0设置非零时间的LRU释放对象的数量。

statitems:1:Evicted _ time 0 LRU释放的对象上次存在的时间。

STATitems:1:outofmemory0无法存储对象的次数。

统计数据:1:尾板修复0次。

Statitems: 1:撤回了0次使用过期对象空间来存储对象。

statitems:1:expired _ unfedched 0已过期但尚未获取的对象数。

statitems:1:Evicted _ unfedched 0已逐出但未获取的对象数。

结束

stats cache dump slats _ id limit_num,slats _ id是stats items返回的值,即项目组号,limit _ num返回的记录数,0是返回所有记录,可以组合起来遍历memcache的所有记录数据:

[root @ zxqbin]# printfstatsitems \ \ \ \ r \ \ \ \ n | NC 127 . 0 . 0 . 111213

统计数字:1:数字5

统计数字:1:年龄25-89

统计信息:1:已驱逐0

STATitems:1:evicted_nonzero0

STATitems:1:evicted_time0

统计信息:1:内存不足0

统计数据:1:尾部修复0

统计信息:1:回收0

统计项:1:过期_未过期0

统计项:1:已逐出_未逐出0

统计数字:2:数字一

统计数字:2:3岁

统计信息:2:已驱逐0

STATitems:2:evicted_nonzero0

统计信息:2:已驱逐时间0

统计信息:2:内存不足0

统计数据:2:尾部修复0

统计信息:2:已回收0

统计项:2:过期_未过期0

统计信息:2:已逐出_未逐出0

结束

[root @ zxqbin]# printfstatscachedump 10 \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

项目关键字04[15b;1494188606s]

项目关键字03[5b;1494188606s]

项目关键字01[2b;1494188606s]

item userid[5b;1494188606s]

item userid[5b;1494188606s]

结束

[root @ zxqbin]# printfstatscachedump 20 \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

项目关键字05[35b;1494188606s]

结束

统计板显示各个平板的信息,包括矮胖的人或物的大小,数目和使用情况等:

printfstatsslabs \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

STAT1:chunk_size96chunk大小(字节)

STAT1:chunks_per_page10922每个页,面,张,版的矮胖的人或物数量

STAT1:total_pages1page数量

STAT1:total_chunks10922chunk总数量(每一页的块数*总页数)

STAT1:已用块6已被分配的矮胖的人或物数量

STAT1:free_chunks1过期数据空出的矮胖的人或物数

STAT1:free_chunks_end10915从未被使用过的矮胖的人或物数

STAT1:mem_requested481请求存储的字节数

STAT1:get_hits6get命令命中数

STAT1:cmd_set17

STAT1:delete_hits0

统计数据1:增加点击次数0

STAT1:decr_hits0

STAT1:cas_hits3

STAT1:cas_badval1cas数据类型错误数

STAT1:touch_hits0touch命令命中数

STAT2:块大小120

STAT2:chunks_per_page8738

统计2:总计_第1页

STAT2:total_chunks8738

STAT2:used_chunks2

stat 2:free _ chunk 0

STAT2:free_chunks_end8736

STAT2:mem_requested207

STAT2:get_hits0

STAT2:cmd_set3

STAT2:删除_点击0

统计2:增加点击次数0

STAT2:decr_hits0

STAT2:cas_hits0

STAT2:cas_badval0

STAT2:触摸点击0

STATactive_slabs2

STATtotal_malloced2097072

结束

统计设置可以查看一些memcached设置例如线程数

[root @ zxqbin]# printfstatssettings \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

STATmaxbytes15728640

STATmaxconns8192

STATtcpport11213

状态端口11213

统计界面127.0.0.1

STATverbosity0

STAToldest3537

STATevictionsoff

STATdomain_socketNULL

状态屏蔽700

统计增长因子1.25

STATchunk_size48

STATnum_threads4

STATnum_threads_per_udp4

STATstat _ key _前缀:

STATdetail_enabledno

STATreqs_per_event20

STATcas_enabledyes

STATtcp_backlog1024

STATbinding _协议自动自动协商

STATauth_enabled_saslno

STATitem_size_max1048576

STATmaxconns_fastno

STAThashpower_init0

STATslab _重新分配编号

STATslab_automoveno

结束

统计大小查看存在的项目大小和个数

[root @ zxqbin]# printfstatssizes \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

STAT966

STAT1282

结束

统计重置清理统计数据

printfstatsreset \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

全部刷新用于清理存储中的所有键值对:

[root @ zxqbin]# print flush _ all \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

附加将数据追加到当前缓存数据的之后,当缓存数据存在时才存储

[root @ zxqbin]# printfgetkey 07 \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

VALUEkey07025

aaaaabbbbbcccccdddddeeeee

结束

[root @ zxqbin]# printfappendkey 07005 \ \ \ \ r \ \ \ \ n _ @ @ @ # \ \ r \ \ \ \ n | NC 127。0 .0 .111213

存信息的

[root @ zxqbin]# printfgetkey 07 \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

VALUEkey07030

aaaaabbbbbcccccdddddeeeee _ @ @ @ #

结束

预先考虑将数据追加到当前缓存数据的之前,当缓存数据存在时才存储

[root @ zxqbin]# printfgetkey 07 \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

VALUEkey07030

aaaaabbbbbcccccdddddeeeee _ @ @ @ #

结束

[root @ zxqbin]# printfprependkey 07005 \ \ \ \ r \ \ \ \ n # # # # # \ \ r \ \ \ \ n | NC 127。0 .0 .111213

存信息的

[root @ zxqbin]# printfgetkey 07 \ \ \ \ r \ \ \ \ n | NC 127。0 .0 .111213

VALUEkey07035

# # # # # aaaaaabbbbbcccdddeeeee _ @ @ #

结束

也可以使用用于远程联接服务的标准协议或者实现此协议的软件(可为动词)连接memcached进入交互式操作

9、客户端的安装

安装灯/LNMP环境,要求街头流氓或nginx能解析服务器端编程语言(专业超文本预处理器的缩写)文件,才能继续安装客户端

安装memcache的服务器端编程语言(专业超文本预处理器的缩写)的客户端及memcache的扩展,下载服务器端编程语言(专业超文本预处理器的缩写)扩展:http://pecl。PHP。net/package/memcache选择要下载的memcache版本java .程序一样需要客户端(resion,tomcat),但不会像服务器端编程语言(专业超文本预处理器的缩写)一样编译。

在服务器端编程语言(专业超文本预处理器的缩写)服务器上安装memcache客户端:

wgethttp://pecl.php.net/get/memcache-2.2.5.tgz

tarzxfmemcache-2.2.5.tgz

cdmemcache-2.2.5

/usr/local/php/bin/phpize。/configure-enable-memcache-with-PHP-config=/usr/local/PHP/bin/PHP-config-with-zlib-dir

制造

制造安装

安装共享扩展:/usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-2013 12 26/

[root @ zxqmemcache-2。2 .5]# ll/usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-2013 12 26/

安装完会在此文件中生成memcache.so文件

-rwxr-xr-x1 rootrout 2604515月717:59毫米缓存。因此

-rwxr-xr-x1 rootrout 5893085月420:59opcache.so

修改php.ini配置文件:指定memcache.so文件路径

echo扩展=memcache。so/usr/local/PHP/etc/PHP。初始化设置文件的后缀名

grep^extension/usr/local/php/etc/php.ini

重启动街头流氓服务使服务器端编程语言(专业超文本预处理器的缩写)的配置生效

[root@zxq~]#apachectl-t

SyntaxOK

[root@zxq~]#apachectlgraceful

如果是nginx则重启动php-fpm服务

打开phpinfo加载网页,能看到memcache模块就算成功了!

建立测试文件,实现服务器端编程语言(专业超文本预处理器的缩写)与memcache交换数据:

?服务器端编程语言(专业超文本预处理器的缩写)

$ memcache=newmemcache

$ memcache-connect(\ \ \ ' 10。0 .0 .4 \ \ \ '11212)ordie(无法连接);

$memcache-set(\\\'key001\\\ '\ \ \ ' 123 \ \ \ ');

$memcache-set(\\\'key002\\\ '\ \ \ ' ABC \ \ \ ');

$ get _ value 001=$ memcache-get(\ \ \ ' key 001 \ \ \ ');

$ get _ value 002=$ memcache-get(\ \ \ ' key 002 \ \ \ ');

echoget _ value 002 . br

echo $ get _ value001

访问目录能读到123、abc、php程序与memcache交互成功!

10、内存缓存实现网集群的会议会话保持

修改所有网节点的php.ini配置文件指定会议文件路径到memcache服务器上

vim/usr/local/php/etc/php.ini

session.save_handler=memcache#指定会议存储方式

会话。save _ path=TCP://10。0 .0 .4:11212 #指定会议保存路径

memcached-m15m-d-u root-P 11212-M-c 8192-P/var/run/memcached。PID-f 1.25-l 10。0 .0 .四

集群架构多服务器同步会议的多种方式:

1)磅层可以做会话保持,例如

低压供电系统

nginx ip_hash

羟丙氧基饼干插件

PHP,java都可以用

2)软件层,可以做会议复制,例如

tomcat,resion,couchbase

3)会话共享,例如

memcache或其他工具的NoSQL工具,PHP常用这个

4)高并发场景:例如门户网站用饼干或饼干配合会议把用户级会话信息缓存在用户本地。

11、监控memcache需要监控的具体指标

1)端口11212

2)命中率:STAT get_hi

ts 3  STAT get_misses 4

3)反应时间:STAT uptime 25336

监控脚本:

#!/bin/sh [ $# -ne 2 ]&&{  echo $0 ip port  exit } export key1=key export wwwServerIp=$1 export wwwServerPort=$2 cmd=nc $wwwServerIp $wwwServerPort printf delete $key1\\\\r\\\\n | $cmd >/dev/null 2>&1 sleep 1 printf set $key1 0 0 6\\\\r\\\\n123\\\\r\\\\n|$cmd >/dev/null 2>&1 if [ `printf get $key1\\\\r\\\\n|$cmd|grep 123|wc -l` -eq 1 ]   then       echo mc is alive.       exit 0 else       echo mc is dead.       exit 2 fi

12、memcached调优

计算item占用空间:

item总大小=键长 值长 后缀长 item结构大小(48字节) 8(cas标志占用)

如果item_cas标志设置时,会有8字节的数据

item结构大小:32位系统32字节;64位系统48字节

例如:

memcached -u root -p 11212 -vv slab class   1: chunk size        96 perslab   10922 slab class   2: chunk size       120 perslab    8738 slab class   3: chunk size       152 perslab    6898 slab class   4: chunk size       192 perslab    5461 slab class   5: chunk size       240 perslab    4369 slab class   6: chunk size       304 perslab    3449 slab class   7: chunk size       384 perslab    2730 slab class   8: chunk size       480 perslab    2184 slab class   9: chunk size       600 perslab    1747 slab class  10: chunk size       752 perslab    1394 slab class  11: chunk size       944 perslab    1110 slab class  12: chunk size      1184 perslab     885 printf set leng 0 0 40\\\\r\\\\n1111111111222222222211111111112222222222\\\\r\\\\n|nc 127.0.0.1 11212 STORED

计算leng总长度:48 8 4 40=100

所以leng值就会选择slab 2的120字节里来存储leng数据:

[root@zxq htdocs]# printf stats cachedump 2 0\\\\r\\\\n|nc 127.0.0.1 11212 ITEM leng [40 b; 1494182061 s] END

优化方案:先估算将要存储的数据大小值,再通过-f选项调优chunk大小,以最小满足存储值大小存储数据,已达到最小内存浪费。

可使用-M启动memcache,不使用LRU算法删除数据,因为LRU不是全局的,而是针对slab区域的。可以使用脚本检测stats tiems的值,保证内存空闲,清除过久未访问的数据。

13、zabbix监控实例:

缓存命中率 = get_hits/cmd_get * 100% %uFF1Bget_misses的数字加上get_hits应该等于cmd_get

1)配置自动发现脚本

cat memdiscover.sh  #!/bin/sh #function:discovery memcache items memcache_discovery () {     Memitems=(`/usr/bin/printf stats\\\\r\\\\n|nc 127.0.0.1 11212|awk \\\'{print $2}\\\'`)     length=${#Memitems[@]}     printf {\\\\n     printf \\\'\\\\t\\\'\\\\data\\\\:[     for ((i=0;i<$length;i ))       do         printf \\\'\\\\n\\\\t\\\\t{\\\'         printf \\\\{#ITEMNAME}\\\\:\\\\${Memitems[$i]}\\\\}         if [ $i -lt $[$length-1] ];then            printf \\\',\\\'         fi       done printf \\\\n\\\\t]\\\\n  printf }\\\\n }

2)配置监控脚本

cat memcached-status.conf  #!/bin/sh #this is memcached ststus scripts #date 2017-05-08 function status (){ ip=127.0.0.1 port=11212 /usr/bin/printf stats\\\\r\\\\n|nc $ip $port } status | grep -w $1 | awk \\\'{print $3}\\\'

3)配置web页面

configureation => Templates => Create template

Template name:memcache_discovery

Groups In groups:nosql

configureation => Templates => memcache_discovery => Discovery => create discovery rule

name:memcache.stats

type:zabbix agent

key:memcache.stats

update interval:30

Fitters:{$ITEMANME}

configureation => Templates => memcache_discovery => item prototypes => create item prototype

name:mem.stat on $1

type:zabbix agent

key:mem.stats[{#ITEMNAME}]

configureation => Templates => memcache_discovery => Graph prototypes => create graph prototype

name:memcache on {#ITEMNAME}

items:Add prototype ==》 memcache_discovery:mem.stats on {#ITEMNAME}

$zabbix_get -s 127.0.0.1 -k mem.stats[get_hits]

61992

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3