文档章节

memcached命令行及其用法

lyy549745
 lyy549745
发布于 08/18 17:15
字数 2100
阅读 10
收藏 0

21.5 memcached命令行

创建数据

yum install -y telnet

利用telnet命令连接memcached数据库

telnet 127.0.0.1 11211

#写入数据

set key2 0 30 2
12
STORED

 

这个是错误的示范,因为0 30 已经存在

set key 0 30 3
12

CLIENT_ERROR bad data chunk
ERROR

检测存储状态

#利用get key值查看

get key
END
get key2
END

#因为定义了过期时间,且已经过期,所以get key是没有任何数据显示

 

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)作为结束标志。

 

 Memcached数据示例

set key3 1 100 4
abcd
STORED
get key3
VALUE key3 1 4
abcd
END
replace key3 1 200 5
abcdx
STORED
get key3
VALUE key3 1 5
abcdx
END
delete key3
DELETED
get key3
END

 

21.6 memcached数据导出和导入

mamcached-tool命令能实现数据导出导入

1 首先telnet进去memcached数据库创建测试数据

set name 1 0 5
Kevin
STORED
set age 1 0 2
18
STORED
set sex 1 0 4
male
STORED

 

2 退出telnet:ctrl+]

^]             ctrl+]

telnet> quit        输入quit命令退出

Connection closed.     退出

 

3 查看memcached状态

memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)
 pid: 617
 uptime: 79684
 time: 1530688689
 version: 1.4.15
 libevent: 2.0.21-stable
 pointer_size: 64
 rusage_user: 1.421258
 rusage_system: 0.940525
 curr_connections: 10
 total_connections: 17
 connection_structures: 11
 reserved_fds: 20
 cmd_get: 13
 cmd_set: 16
 cmd_flush: 0
 cmd_touch: 0
 get_hits: 8
 get_misses: 5
 delete_misses: 2
 delete_hits: 2
 incr_misses: 0
 incr_hits: 0
 decr_misses: 0
 decr_hits: 0
 cas_misses: 0
 cas_hits: 0
 cas_badval: 0
 touch_hits: 0
 touch_misses: 0
 auth_cmds: 0
 auth_errors: 0
 bytes_read: 716
 bytes_written: 10871
 limit_maxbytes: 67108864
 accepting_conns: 1
 listen_disabled_num: 0
 threads: 4
 conn_yields: 0
 hash_power_level: 16
 hash_bytes: 524288
 hash_is_expanding: 0
 bytes: 216
 curr_items: 3
 total_items: 12
 expired_unfetched: 0
 evicted_unfetched: 0
 evictions: 0
 reclaimed: 2

其中 cmd_set: 16 是刚刚创建的数据项目数量

delete_hits: 2 刚刚删除的项目

 

4 把数据导出

memcached-tool 127.0.0.1:11211 dump
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 3
Dumping bucket 1 - 3 total items
add name 1 1530609005 5
Kevin
add age 1 1530609005 2
18
add sex 1 1530609005 4
male

如果不加重定向操作,会显示预览效果

导出重定向到指定文件

memcached-tool 127.0.0.1:11211 dump > mem_data0704.txt
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 3
Dumping bucket 1 - 3 total items
cat !$
cat mem_data0704.txt
add name 1 1530609005 5
Kevin
add age 1 1530609005 2
18
add sex 1 1530609005 4
male

 

5 从文件导入数据库

nc 127.0.0.1 11211 < mem_data0704.txt
NOT_STORED
NOT_STORED
NOT_STORED

NOT_STORED的原因,是因为刚刚建立的数据是add进去的,所以数据存在,再导入的话就是覆盖操作,无意义,

所以需要重启一下memcached服务来清空数据库,别忘了memcached的容量是保存在内存中,服务重启了,数据就会被清空。

systemctl restart memcached

再次导入数据,导入成功。

nc 127.0.0.1 11211 < mem_data0704.txt
STORED
STORED
STORED

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

要使数据保存时间久点的话,需要修改导出文件的时间戳。

例如,要加一天的时间戳,先把1天的时间戳值取出来

date -d "+1 day" +%s
1530776745

查看 导出时间的文件戳是多少

cat mem_data0704.txt
add name 1 1530609005 5
Kevin
add age 1 1530609005 2
18
add sex 1 1530609005 4
male

修改理想的时间戳

sed -i 's/1530609005/1530776745/g' mem_data0704.txt
cat mem_data0704.txt
add name 1 1530776745 5
Kevin
add age 1 1530776745 2
18
add sex 1 1530776745 4
male

再次导入数据库,

nc 127.0.0.1 11211 < mem_data0704.txt
STORED
STORED
STORED

再次进入数据库,查看数据是否存在

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get name
VALUE name 1 5
Kevin
END
get age
VALUE age 1 2
18
END
get sex
VALUE sex 1 4
male
END

导入成功,done.

 

Q&A:

为什么建库的时候,定义的过期时间值与实际不同,导出的时候数据变成一个时间戳的值?

这是因为系统在创建数据的时候会指定过期时间的,而导出的文件是从memcached导出的。

 

21.7 php连接memcached

先安装php的memcache扩展

cd /usr/local/src/
wget 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
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install

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

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

找到extension=

添加一行extension="memcache.so"

检查 memcached是否被加进去了

/usr/local/php-fpm/sbin/php-fpm -m
[PHP Modules]
cgi-fcgi
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcache
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

 

下载测试脚本 

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

21.8 memcached中存储session

查看session存放方式

