天天看点

memcached的一些简单使用

memcached也是和mysql一样有一个命令行,能在命令行中创建和检索数据。

使用telnet可以进入memcached命令行:

创建数据:

查询数据:

数据过期了的话就不存在了:

创建数据命令释义:

set key2 0 30 2 set: 创建数据命令(command name) key2: 创建一个名为key2的key (key) 0 : 特殊标记位(flags) 30 : 定义这个数据的过期时间为30秒(exptime) 2 : 定义这个key所能够存储的value长度,单位是字节 (bytes)

Memcached语法规则:

replace替换数据示例:

delete删除数据示例:

add添加数据示例:

因为memcached的数据是存储在内存中的,当服务需要重启的时候,需要先让memcached里的数据写到磁盘中,不然数据会丢失。所以介绍一下memcached如何导出和导入数据。

memcached中添加了如下几个不过期的数据:

添加完之后,memcached的状态如下:

将数据导出到一个文件里:

注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的

重启服务后将数据导入到memcached里:

如果导入后发现没有数据,这是因为备份文件里记录的时间戳已经过期了,可以修改文件中的时间戳保证数据的有效期。可以写一个简单的脚本批量替换这些文件中的时间戳:

然后再到memcached里查看数据:

可以看到,数据正常导入了。

在LNMP、LAMP等环境下,我们需要让php与memcached进行交互,就像php与mysql交互那样,php也得通过某个模块连接memcached后,才能进行数据的呈现、交互等操作。

1.先安装php的memcache扩展,我这里的php是LNMP环境的并且在之前已经安装好了,所以现在进行扩展即可:

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

然后修改php.ini添加一行extension="memcache.so“

检查/usr/local/php-fpm/bin/php -m里是否有memcache模块:

测试:

1.下载测试脚本:

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

2.执行测试脚本:

测试输出如上,代表没问题。

在负载均衡集群中,用户第一次访问的是A服务器,并且在该服务器上登录了账户,这个登录信息就保存在session中。由于是集群的关系,所以用户可能下一次再访问的时候就不是访问到A服务器上,而是访问到B服务器上了。但是之前的session却保存在A服务器上,那么用户在B服务器上就只能重新登录一次,因为在B服务器上并没有session信息。所以为了让集群中的服务器都能够共享session,就可以把session存储在一个memcached服务器中,所有的web服务器往这台memcached服务器上读session信息,就能做到简单的session共享。

这里演示的是lnmp环境下的配置:

php服务默认会把session信息存在本地文件中,所以需要修改存储的类型。

1.编辑php.ini配置文件添加以下两行:

session.save_handler = memcache # 指定session的存储类型 session.save_path = "tcp://192.168.77.130:11211" # 指定memcached服务器的ip和端口

或者php-fpm.conf对应的pool中添加以下两行:

php_value[session.save_handler] = memcache php_value[session.save_path] = " tcp://192.168.77.130:11211"

2.修改完之后重启服务:

3.测试,下载测试文件 + 移动文件到默认站点目录并更名 + curl测试,素质三连:

那个 0rmd502kjrsvrnqhqtn1a0eih6 就是memcached中的key,通过这个key才能去memcached里拿值,如果没有这个key的话,可能是配置文件没配置对。

4.进入memcached命令行,看看有没有存储到对应的session数据:

如上,可以看到get到了该键的值,证明没问题,能够正常存储。

本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/2055498,如需转载请自行联系原作者