2018-5-22

21.5 memcached命令行


·memcached 语法规则

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

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

·<command name> 可以是 set, add, replace

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

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

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

·<key> 客户端需要保存数据的key,名称自定义

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

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

·<bytes> 需要存储的字节数,当用户希望存储空数据时 <bytes> 可以为0。字节数写几,那么必须输入几位

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

·数据示例:

[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set key3 1 100 4
1234
STORED
get key3
VALUE key3 1 4
1234
END
replace key3 1 0 5
abcde
STORED
get key3
VALUE key3 1 5
abcde
END
delete key3
DELETED
get key3
END
^]
telnet> quit
Connection closed.

(输入错误需要按 Ctrl + 退格,退出按 Ctrl + ],再 quit )





21.6 memcached数据导出和导入


·重启memcached服务的时候,最好将数据导出,重启完之后,再将数据导入

我们先存储一些数据:

[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key3
END
set key3 1 0 5
abcde
STORED
get key3
VALUE key3 1 5
abcde
END
set name 1 0 6
alexis
STORED
set age 1 0 2
29
STORED
set k1 1 0 5
12345
STORED
^]
telnet> quit
Connection closed.

·查看数据

[[email protected] ~]# memcached-tool 127.0.0.1:11211 dump
Dumping memcache contents
Number of buckets: 1
Number of items  : 4
Dumping bucket 1 - 4 total items
add k1 1 1526958255 5
12345
add name 1 1526958255 6
alexis
add age 1 1526958255 2
29
add key3 1 1526958255 5
abcde

·导出数据

[[email protected] ~]# memcached-tool 127.0.0.1:11211 dump > data.txt
Dumping memcache contents
Number of buckets: 1
Number of items  : 4
Dumping bucket 1 - 4 total items

·导入数据:

[[email protected] ~]# nc 127.0.0.1 11211 < data.txt
NOT_STORED
NOT_STORED
NOT_STORED
NOT_STORED

(因为之前是add添加的数据,而且已经存在了,所以导入失败)

可以重启 memcached ,清空数据,再导入

[[email protected] ~]# systemctl restart memcached.service
[[email protected] ~]# nc 127.0.0.1 11211 < data.txt
STORED
STORED
STORED
STORED

但是导入数据后,查看依然没有数据

[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get k1
END
get name
END
get age
END
get key3
END
^]
telnet> quit
Connection closed.

这是因为导出数据时,在 data.txt 中的时间戳已经过期

增加一小时时间戳,并更改 data.txt 中时间戳

[[email protected] ~]# date -d "+1 hour" +%s
1526967232
[[email protected] ~]# vim data.txt

[[email protected] ~]# systemctl restart memcached.service
[[email protected] ~]# nc 127.0.0.1 11211 < data.txt
STORED
STORED
STORED
STORED
[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get k1
VALUE k1 1 5
12345
END
get name
VALUE name 1 6
alexis
END
get age
VALUE age 1 2
29
END
get key3
VALUE key3 1 5
abcde
END
^]
telnet> quit
Connection closed.

数据已经导入

因此,我们在 set 数据时,添加的 <exptime> 最好大一些。




21.7 php连接memcached


·查看已安装php-fpm模块:

[[email protected] ~]# /usr/local/php-fpm/sbin/php-fpm -m

·下载memcached php扩展:

