开源、高性能、高并发的分布式内存缓存系统。
作用
缓存关系型数据库的结果,减少数据库自身访问的次数。
常见内存缓存服务软件对比
memcache 纯内存
redis、memcachedb 可持久化存储,同时会使用磁盘存
常见工作流程
数据被缓存在事先分配的memcached管理的内存中,可通过API或命令方式存取内存中缓存的这些数据,每条数据都是以key-value键值对形式存在。浏览器优先访问Memcached缓存,如果没有采取读取数据库。
memcache在企业中的应用场景
1、作为数据库的查询数据缓存;
2、作为集群节点的session会话共享存储,即把客户端用户请求多个前端应用服务器集群产生session会话信息统一存储到一个memcached缓存中。
memcached协议简单,采用基于文本行协议,能通过telnet/nc 等命令直接操作。
支持分布式集群部署
分布式memcached集群的不同服务之间是互不通信的每个节点都是独立存取数据的,通过对web应用端的程序设计或通过支持hash算法的负载均衡软件,可以让memcached支持海量分布式缓存集群应用。
工作原理
C/S模式,在服务器端启动memcached服务守护进程,可以指定监听服务器的ip地址,端口号,并发访问连接数及分配的内存等参数来处理客户端的请求。
基本管理
启动:memcached -d -p 11211 -u memcache -m 64 -c 1024 -P /tmp/memcached.pid
相关参数选项介绍
-d 启动一个守护进程
-p 设置memcaced监听的端口号
-u 设置启动memcached进程的用户
-m 分配给memcached使用内存的大小,单位MB
-c 最大允许的并发连接数,默认1024
-l 设置监听的服务器ip,可以理解为绑定的网卡,如果设置127.0.0.1,则只能本机连接,设置本机对外网卡的ip者都能连。
-P 设置保存memcached的pid文件路径。
启动多实例:使用不同的端口号即可。
连接memcached
telnet IP 11211
memcached命令语法
(0)quit 退出memcache
(1)set
set key flags exptime bytes [noreply]
value
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
exptime 缓存时间,单位是秒,0表示永远
bytes 缓存中存储的字节数
noreply 告知服务不需要返回数据
返回结果:stored、errorset userId 0 0 5
12345
STORED(2)add(用于添加不存在的键,如果存在,不改变键值)
用法和set相同
(3)replace(替换已经存在的键值,如果不存在,替换失败)
语法和set相同
(4)append 向后追加(用于对已存在的键追加值)
语法和set相同
(5)prepend 向前追加(用于已存在的键)
(6)cas (check and set) 用于执行一个检查并设置的操作,用于已存在键
cas key flags exptime bytes unique_cas_token【noreply】
valueset c 0 900 9
memcached
STORED
gets c
VALUE c 0 9 6 //6位token值
memcached
END
cas c 0 900 5 6
abcde
STORED
get c
VALUE c 0 5
abcde
END
(7)get 用于查看,可跟多个键
set userId 0 0 5
STORED
get userId
VALUE userId 0 5
END
(8)gets 可以得到cas需要的token值
gets userId
VALUE userId 0 5 4
12345
END
(9)delete key
(10)incr key 1 key的value值加1
(11)decr key 1 key的value值减1
(12)stats 显示当前memcache的统计数据
(13)flush_all 清空所有键值对