1.memcached命令行

yum install -y telnet 

telnet 127.0.0.1 11211  //进入到nosql

set命令用来存储数据

set key2 0 30 2   // key2是key的名字(memcached属于key valcue所以要一个key和value),最后一个2表示 要写(存)的数值是2位的

NoSQL——2_第1张图片

第一个key2写入 12两位,stored保存,第二个key1要写3位的,写了12两位没反应是错误的。后面再写三位也出错了

所以指定了3位 就要写三位。

虽然已经显示stored,但是不知道是否保存了。用get key1查看

image.png

显示END 并没有数据,是因为中间的20意义为20秒后过期,数据已经过期了自然就看不到了。


memcached语法规则:

输入错误时候清空ctrl+u,退格要加ctrl键

  \r\n \r\n

 注:\r\n在windows下是Enter键 

  可以是set, add, replace

 set表示按照相应的存储该数据,没有的时候增加,有的时候覆盖

 add表示按照相应的添加该数据,但是如果该已经存在则会操作失败

 replace表示按照相应的替换数据,但是如果该不存在则操作失败。

  客户端需要保存数据的key

是一个16位的无符号的整数(以十进制的方式表示)。 该标志将和需要存储的数据一起存储,并在客户端get数据时返回。 客户端可以将此标志用做特殊用途,此标志对服务器来说是不透明的。

  为过期的时间。 若为0表示存储的数据永远不过期(但可被服务器算法:LRU 等替换)。 如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。

  需要存储的字节数,当用户希望存储空数据时可以为0

 需要存储的内容,输入完成后,最后客户端需要加上\r\n(直接点击Enter)作为结束标志。


试验例:

注意替换的时候如果出现NOT_STORED 那就是数据已经过期了,替换失败。

NoSQL——2_第2张图片



2.memcached数据导出和导入

比如重启服务时最好导出一下,重启结束后导入。

存储几条数据作为实验:

NoSQL——2_第3张图片

退出telenet,ctrk+】,然后quit

NoSQL——2_第4张图片

memstat --servers=127.0.0.1:11211 查状态,有13个项目等等,之前的操作

NoSQL——2_第5张图片

导出:

memcached-tool 127.0.0.1:11211 dump > data.txt

NoSQL——2_第6张图片

NoSQL——2_第7张图片

只导出来三个,其他都过期了,可以重定向到其他文件里。

导入:

 nc 127.0.0.1 11211 < data.txt

NoSQL——2_第8张图片

失败,因为是add里面已经有了不会去覆盖。只能重启memcached把数据清空。

systemctl restart memcached //重启服务

NoSQL——2_第9张图片

再导入就成功了。

再进入telent发现name等值没了,因为导出的数据是带有一个时间戳的,意思是过这个时间点就会过期,所以导入前可以vim data.txt把时间戳的值改大一点( 注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的)

NoSQL——2_第10张图片

在data.txt里 加一个小时的时间戳 就可以成功了。



3.php连接memcached

NoSQL——2_第11张图片

里还没有memcache的模块

先安装php的memcache扩展

cd /usr/local/src/

weget http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz //安装

tar zxf memcache-2.2.3.tgz  //解压

cd memcache-2.2.3 

/usr/local/php-fpm/bin/phpize  //生成config文件

./configure --with-php-config=/usr/local/php-fpm/bin/php-config  

make && make install  //编译

image.png

安装完后会有类似这样的提示:Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/

image.png

然后修改php.ini添加一行extension="memcache.so“,放到扩展模块的区域比较好

NoSQL——2_第12张图片

检查/usr/local/php-fpm/bin/php -m

image.png

里面已经出现了


下载测试脚本 

curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null

1.php内容也可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/1.php

执行脚本

/usr/local/php-fpm/bin/php 1.php

或者将1.php放到某个虚拟主机根目录下面,在浏览器访问,即可看到效果

最终可以看到数据如下:

 [0] => aaa

 [1] => bbb

 [2] => ccc

 [3] => ddd


4.Memcached中存储session


本实例是在lamp/lnmp环境下实现

编辑php.ini添加两行

session.save_handler = memcache session.save_path = "tcp://192.168.0.9:11211"  

或者httpd.conf中对应的虚拟主机中添加

php_value session.save_handler "memcache" php_value session.save_path "tcp://192.168.0.9:11211"  

或者php-fpm.conf对应的pool中添加

php_value[session.save_handler] = memcache

php_value[session.save_path] = " tcp://192.168.0.9:11211 "

wget http://study.lishiming.net/.mem_se.txt

mv .mem_se.txt  /usr/local/apache2/htdocs/session.php

其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php

curl localhost/session.php 

类似于1443702394

1443702394

i44nunao0g3o7vf2su0hnc5440

telnet 127.0.0.1 11211

get i44nunao0g3o7vf2su0hnc544