[[email protected] src]# wget http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz
--2018-05-22 22:09:29--  http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz
正在解析主机 www.apelearn.com (www.apelearn.com)... 47.104.7.242
正在连接 www.apelearn.com (www.apelearn.com)|47.104.7.242|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:27366 (27K) [application/octet-stream]
正在保存至: “memcache-2.2.3.tgz”
100%[==============================================================================================================>] 27,366      --.-K/s 用时 0.1s
2018-05-22 22:09:29 (193 KB/s) - 已保存 “memcache-2.2.3.tgz” [27366/27366])
[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[[email protected] memcache-2.2.3]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
......
[[email protected] memcache-2.2.3]# make && make install
......
Installing shared extensions:     /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
[[email protected] memcache-2.2.3]# ls /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
memcache.so  opcache.a  opcache.so
[[email protected] memcache-2.2.3]# vim /usr/local/php-fpm/etc/php.ini##编辑配置

加上extension=memcache.so

[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/php -m

memcache模块已经添加成功

·下载测试脚本测试:

[[email protected] ~]# curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
[[email protected] ~]# cat 1.php
<?php
//连接Memcache Memcache
$mem = new Memcache;
$mem->connect("localhost", 11211);
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br>";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//保存数组数据
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
//关闭连接
$mem->close();
?>
[[email protected] ~]# /usr/local/php-fpm/bin/php 1.php
Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
[0] => aaa
[1] => bbb
[2] => ccc
[3] => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>[[email protected] ~]#
[[email protected] ~]#

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

最终可以看到数据如下:

[0] => aaa

[1] => bbb

[2] => ccc

[3] => ddd

(出现以上就是正确的)

错误汇总:

phpize时出现错误:

[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决方法:

[[email protected] memcache-2.2.3]# cd ..
[[email protected] src]# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
[[email protected] src]# tar -zvxf m4-1.4.9.tar.gz
[[email protected] src]# cd m4-1.4.9/
[[email protected] m4-1.4.9]# ./configure && make && make install
[[email protected] m4-1.4.9]# cd ../
[[email protected] src]# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
[[email protected] src]# tar -zvxf autoconf-2.62.tar.gz
[[email protected] src]# cd autoconf-2.62/
[[email protected] autoconf-2.62]# ./configure && make && make install
[[email protected] autoconf-2.62]# cd ../memcache-2.2.3/
[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226





21.8 memcached中存储sessions


session.save_handler = memcache ##指定存储类型

session.save_path = "tcp://192.168.65.128:11211" ##指定memcached服务器和端口

在/data/wwwroot/default/ 中编辑1.php

<?php
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>
[[email protected] test.com]# curl localhost/1.php
1527003347<br><br>1527003347<br><br>4bfh207asaueeasdelhu79em52

·如果使用的是apache,那么在httpd.conf中对应的虚拟主机中添加

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

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

php_value[session.save_handler] = memcache

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

[[email protected] test.com]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get 4bfh207asaueeasdelhu79em52
VALUE 4bfh207asaueeasdelhu79em52 0 37
TEST|i:1527003347;TEST3|i:1527003347;
END
^]
telnet> quit
Connection closed.

第四课写的比较匆忙,理解不充分,需要再看一遍

原文地址:http://blog.51cto.com/11530642/2119284

时间: 2024-11-04 15:51:33

2018-5-22的相关文章

三级菜单的增删改-2018.2.22(下)

百度了一下三级菜单增删改的代码,要我说呢,这个代码要我自己写呢,估计几天也写不出来,这个代码写的,怎么说呢,非常巧妙,然后呢 我把他的代码拷贝下来自己看了一遍然后修改了一遍 算是比他原来的要更加好一点了吧(当然是我认为了)还有就是现在感觉他里面有些代码我看不懂 它的用处,也不知道是真的没用,还是我真的没看懂,这是一个问题,不管了吧 反正算是修改好了,好了 . 他的代码: f_read = open('menu_file','r',encoding='utf8') #读取menu_file文件中的

2018.4.22

2018.4.22 早. 说是要记录一下每一天的东西,但实际上已经好几天没有写了. 早上起来发现下雨了,原本准备早上起来去上自习把算法设计写了, 看来只能窝在宿舍里了(其实是犯懒 昨天有开始了久违的跑步,希望能坚持下去=.= 蓝桥杯和数模比赛时间冲突了,只能放弃数模了,说实话心里有点不爽 希望今天能把算法设计的作业写了,再复习一下. 就这样,溜了溜了 原文地址:https://www.cnblogs.com/DLKKILL/p/8905862.html

2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language

老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这次分享.另外与会的同学大多都是大二大三的"萌新",考虑到受众水平和技术分享的性质,所以实际上这次分享涉及到的知识点都相对基础,当然为了寓教于乐,本人也十分讨厌着重介绍基础语法时可能引起的枯燥,所以加了少少的私货,并且也针对 1.11 及之前版本中或优雅,或局限的特性做了发散性的讲解. 总而

2018.1.22 7周1次课

七周一次课(1月22日) 10.1 使用w查看系统负载 10.2 vmstat命令 10.3 top命令 10.4 sar命令 10.5 nload命令 众所周知,生病了需要去医院看病,大夫首先要询问我们哪里不舒服,然后再通过观察和自己的经验,大体上就能判定我们得的是什么病.然而Linux不会说话,它不会主动告诉我们哪里出现了问题,需要我们自己去观察.那么如何评估系统运行状态是否良好呢?下面阿铭就介绍一些帮我们分析系统状态的工具. 10.1 使用w查看系统负载 相信所有Linux管理员最常用的命

三级菜单的增删改-2018.2.22(上)

1.首先把字典内容存到txt文档里面 2.读取txt文本内容以及用eval将文本转化为字典 3.可以看出来昨天写的三级菜单并不适用今天要使用的增删改 #_author_:"Bushii" #data:2018/2/21 menu= { '山东' : { '青岛' : ['四方','黄岛','崂山','李沧','城阳'], '济南' : ['历城','槐荫','高新','长青','章丘'], '烟台' : ['龙口','莱山','牟平','蓬莱','招远'] }, '江苏' : { '苏

2018.3.22 一周四次课

SELinux临时关闭:setenforce 0SELinux永久关闭:vi /etc/selinux/config 进入编辑文件找到SELINUX=enforcing这一行,输入"i"进入编辑模式,修改为SELINUX=disabled,按ESC,然后输入wq保存退出,重启系统. 1.1 单用户模式 (只允许在物理机操作) 重启linux有三种命令: 1)reboot 2)init 6 3)init 0 关机 4)shutdown -r now 1.1 首先要重启linux rebo

