温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

内存缓存软件 memcached

发布时间:2020-05-28 10:40:51 来源:网络 阅读:678 作者:lsy950109 栏目:数据库

第1章 memcached

内存缓存软件 (内存比磁盘快)

分为服务端和客户端

服务端 memcached

客户端memcache

 

诞生的原因。

2003年诞生了memcached

web1.0 2005以前    企业提供内容为主。

web2.0 2005-2012    企业只提供平台,用户参与上传和下载内容。

目标:

解决高并发访问的问题,减轻传统数据库mysql的压力。

不关注数据可靠性,只关心高并发读写。

 

差异化发展。

 

企业应用场景:

1、数据库前端的缓存

   读数据: 开发程序从逻辑上,首先访问memcached。如果memcached没有所需要的数据在访问mysql

   写数据: 如果在写数据库的同时,把数据库写入到memcached。或者写入mysql的同时,由mysyl复制到memcached

linux运维角色,搭建memcached服务,提供服务(使用的信息问开发)

内存缓存软件 memcached

2、集群后端的共享会话服务session

session门票。如果在网站内有了这个门票,就可以浏览任意界面。

解决共享会话的方案:

1)nginx的调度算法IP_hash(缺点:导致负载不均衡)

2)通过memcached做会话共享。

3)cookies(放在用户浏览器端)优点:可以大并发。缺点:容易篡改,不安全。

 

 

 

1.1搭建memcached服务端

搭建memcached服务

1libeventepoll模型,libevent作为事件通知机制)

yum install libevent-devel -y

rpm -qa libevent-devel

2、下载memcached

yum install memcached -y

rpm -qa memcached

3、启动服务并检查

[root@db01 ~]# memcached -m 16m -c 2048 -uroot -p 11211 -d

-m 指定内存 -c 多少访问连接  -u 指定用户 -p 指定端口号 -d 以守护进程的方式

[root@db01 ~]# netstat -lntp|grep memcache

tcp       0      0 0.0.0.0:11211        0.0.0.0:*       LISTEN      4026/memcached     

tcp       0      0 :::11211             :::*            LISTEN      4026/memcached 

 

MySQL数据库管理

Memcached管理

MySQLinsert语句

Memcachedset命令

MySQLselect语句

Memcachedget命令

MySQLdelete语句

Memcacheddelete命令

 

操作Memcached的相关命令的语法

以下为操作Memcached的相关命令基本语法:

set                key     0       0         0

<command name>  <key> <flags> <exptime>  <bytes>\r\n

<datablock>\r\n

<status>\r\n

 

命令

说明

command name

set无论如何都进行写入数据,会覆盖老数据

add只有对应数据不存在时才添加数据

repalce只有数据存在时进行替换数据

append往后追加:append<key>datablock<status>?

prepend往前追加:prepend<key>datablock<status>

cas按版本号更改

key

普通字符串,要求小于250个字符,不包含空格和控制字符

flags

客户端用来标识数据格式的数值,如jsonxml、压缩等

exptime

存活时间s0为永远,小于30天,60*60*24*30为秒数

大于30天为unixtime

bytes

byte字节数,不包含\r\n,根据长度截取存/取的字符串,可以是0,即存空串

datablock

文本行,以\r\n结尾,当然可以包含\r\n

status

STORED/NOT_FOUND

 

下载telnet nc

yum install telnet nc -y

 

telnet方式

存进去 拿出来 删除掉

[root@web03 ~]# telnet 127.0.0.1 11211

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

set k1 0 0 6       

oldboy

STORED

get k1

VALUE k1 0 6

oldboy

END

delete k1

DELETED

 

nc方式

[root@web03 ~]# printf "set key008 0 06\r\noldboy\r\n"|nc 127.0.0.1 11211

STORED

printf方式查看

printf "get key008\r\n"|nc127.0.0.1 11211

删除

printf "delete key008\r\n"|nc127.0.0.1 11211

三种 写入 读取删除

[root@web03 ~]#printf "set key008 0 0 6\r\noldboy\r\n"|nc 127.0.0.1 11211

STORED

[root@web03 ~]# printf"get key008\r\n"|nc 127.0.0.1 11211

VALUE key008 0 6

oldboy

END

[root@web03 ~]# printf"delete key008\r\n"|nc 127.0.0.1 11211

DELETED

 

memcached查看帮助

memcached -h

 

Memcached启动命令相关参数

命令参数

说明

进程与连接设置:

-d

以守护进程(daemon)方式运行服务

-u

指定运行Memcached的用户,如果当前用户为root,需要使用此参数指定用户

-l

指定Memcached进程监听的服务器IP地址,可以不设置此参数

-p(小写)

