文章目录
一、什么是memcached
1.1、概述
官网:http://www.memcached.org/
- 免费和开源,高性能,分布式内存对象缓存系统,旨在通过减轻数据库负载来加速动态Web应用程序
- Memcached是一个在内存中以键值(key=>value)形式进行存储数据(字符串,对象)
- Memcached简单而强大。其简单的设计促进了快速部署,易于开发,并解决了大型数据缓存面临的许多问题。其API适用于大多数流行语言
缺点
- 数据没有永久保存,不能宕机或断电,也不能重启服务,它的信息全部在内存当中。一旦完成上述操作,数据将全部丢失
使用的场景
- 不重要且还很小很碎的数据,如登录成功后的session信息就可以存放memcached
memcached服务,作为缓存使用,所以一般在项目中读取数据可以使用它,而写入或者修改数据,几乎不用它
1.2、应用图解
- 减少数据库访问,提高Web速度
- 实质:不用去请求读取mysql,检索mysql的并发量和读写量
第一次会读取数据库,进行缓存。还有一种可能就是缓存失效,也会从数据库调取数据。他的作用就是缓存数据
1.3、与mysql进行比较
- 与mysql一样是一个软件服务,需要启动服务
- mysql里面的数据,是存储到磁盘里面的,memcached里面的数据是存储到内存里面的
- mysql使用表结构来存储数据,而memcached里面数据的存储是键值对(key=>value)
1.4、memcached中的一些参数限制
key原则
memcached的key的长不超过250字节,value大小限制为1M(小而碎的数据),默认端口号为11211
二、服务安装与启动
Memcached的安装比较简单,支持Memcached的平台常见的有Linux、Windows、FreeBSD、Mac等
2.1、Linux安装与启动
2.1.1、安装
yum和源代码安装两者选一个安装就可以
- 源代码安装
//编译工作要提前安装好
yum -y install gcc gcc-c++ automake autoconf make cmake libevent-devel.x86_64
//下载源码
wget http://www.memcached.org/files/memcached-1.6.9.tar.gz
//源码安装memcache
tar zxf memcached.tar.gz
cd memcached
./configure --prefix=/usr/local/memcached
make && make install
- yum安装
[root@server ~]# yum search memcached | grep ^memcached
memcached-devel.i686 : Files needed for development using memcached protocol
memcached-devel.x86_64 : Files needed for development using memcached protocol
memcached.x86_64 : High Performance, Distributed Memory Object Cache
//装下面两个
[root@server ~]# yum -y install memcached.x86_64 memcached-devel.x86_64
2.1.2、启动
memcached -m 16m -p 11211 -d -u root
-m 启动16兆内存,一个原则,指定的内存大小比物理内存小
-p 默认端口11211
-d 启动守护进程(后台运行)
-u 指定用户
-c 指定连接数(并发数),并非越大越好,根据生产去调
-l 是监听的服务器IP地址 127.0.0.1 0.0.0.0谁都可以访问
注:memcached的默认端口号是11211
启动,查看,关闭
看到有11211端口存在,表示已经启动了memcached服务
三、常用命令
3.1、连接服务
3.1.1、telnet
使用telnet来连接memcached服务,因telnet默认没有在windows上安装好,所以需要手动来安装一下
搜索控制面板,打开卸载程序
点击右侧的启动或关闭Windows功能
勾选Telnet Client,点击确认
安装完成后,一定要把所以的cmd窗口关闭,然后重新打开,就可以使用了
检查是否安装成功
在命令行中输入telnet,如下,使用quit即可
- Linux下安装telnet客户端
//搜索
yum search telnet|grep ^telnet
//安装
yum -y install telnet.x86_64
检查是否安装成功,在命令行中输入telnet,出现如下界面,标识成功
退出quit
3.1.2、使用telnet连接memcached
在Linux中执行telnet命令连接memcached服务
语法
telnet ip port 回车
连接成功按下crtl+]
telnet+连接服务主机地址+连接通信的端口号,后使用quit退出
3.2、获取数据
//获取存储在key(键)中的value(数据值),如果key不存在,则返回空
get key
3.3、添加设置数据
//添加add只能添加不存在的key或过期了的key,存在的key添加则报错
add key flags exptime bytes\n
value\n
//设置set key存在则修改,不存在则添加
set key flags exptime bytes\n
value\n
参数说明如下:
key:结构中的key,用于查找缓存值
flags:客户机使用它存储关于键值对的额外信息(0|1|2)
exptime:在缓存中保存键值对的时间长度(以秒为单位,0表示永远)[时间长度(最长30天),时间戳(时间戳可以设置很久的时间)]
bytes:在缓存中存储的字节数
value:存储的值长度和bytes长度设置的一样的
输出信息说明:
STORED:保存成功后输出
ERROR:在保存失败后输出
set添加数据,key存在则修改,不存在则添加
3.4、自增和自减
- incr与decr命令用于对已存在的key(键)的数字进行自增或自减操作
- incr与decr命令操作的数据必须是十进制的32位无符号整数
- 自增
- 统计
set key 0 3600 1
value
incr key increment_value(可以想写多少就写多少,且必须是正数)
自增和自减,一般用于统计
注:使用自增或自减第1步,要用set或add创建一个key值,后才可以使用incr或decr
使用场景:用在聊天中的在线人数,文章记录浏览量,后台在线人员
3.5、删除数据
了解一下如果删除已存在的key或清空所有,此操作可能会触发缓存穿透和雪崩
//delete 命令用于删除已存在的key(键)
delete key
//清除所有 尽量不要使用
flush_all
输出信息说明:
DELETED:删除成功
ERROR:语法错误或删除失败
NOT_FOUND:key 不存在
3.6、查看状态
//用于返回统计信息例如PID(进程号)、版本号、连接数等
stats
pid:memcache服务器进程ID
uptime:服务器已运行秒数
curr_connections:当前连接数量
cmd_get:get命令请求次数
cmd_set:set命令请求次数
get_hits:get命令命中次数
get_misses:get命令未命中次数
命中率 get_hits/cmd_get 60%-90%
3.6、查看状态
//用于返回统计信息例如PID(进程号)、版本号、连接数等
stats
pid:memcache服务器进程ID
uptime:服务器已运行秒数
curr_connections:当前连接数量
cmd_get:get命令请求次数
cmd_set:set命令请求次数
get_hits:get命令命中次数
get_misses:get命令未命中次数
命中率 get_hits/cmd_get 60%-90%