NoSQL - Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统
通过
缓存
数据查询结果,减少数据库访问次数,以此提高Web
响应速度操作的是计算机的内存空间,通过内存来缓存数据,存储形式为
键值对
端口:
11211
一、安装及使用
安装:
#1.安装依赖 libevent
tar -xf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr/local/libevent && make && make install
# yum install libevent-devel
#2. 安装 emcached
tar -xf memcached-1.5.8.tar.gz
cd memcached-1.5.8
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install
#3.配置环境变量
echo 'export PATH=$PATH:/usr/local/memcached/bin' >> /etc/profile
source /etc/profile
依赖下载地址: http://libevent.org/
启动:
memcached -uroot -d
ps -ef |grep memcached
帮助:
# memcached -h
-p 设置memcached监听的端口,默认为11211
-d 后台运行
-m 分配给memcached使用的内存数量,单位是MB,默认为64M
-u 运行memcached的用户
-l 监听服务器IP地址,可以有多个地址
-c 最大运行的并发连接数,默认是1024
-P 设置保存memcached的pid文件
二、telnet 连接 memcached
安装
yum install telnet -y
连接memcached
telnet 127.0.0.1 11211
退出:quit
三、相关命令
1. set
用于将
value
存储到指定key
中,如果添加的key
已存在,则会更新原先value
语法:
set key flat exptime bytes
# key :键名,唯一,同名会被覆盖
# flat :标识
# exptime :过期时间,0表示用不过期,单位为秒
# bytes :存储数据的字节数
# 注意:定义字节长度需要与输入字符长度一致
案例:
set age 0 0 2
22
set name 0 0 5
tiger
2. get
用于获取
key
对应的value
,若key
不存在则返回空
语法:
get key
get key1 key2 key3 ...
3. add
用于将 value 存储在指定的 key 中
如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),获得响应 NOT_STORED。
语法:
set key flat exptime bytes
4. replace
用于替换已存在的 key 的 value。
如果 key 不存在,则替换失败,获得响应 NOT_STORED。
语法:
replace key flat exptime bytes
5. append
用于向已存在 key 的 value 后面追加数据
语法:
append key flat exptime bytes
案例:
set hw 0 0 5
hello
append hw 0 0 5
world
get hw
6. prepend
用于向已存在 key 的 value 前面追加数据
语法:
prepend key flat exptime bytes
案例:
set hw2 0 0 5
world
prepend hw2 0 0 5
hello
get hw2
7. delete
用于删除某个已存在的
key
语法:
delete key
8. flush_all
清理缓存中的所有 键值对 ,
生产环境下慎用
语法:
flush_all [time]
9. incr decr
incr 与 decr 命令用于对已存在的
key
的数字值进行自增或自减操作
语法:
incr key increment_value
decr key decrement_value
案例:
set price 0 0 3
100
incr price 2
decr price 2
10. stats 统计
更多请参考: https://www.runoob.com/memcached/memcached-stats.html
常用统计:
cmd_get : memcached 运行以来get获取的次数
cmd_set : memcached 运行以来set获取的次数
get_hits : 缓存命中数
缓存命中率:命中数(get_hits)/ 获取次数(cmd_get)
命中率为0表示缓存没有生效,命中率低表示业务代码缓存有问题,正常情况应为90%
以上
缓存穿透 数据访问经过缓存,没有获取到数据,再直接访问数据库
缓存雪崩 数据查询全部没有命中,直接访问数据库,数据压力上升
11、注意事项
① 过期时间最大为2592000
(30天),超过该值数据将不会存储到内存中
② key
最大长度为250
个字符
③value
最大能存储1M
(1048576字节),若要改变则启动memcached
时通过 -I 10m
指定
字符 :纯英文和数字,一个字符代表一个字节
汉字 :与字符编码格式有关,GBK
一个字符占用2个字节,UTF-8
一个字符占用3个字节
四、PHP安装memcached扩展
0.下载安装包
下载扩展: http://pecl.php.net/package/memcached
下载依赖: https://libmemcached.org/libMemcached.html
1.安装依赖
tar -xvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached
make && make install
2.安装memcached
扩展库
tar -xvf memcached-3.1.3.tgz
cd memcached-3.1.3
#生成configure , 确保添加环境变量: /usr/local/php/bin/
phpize
./configure --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl
make && make install
3.查看是否安装成功:
ls /usr/local/php/lib/php/extensions/no-debug-zts-20170718/
#该路径在 make install 后会有提示
4. php.ini
添加扩展
vim /usr/local/php/etc/php.ini
extension=memcached.so
设置完成后,重启php-fpm
service php-fpm restart
5.测试
在项目目录创建测试文件test.php
<?php
phpinfo();
?>
访问: http://IP/test.php 查看是否有memcached
模块
6. PHP操作Memcached
vim /www/shop/public/demo.php
<?php
$mem = new Memcached();
$mem->addServer('Memcached Server IP',11211);
$mem->set('name','tiger');
var_dump($mem->get('name'));
?>
五、Memcached 小工具
图形化
memcache
监控工具
下载: https://pecl.php.net/package/memcache
上传memcache.php
到项目目录
修改memecache.php
访问:
可参考 : https://www.jianshu.com/p/1cf99e765f1a
六、DSShop 实现 Session 入库
DSShop
开发所所采用的架构为ThinkPHP
vim /www/shop/application/config.php
vim /www/shop/application/home/config.php
vim /www/shop/application/admin/config.php
修改配置:
'session' => [
......
// 驱动方式 支持redis memcache memcached
'type' => 'memcached',
// Memecached 服务器地址
'host' => '10.1.1.41',
// 是否自动开启 SESSION
'auto_start' => true,
],
其他
1.单机多实例
/usr/local/memcached/bin/memcached -uroot -d -p 11212
/usr/local/memcached/bin/memcached -uroot -d -p 11213
...