NoSQL - Memcached

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统

通过缓存数据查询结果,减少数据库访问次数,以此提高Web响应速度

操作的是计算机的内存空间,通过内存来缓存数据,存储形式为键值对

百科

官方网址:http://memcached.org/

端口: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

用于替换已存在的 keyvalue

如果 key 不存在,则替换失败,获得响应 NOT_STORED

语法:

replace key flat exptime bytes

5. append

用于向已存在 keyvalue 后面追加数据

语法:

append key flat exptime bytes

案例:

set hw 0 0 5
hello
append hw 0 0 5
world
get hw

6. prepend

用于向已存在 keyvalue 前面追加数据

语法:

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
...

2. Memcached 学习

https://www.w3cschool.cn/memcached/ywsn12km.html

https://www.runoob.com/memcached/memcached-tutorial.html

Last modification:June 25th, 2019 at 11:01 pm