Memcache 是一款高性能的分布式内存对象缓存系统,以下是其使用方法:
安装与配置
• 安装 Memcached :在 CentOS 7 系统中,可使用命令sudo yum install memcached进行安装,也可从源码编译安装,如下载 memcached-1.4.15.tar.gz 后,执行./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent、make && make install。
• 安装客户端库 :以 PHP 为例,可安装 memcache 或 memcached 扩展。下载 memcache-2.2.5.tgz 后,执行/usr/local/php/bin/phpize、./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache、make && make install,并在 php.ini 中添加extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so。
• 配置 Memcached 服务 :可使用命令memcached -m 64 -p 11211 -u root -vv前台启动,其中-m指定内存大小为 64MB,-p指定端口为 11211,-u指定运行用户为 root,-vv显示详细信息;也可用memcached -m 64 -p 11211 -u root -d以后台守护进程方式启动。
基本操作命令
• 存储数据 :
• set key flags exptime bytes [noreply]:设置一个键值对,无论键是否存在都进行存储。如set mykey 0 10 12,表示将值存储到键 mykey 中,flags 为 0,10 秒后过期,数据大小为 12 字节,然后输入数据内容Hello world!,最后以换行符结束。
• add key flags exptime bytes [noreply]:添加一个键值对,只有当键不存在时才进行存储。
• replace key flags exptime bytes [noreply]:替换一个键值对,只有当键已经存在时才进行存储。
• 获取数据 :get key1 [key2 ...],根据键获取对应的值,如get mykey,若键存在则返回键值对数据,否则返回NULL。
• 删除数据 :delete key [noreply],删除指定键的键值对,如delete mykey。
• 增加 / 减少数据 :incr key value [noreply]和decr key value [noreply],对存储的数值类型数据进行增加或减少操作,如incr mykey 2表示将键 mykey 对应的数值增加 2。
工作原理
• 内存管理 :采用 Slab Allocator 机制管理内存,将内存划分为多个 Slab,每个 Slab 由大小相同的 Chunk 组成,有效减少内存碎片化。
• 数据存储与检索 :基于键值对的存储方式,客户端向 Memcached 存储数据时,Memcached 根据数据大小选择合适的 Slab,并将数据存储在空闲内存块中,每个内存块有唯一 ID 即数据的键;检索数据时,提供键即可找到并返回数据。
• 缓存淘汰策略 :使用 LRU(Least Recently Used)淘汰算法,当缓存空间不足时,自动删除最近最少使用的数据,腾出空间存储新数据。
• 分布式架构 :通过一致性哈希算法将数据分布到多个服务器节点上,避免单点故障,提高系统可扩展性。客户端通过一致性哈希算法确定数据所属节点,并与对应节点通信完成数据存取。
应用场景
• Web 应用加速 :缓存数据库查询结果、API 调用结果等,减少数据库访问次数,提高响应速度,如新闻网站缓存热门新闻列表。
• 会话管理 :存储用户会话信息,提升会话访问速度,如电子商务网站缓存用户购物车信息。
• 分布式系统 :作为分布式缓存系统,缓存全局共享数据,减轻数据库负载,如大型社交网络缓存用户好友列表、消息列表等。