vim /usr/local/php-fpm/etc/php.ini
session.save_handler = files

files表示sesision存放在本地/tmp/,每产生一个session会产生一个文件

测试如下:

测试前的文件ls状态

ls -lt /tmp/
srw-rw-rw- 1 root    root       0 Jul  4 18:18 aming.sock
srw-rw-rw- 1 root    root       0 Jul  4 18:18 php-fcgi.sock
srw-rw-rw- 1 root    root       0 Jul  4 17:29 aaa.sock
drwxr-xr-x 2 root    root    4096 Jul  2 10:59 hsperfdata_root
srwxrwxrwx 1 mysql   mysql      0 Jun 30 15:48 mysql.sock
-rw-r--r-- 1 root    root    1283 Jun 27 18:02 fuxi.com_access.log
srwxr-xr-x 1 root    root       0 Jun 26 04:06 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwx------ 3 root    root    4096 Apr 19 14:24 systemd-private-f7277ce00b84475293449af32306aba8-ntpd.service-bg2rEZ

在虚拟主机目录创建php脚本

cd /data/wwwroot/
wget http://study.lishiming.net/.mem_se.txt
mv .mem_se.txt  11.php
curl localhost/11.php
1530699618<br><br>1530699618<br><br>vt380k4sru58kad7k7qfsio8a6
curl localhost/11.php
1530699618<br><br>1530699618<br><br>vt380k4sru58kad7k7qfsio8a6
curl localhost/11.php
1530699618<br><br>1530699618<br><br>vt380k4sru58kad7k7qfsio8a6

curl了3次后,发现多了3个php-fpm产生临时文件,这个正是要找的会话文件

ls -lt /tmp/
total 24
-rw------- 1 php-fpm php-fpm   37 Jul  4 18:25 sess_0j4a3r7b5ec00668rn0hjsonk4
-rw------- 1 php-fpm php-fpm   37 Jul  4 18:20 sess_vt380k4sru58kad7k7qfsio8a6
-rw------- 1 php-fpm php-fpm   37 Jul  4 18:18 sess_jbv3fihdervat4dceo879mccs7
srw-rw-rw- 1 root    root       0 Jul  4 18:18 aming.sock
srw-rw-rw- 1 root    root       0 Jul  4 18:18 php-fcgi.sock
srw-rw-rw- 1 root    root       0 Jul  4 17:29 aaa.sock
drwxr-xr-x 2 root    root    4096 Jul  2 10:59 hsperfdata_root
srwxrwxrwx 1 mysql   mysql      0 Jun 30 15:48 mysql.sock
-rw-r--r-- 1 root    root    1283 Jun 27 18:02 fuxi.com_access.log
srwxr-xr-x 1 root    root       0 Jun 26 04:06 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwx------ 3 root    root    4096 Apr 19 14:24 systemd-private-f7277ce00b84475293449af32306aba8-ntpd.service-bg2rEZ

要修改这些会话文件的存放路径,需要做如下操作。

把会话文件存到memcached,如下操作:

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

php_value[session.save_handler] = memcache

php_value[session.save_path] = "tcp://ip:port"

重启php

/etc/init.d/php-fpm restart

删除/tmp/下面的会话文件

rm -f /tmp/se*

再次进入可以看到会话文件没有加载到/tmp下面

ls -lt /tmp/

进行curl测试

curl localhost/11.php

1530701432<br><br>1530701432<br><br>e75l0ab8qpp36oapkmun763h53

e75l0ab8qpp36oapkmun763h53是key值,有key值才是正常的输出,如果无key值是错误输出

进入memcached查看k-v

telnet 127.0.0.1 11211

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

get e75l0ab8qpp36oapkmun763h53

VALUE e75l0ab8qpp36oapkmun763h53 0 37

TEST|i:1530701432;TEST3|i:1530701432;

END

正常输出,done.

© 著作权归作者所有

共有 人打赏支持
lyy549745
粉丝 7
博文 90
码字总数 213013
作品 0
深圳
私信 提问
【原创】memcached 中的命令行参数解析

本文主要是以 memcached 源码为例,讲解如何在 linux 下解析命令行参数。 安装 memcached 后,查看其可用选项: [root@Betty ~]# memcached -hmemcached 1.4.14-p <num> TCP port number to ...

摩云飞
2013/04/02
0
0
memcached命令行参数说明

启动Memcache -p <num> 设置TCP端口号(默认不设置为: 11211)-U <num> UDP监听端口(默认: 11211, 0 时关闭)-l <ip_addr> 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若...

0_0Boom
2015/12/30
45
0
[缓存]关于memcached的详细介绍以及用法

很久没用过memcached,觉得有些生疏了,现在做一次笔记,回忆一下,也为了以后更加方便的理解. 关于memcached的历史之类的,就不说了,不熟,也没怎么看过,主要就是说memcached的原理以及方式吧.笔记...

3147972
2014/04/23
0
0
使用Memcached提高.NET应用程序的性能

在应用程序运行的过程中总会有一些经常需要访问并且变化不频繁的数据,如果每次获取这些数据都需要从数据库或者外部文件系统中去读取,性能肯定会受到影响,所以通常的做法就是将这部分数据缓...

吞吞吐吐的
2017/11/02
0
0
windows环境下如何安装memcached教程

Memcached 是一个开源免费高性能的分布式内存对象缓存系统,能够加快网站访问速度和减轻数据库压力,本文向大家介绍下windows环境下如何安装memcached。 工具/原料 memcached1.4.13 方法/步骤...

keppy
04/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
3
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
3
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
3
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部