指定Memcached服务监听TCP端口号,默认为11211

-P(大写)

设置保存Memcachedpod文件($$),保存PID到指定文件

内存相关设置

-m

指定Memcached服务可以缓存数据的最大内存,默认为64MB

-M

Memcached服务内存不够时禁止LRU,如果内存满了会报错

-f

chunk size增长因予,默认1.25

-L

启用大内存页,可以降低内存浪费,改进性能

并发连接设置

-c

最大的并发连接数,默认是1024

-t

线程数,默认4.由于Memcached采用的是NIO,所以太多线程用处不大

-R

每个event最大请求数,默认20

-C

禁用CAS(可以禁止版本计数,减少开销)

调试参数

-v

打印较少的errors/warnings

-vv

打印非常多调试信息和错误输出到控制台,也打印客户端命令及响应

-vvv

打印极多的调试信息和错误输出,也打印内部状态转变

 

 

 

1.2memcached客户端

php所在服务器上安装memcached客户端,程序才能访问memcached

 

memcache-2.2.5.tgz数据包拉到/home/oldboy/tools/

 

然后进行编译安装

tar zxf memcache-2.2.5.tgz

cd memcache-2.2.5

/application/php/bin/phpize

./configure --enable-memcache --with-php-config=/application/php/bin/php-config

make

make install

cd ../

 

 

[root@web02 tools]# ll/application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/

total 256

-rwxr-xr-x 1 root root 258064 Jun  9 14:44 memcache.so

 

 

 

echo '<?php phpinfo(); ?>' >/application/nginx/html/blog/a.php

[root@web02 php]# cat /application/nginx/html/blog/a.php

<?php

phpinfo();

?>

通过页面:blog.etiantian.org/a.php检查mc的配置情况。

 

配置:

vim /application/php/lib/php.ini

extension_dir ="/application/php-5.5.32/lib/php/extensions/no-debug-non-zts-20121212/"

extension = memcache.so

重启Php

pkill php-fpm

/application/php/sbin/php-fpm

 

再次通过页面:blog.etiantian.org/a.php检查mc的配置情况。ctrl + F

搜索memcache页面内容,如果有结果,表示成功。

 

 

管理memcachedweb

memadmin-1.0.12.tar.gz包拉进 /home/oldboy/tools/

tar zxvfC       memadmin-1.0.12.tar.gz  /application/nginx/html/blog/

进行指定解压

 

Memcached状态信息详细说明

参数

描述

实际作用

pid

28123

memcache服务进程ID

查看服务信息

uptime

20063728

服务已运行秒数

time

1440577412

服务当前Unix时间戳

version

1.4.4

Memcache版本

libevent

1.4.13-stable

libevent版本

pointer_size

64

操作系统指针大小

rusage_user

645314.961214

进程累计用户时间

分析占用CPU的情况

rusage_system

1134305.468357

进程累计系统时间

cuur_connections

1361

当前连接数

分析连接数情况

total_connections

18299935

Memcached运行以来连接总数

connection_structures

12455

Memcached分配的连接结构数量


reserved_fds

20

内部使用的FD


cmd_get

60424570825

get命令请求次数

分析命令率情况

get_hits

58105159197

get命令命中次数

get_misses

2319411628

get命令未命中次数

curr_items

24628253

当前的对象数目

分析对象数LRU频率

total_items

854196259

当前存储占用的字节数

evictions

7509

LRU释放的对象数目

 

 

1.2.1Slab内存管理机制

现在的Memcached是利用Slab Allocation机制来分配和管理内存的,过程如下:

1)提前将大内存分配大小为1MB的若干个slab,然后针对每个slab再进行小对象填充,这个小对象称为chunk,避免大量重复的初始化和清理,减轻了内存管理器的负担。

Slab Allocation 内存分配的原理是按照预先规定的大小,将分配给Memcached服务的内存预先分割成特定长度的内存块(chunk),再把尺寸相同的内存块(chunk)分成组(chunks slab class),这些内存块不会释放,可以重复利用。

2)新增数据对象存储说明。

Memcached服务器中保存着slab内空闲chunk的列表,它会根据该列表选择chunk,然后将数据缓存于其中。当有数据存入时,Memcached根据接收到的数据大小,选择最合适数据大小的slab,分配一个能存下这个数据的最小内存块(chunk)。例如:有100字节的一个数据,就会被分配存入下面的112字节的一个内存块中,这样会有12字节被浪费掉,这部分空间就不能被使用了,这也是SlabAllocator机制的一个缺点。

内存缓存软件 memcached

1.2.2数据存储机制

需要被缓存的数据以key/value键值对的形式保存在服务器端

 

 内存缓存软件 memcached

 

 

 

 

 

 

 

 

 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI