memcached的安装、常用命令以及在实际开发中的案例
Memcached注意
缺乏安全认证以及安全管制
需要将Memcached服务器放置在防火墙(iptables)之后
Linux平台 (CentOS)安装Memcached
安装依赖
yum -y install libevent libevent-devel
以下方式任选一种
方式1. 自动安装方式
yum -y install memcached # 方式2. 源代码编译方式安装
wget https://memcached.org/latest
mv latest memcached-1.5..tar.gz
tar -zxvf memcached-1.5..tar.gz
cd memcached-1.5.
./configure --prefix=/usr/local/memcached
make && sudo make install
# Linux平台启动
./memcached -p -u root -m 64m
或者
./memcached -p -u root -m 64m -d
或者
./memcached -p -m 64m -d -u root -l 127.0.0.1 -c -P /tmp/memcached.pid # Linux平台服务进程查看
ps -ef | grep memcached
# 根据端口查看
netstat -tunpl | grep # 关闭进程
kill - pid号
知识补充:
Memcached命令启动
-d:启动一个守护进程
-m:分配给mecached服务的内存大小,单位MB
-u:运行memcached服务的系统用户
-l:服务监听的IP地址,可以有多个地址
-p:服务监听的端口,默认11211
-c:最大运行的并发客户端连接数,默认1024
-P:设置保存服务的pid文件
emcached客户端
yum -y install telnet
telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'. ctrl + c
退出客户端
Windows 平台
32位系统下载地址
http://downloads.northscale.com/memcached-win32-1.4.4-14.zip # 64位系统下载地址
http://downloads.northscale.com/memcached-win64-1.4.4-14.zip # Windows平台安装启动
C:\memcached\memcached.exe -d install
C:\memcached\memcached.exe -d start
C:\memcached\memcached.exe -d stop 运行 -> pkgmgr /iu:"TelnetClient"
Memcached常用命令
set命令
- 将数据值存储到内存当中,将value存储到key当中
- 如果key已经存在,则更新该key的值,否则存储一个新的值
- key:键名称
- flags:服务器与用户提供的数据一起存储的32位无符号整数,并在检索到项目时随数据一起返回
- exptime:在内存中保存数据的时间长度(单位:秒,0:永不过期)
- bytes:缓存数据的字节数
- noreply:不需要返回响应
# 登录客户端
telnet 127.0.0.1 # 存储命令 # set 命令
set www.test.com
best
STORED set www.test.com noreply
best # get 命令
get www.test.com
add命令
- 将数据值存储到内存当中,将value存储到key当中
add www.test.com
best
NOT_STORED add www.test.com noreply
best add new
test
STORED
replace命令
- 将已存储的key使用新值替换,如果key不存在,则替换失败
replace www.test.com
best
STORED replace www.test.com noreply
best replace new2
test
NOT_STORED
append命令
- 向已存储的key的值后追加数据
append www.test.com
best
STORED append www.test.com noreply
best append new3
test
NOT_STORED
prepend命令
- 向已存储的key的值前追加数据
prepend www.test.com
best
STORED prepend www.test.com noreply
best prepend new3
test
NOT_STORED
cas(check-and-set)命令
- 当上一次当前客户端取值后,其他客户端没有对该key进行修改,才可以将值写入
- flags:服务器与用户提供的数据一起存储的32位无符号整数,并在检索到项目时随数据一起返回
- exptime:在内存中保存数据的时间长度(单位:秒,0:永不过期)
- bytes:缓存数据的字节数,
- unique_cas_token:通过 gets 命令获取的一个唯一的64位值
- noreply:不需要返回响应
gets www.imooc.com
VALUE www.imooc.com
best
END cas www.imooc.com
test
STORED
get命令
- 获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
get www.test.com
VALUE www.test.com
test
END get www.test.com test
VALUE www.test.com
test
VALUE test
test
END
gets命令
- gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
gets www.test.com
VALUE www.test.com
test
END gets www.test.com test
VALUE www.test.com
test
VALUE test
test
END
incr命令
- 用于对已存在的 key(键) 的数字值进行自增操作
set count STORED incr count incr count
decr命令
- 用于对已存在的 key(键) 的数字值进行自减操作
decr count decr count
stats命令
- 返回统计信息例如 PID(进程号)、版本号、连接数等

stats items命令
- 用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)