2018.3.22 13周4次课

十三周四次课(3月22日) 13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令 13.1 设置更改root密码 root用户的mysql的超级管理员用户,跟linux的root用户类似.但需要区分,这个root用户和系统的root用户不是一个用户,需要注意.也可以创建一个普通用户来连接mysql 首次进入mysql数据库是不用密码的.默认mysql数据库的root用户密码为空,连接时不需要密码 设置密码: 启动mysql:service mysqld star

2018.8.22 练习赛

T1 井字棋 题意:给定一井字棋残局,问结果 状压记忆化暴搜,博弈 1 #include<stdio.h> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 int po[20],ch[256]; 7 int f[100000][3]; 8 int judge(int s) 9 { 10 int g[10]; 11 for(int i=

2018.09.22 列表排序

# -*- coding:utf-8 -*- # 排序默认按照 ASCII码 排序. # 符号在前,大写在后,小写再大写后面. # sort 排序 L1 = ['a','c','v','s','g','t','A','#','&',] L1.sort() print("结果:",L1) print("----- end -----") 结果: ['#', '&', 'A', 'a', 'c', 'g', 's', 't', 'v'] ----- en

2018.9.22 Bubble Cup 11-Finals(Online Mirror,Div.2)

感受了一下ACM的感觉,然后被神题和神犇们暴踩了 夭寿啦,机房大佬非法组队啊 比赛前i207M插的"怕不是不到九点就要弃疗"的flag成功生效 一开始先扫了一遍题,我一开始以为A题是个扫一遍的题,然后发现自己naive了,遭到了wyt的嘲讽,不过i207M觉得这是个权值数据结构,然而我太蒻了并不会,于是他就去写了.然后就听到Zhang_RQ说B题是个圆方树,果断弃了,终于发现C很可做,这不是泡泡堂么,然后我写了一发过掉了.然后i207M交了一发$A$挂了,发现他读错题了,然后就听到zh