设为首页 收藏本站
查看: 795|回复: 0

[经验分享] 21.5

[复制链接]

尚未签到

发表于 2018-12-11 13:08:58 | 显示全部楼层 |阅读模式
  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语法规则
      \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)作为结束标志。
  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 &quot;+1 day&quot; +%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=&quot;memcache.so&quot;
  检查 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-
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
15306996181530699618vt380k4sru58kad7k7qfsio8a6
curl localhost/11.php
15306996181530699618vt380k4sru58kad7k7qfsio8a6
curl localhost/11.php
15306996181530699618vt380k4sru58kad7k7qfsio8a6  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-
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] = &quot;tcp://ip:port&quot;
  重启php
  /etc/init.d/php-fpm restart
  删除/tmp/下面的会话文件
  rm -f /tmp/se*
  再次进入可以看到会话文件没有加载到/tmp下面
  ls -lt /tmp/
  进行curl测试
  curl localhost/11.php
  15307014321530701432e75l0ab8qpp36oapkmun763h53
  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.




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-650146-1-1.html 上篇帖子: Windows下php curl调用本地url 499问题 下篇帖子: PHP运行环境配置及需求
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表