# stats cachedump 命令
stats cachedump
ITEM www.test.com [ b; s]
ITEM test [ b; s]
END
stats slabs命令
- 用于显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats sizes命令
- 用于显示所有item的大小和个数
# 需要启动memcached时开启track_sizes
./memcached -u root -p 11211 -l 127.0.0.1 -d -o track_sizes
stats sizes
STAT
END
# delete 命令
delete www.test.com
DELETED
flush_all命令
- 用于清理缓存中的所有 key,value对
- time:指定时间后清除
安装PHP的memcached扩展
方式1:自动安装
yum -y install php-memcached 重启httpd服务
service httpd restart 移除yum安装的php-memcached
yum -y remove php-memcached
方式2:编译安装
# 安装依赖
yum -y install zlib-devel
yum -y install libmemcached-devel # 编译安装
wget https://pecl.php.net/get/memcached-3.1.4.tgz
tar zxvf memcached-3.1..tgz cd memcached-3.1.
/usr/bin/phpize ./configure --with-php-config=/usr/bin/php-config
make && make install # 修改php.ini
vim /etc/php.ini # 添加
extension="memcached.so" # 保存退出 # 重启httpd服务
service httpd restart # 临时关闭
selinux
setenforce # 永久关闭
selinux
vim /etc/selinux/config # 修改
selinux
selinux=disabled # 保存退出
PHP案例:构建高速缓存
- 如果缓存数据存在,请求memcached服务,查询缓存数据,显示给用户
- 如果缓存数据不存在,请求数据源数据,将数据存储至缓存中
第一次从数据库获取

第二次从缓存读取

