memcached命令行
进入到memcached中,如果没有可以yum安装
telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
set key2 0 30 2
set:是用来储存数据的
key:这里面key2是key的名字,因为memcached是属于key- valux,存数据要有一个key,也要有一个valux。
2:这里面的2是你要存到数值是两位的,或者是两个字节。比如我输入11,得到的结果为STORED,如果输入3个字符就会报错。
get+key的名,可以用来查看是否储存成功,储存成功的显示为储存的内容+END。
30:这里面的30为过期时间,就是过了30秒数据就会消失。用get查看只会得到END的结果。
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)作为结束标志
<delete> delete+库名可以删除数据
创建数据
set key1 1 110 4
1234
STORED
get key1
VALUE key1 1 4
1234
END
替换数据
replace key1 1 110 5
98756
STORED
get key1
VALUE key1 1 5
98756
END
增加数据
add key1 1 110 2
12
NOT_STORED
add key2 1 110 3
123
STORED
get key2
VALUE key2 1 3
123
END
删除数据
get key6
VALUE key6 1 3
llt
END
delete key6
DELETED
get key6
END
Memcached数据导出和导入
首先输入数据
set name 1 0 5
aming
STORED
set age 1 0 2
20
STORED
set k1 1 0 5
12345
STORED
telnet> quit
Connection closed.
然后检查状态:memstat --servers=127.0.0.1:11211
Server: 127.0.0.1 (11211)
pid: 1428
uptime: 5322
time: 1530712057
version: 1.4.15
libevent: 2.0.21-stable
pointer_size: 64
rusage_user: 0.114001
rusage_system: 0.114001
curr_connections: 10
total_connections: 13
connection_structures: 11
reserved_fds: 20
cmd_get: 8
cmd_set: 10
cmd_flush: 0
cmd_touch: 0
get_hits: 5
get_misses: 3
delete_misses: 0
delete_hits: 1
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: 356
bytes_written: 264
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: 9
expired_unfetched: 0
evicted_unfetched: 0
evictions: 0
reclaimed: 3
导出:
[[email protected] ~]# 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 k1 1 1530706735 5
12345
add name 1 1530706735 5
aming
add age 1 1530706735 2
20
我们也可以把结果重定向到一个文件里。
memcached-tool 127.0.0.1:11211 dump > data.txt
[[email protected] ~]# memcached-tool 127.0.0.1:11211 dump > data.txt
Dumping memcache contents
Number of buckets: 1
Number of items : 3
Dumping bucket 1 - 3 total items
[[email protected] ~]# cat data.txt
add k1 1 1530706735 5
12345
add name 1 1530706735 5
aming
add age 1 1530706735 2
20
导入: nc 127.0.0.1 11211 < data.txt
若nc命令不存在,yum install nc
[[email protected] ~]# nc 127.0.0.1 11211 < data.txt
NOT_STORED
NOT_STORED
NOT_STORED
这里我们发现导入不成功,这是因为在memcached中还有数据,所以不成功。这时我们要重启一下memcached才可以导入,这是因为memcached是以内存的形式存在,重启以后数据库就会清空。
[[email protected] ~]# systemctl restart memcached
[[email protected] ~]# nc 127.0.0.1 11211 < data.txt
STORED
STORED
STORED
这样就可以了。
然后进入memcached查看
[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
get name
END
发现没有数据,,这是因为在我们到处数据的会后数据加了时间戳,所以导入失败。
[[email protected] ~]# cat data.txt
add k1 1 1530706735 5
12345
add name 1 1530706735 5
aming
add age 1 1530706735 2
20
我们要将数据的时间戳改掉,才可以继续导入数据。
add k1 1 10000 5
12345
add name 1 1530706735 5
aming
add age 1 10000 2
20
我们将age和k1的时间戳改掉,然后重试一次。
[[email protected] ~]# nc 127.0.0.1 11211
get k1
VALUE k1 1 5
12345
END
get name
END
get age
VALUE age 1 2
20
END
这样就成功的导入数据了。
php连接memcached
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
[[email protected] memcache]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
安装完后会在/usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
目录下生成memcache.so opcache.a opcache.so这三个文件,其中memcache.so最为主要。
然后修改 vim /usr/local/php-fpm/etc/php.ini
在扩展模块extension区域添加一行extension="memcache.so“
检查/usr/local/php-fpm/bin/php -m
[[email protected] memcache]# /usr/local/php-fpm/bin/php -m|grep memcache
memcache(模块已经生成)
PHP连接Memcached
下载测试脚本
curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
执行脚本
/usr/local/php-fpm/bin/php 1.php
[[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
)
memcached中存储sessions
本实例是在lamp/lnmp环境下实现
httpd.conf中对应的虚拟主机中添加
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
或者php-fpm.conf对应的pool中添加
php_value[session.save_handler] = memcache
php_value[session.save_path] = " tcp://127.0.0.1:11211 "
原文地址:http://blog.51cto.com/13067688/2136344