进入mysql
mysql -uroot -p 创建数据库
create database cms;
use cms; 创建数据表
create table cms_users(
id int unsigned not null auto_increment primary key,
username varchar() not null default '',
age tinyint unsigned not null default ,
sex tinyint unsigned not null default ,
major varchar() not null default '',
created_time datetime null default CURRENT_TIMESTAMP
)engine=innodb default charset=utf8; 插入数据
insert into cms_users(username,age,sex,major) values('cyy',,,'math');
insert into cms_users(username,age,sex,major) values('cyy2',,,'chinese');
insert into cms_users(username,age,sex,major) values('cyy3',,,'english');
insert into cms_users(username,age,sex,major) values('cyy4',,,'business');
insert into cms_users(username,age,sex,major) values('cyy5',,,'php'); 查看数据
select * from cms_users;
users.php
<?php
$start = microtime(true); # 建立memcached连接
$mem = new Memcached();
$mem->addServer('127.0.0.1', 11211);
$key_name = 'users';
$expire_time = 60;//过期时间 # 判断用户数据在缓存当中是否存在,如果存在,直接get,显示给用户
# 如果不存在,查询数据库,将数据写入到memcached当中,显示给用户 if (false === ($users = $mem->get($key_name))) {
# 数据不存在于缓存当中,调用PDO查询DB
$users = fetchDataFromDB();
# 将查询出的数据写入到memcached当中
$mem->set($key_name, $users, time() + $expire_time);
} function fetchDataFromDB() {
echo 'Fetching data from db....';
# Fetch users from mysql using PDO
try {
$dsn = "mysql:dbname=cms;host=localhost;port=3306";
$pdo = new PDO($dsn, 'root', '123456',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$sql = 'select * from cms_users';
$stmt = $pdo->prepare($sql);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $pe) {
echo $pe->getMessage();
}
return $users;
} $sex_array = ['unknown', 'male', 'female'];
echo '<table border=1>';
echo '<tr><th>ID</th><th>USERNAME</th><th>AGE</th><th>SEX</th><th>MAJOR</th><th>CREATED_TIME</th></tr>';
foreach ($users as $user) {
echo '<tr>';
echo '<td>'.$user['id'].'</td>';
echo '<td>'.$user['username'].'</td>';
echo '<td>'.$user['age'].'</td>';
echo '<td>'.$sex_array[$user['sex']].'</td>';
echo '<td>'.$user['major'].'</td>';
echo '<td>'.$user['created_time'].'</td>';
echo '</tr>';
}
echo '</table>';
$end = microtime(true);
echo "Running time: ". ($end-$start);
小案例

<?php $mem = new Memcached(); # telnet 127.0.0.1 11211
$mem->addServer('127.0.0.1', 11211); # stats
$stats = $mem->getStats();
# var_dump($stats);
$mem->set('php_client', ['one' => 1, 'two' => 2], time() + 60);
$res = $mem->get('php_client');
var_dump($res);
memcached的安装、常用命令以及在实际开发中的案例的更多相关文章
- webpack 介绍 & 安装 & 常用命令
webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...
- webpack学习(一):webpack 介绍&安装&常用命令
一.简单介绍 什么是Webpack Webpack是一款用户打包前端模块的工具,它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 主要是用来打包在浏览器端使用的ja ...
- webpack介绍 安装 常用命令
Webpack是一款用户打包前端模块的工具,它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑 ...
- linux常用软件安装,常用命令
jdk [root@localhost]# tar -zxvf jdk-8u144-linux-x64.tar.gz [root@localhost]# vi /etc/profile 在profil ...
- [Python] 安装 & 常用命令
安装 http://www.xue51.com/soft/2301.html 常用命令 #查看pip版本$ pip --version#安装pip$ sudo apt install python3- ...
- centos yum安装常用命令
安装killall命令 yum install -y psmisc 安装sz(下载)和rz(上传)命令 yum install -y lrzsz 安装 ifconfig 命令 yum install ...
- [转]学好Mac常用命令,助力iOS开发
转自:http://www.jianshu.com/p/d9ec00d28237 序言 在iOS开发的过程中,更多地注重iOS开发的效率,熟练使用Mac终端操作的常用命令,可以让你更好的游刃于iO ...
- 学好Mac常用命令,助力iOS开发
原文出处: Jack_lin(@Jack_Lin_IOS ) 厚重·技术 序言 在iOS开发的过程中,更多地注重iOS开发的效率,熟练使用Mac终端操作的常用命令,可以让你更好的游刃于iOS繁重的开发 ...
- mysql 安装常用命令,卸载不干净等
安装mysql apt-get install mysql-server apt-get install mysql-client sudo apt-get install libmysqlclien ...
随机推荐
- NLP新秀 - Bert
目录 什么是Bert Bert能干什么? Bert和TensorFlow的关系 BERT的原理 Bert相关工具和服务 Bert的局限性和对应的解决方案 沉舟侧畔千帆过, 病树前头万木春. 今天介绍的 ...
- Codeforces_731_C
http://codeforces.com/problemset/problem/731/C 并查集,然后找每个集合里颜色的最大数量,求集合中元素数量-这个最大数量,最后总数相加即答案. #inclu ...
- Educational Codeforces Round 57
2018.12.28 22:30 看着CF升高的曲线,摸了摸自己的头发,我以为我变强了,直到这一场Edu搞醒了我.. 从即将进入2018年末开始,开启自闭场集合,以纪念(dian)那些丢掉的头发 留 ...
- java10幸运抽奖
public class jh_01_知识点回顾 { public static void main(String[] args) { int a = 10; // 变量.标签. // 重新给a赋值. ...
- 刚安装了ftp之后无法使用root访问,服务器发回了不可路由的地址。使用服务器地址代替。
真的艰辛,用了整整一个下午加晚上,才把服务器搭建好,中间真的好多坑... 错误1: vsftpd正确配置: vsftpd.conf: pam_service_name=vsftpduserlist_e ...
- java架构之路-(微服务专题)ribbon的基本使用和内部算法的自我实现
上次回归: 上次我们主要说了,我们的注册中心nacos的使用,如我们的命名空间.分组.集群.版本等是如何使用的,如果是这样呢?我们现在有三个用户服务和三个订单服务,我们应该如何分发这些请求呢?都请求到 ...
- mysql添加远程权限
mysql -u root -p grant all privileges on *.* to root@'%' identified by "password"; flush p ...
- lwip nd没有实现ra,contik有参考
lwip中关于nd的实现,没有路由器的功能,不能发送ra 在contiki中发现有nd发送ra的实现, contiki/core/net/ipv6/uip-ds6.c 在rs的接收处理中,发送soll ...
- web访问 FastDFS 方法思路
由于余老师在 V4.05 以后的版本就把内置 HTTP服务去掉了,所以就算这篇你测试上传成功了,你也访问不了. 推荐大家结合 Nginx 使用 fastdfs-nginx-module ...
- 字符编码及字节串bytes类型
1 字符编码简介 ASCII码:美国人发明并使用,用1个字节(8位二进制)代表一个字符,ASCII码是其他任意编码表的子集(utf-16除外). Unicode:包含和兼容全世界的语言,与全世界的语言 ...