memcached客户端命令有哪些常用操作?

Memcached 是一种高性能的分布式内存对象缓存系统,主要用于动态 Web 应用以减轻数据库负载,通过客户端命令,用户可以与 Memcached 服务器进行交互,实现数据的存储、检索、更新和删除等操作,这些命令通常通过 Telnet、NC 或专门的客户端库(如 Python 的 pymemcache、Java 的 SpyMemcached)发送,命令格式为 command <key> <flags> <exptime> <bytes> [data block],部分命令可能省略某些参数,以下详细介绍常用的 Memcached 客户端命令及其使用场景。

memcached 客户端命令
(图片来源网络,侵删)

基础存储与检索命令

set 命令

用于将数据存入 Memcached,若 key 已存在则覆盖其值。
语法set key flags exptime bytes [noreply] data

  • key:唯一标识符,长度不超过 250 字节。
  • flags:32 位无符号整数,客户端可用于存储额外信息(如数据类型标记)。
  • exptime:过期时间(秒),0 表示永不过期;若超过 30 天(2592000 秒),Memcached 会将其视为 Unix 时间戳。
  • bytes:数据块长度(不包括 \r\n),需与实际数据长度一致。
  • noreply:可选参数,若指定,服务器不返回响应。
  • data:实际存储的数据,需以 \r\n

示例

set user:1001 0 360 10  
username=Alice\r\n  
STORED  

上述命令将 username=Alice 存入 Memcached,过期时间为 360 秒,key 为 user:1001

get 命令

用于检索一个或多个 key 对应的值,若 key 不存在或已过期则忽略。
语法get key [key ...]
示例

memcached 客户端命令
(图片来源网络,侵删)
get user:1001  
VALUE user:1001 0 10  
username=Alice  
END  
  • VALUE 行表示 key 存在,依次输出 key、flags、数据长度和数据内容。
  • END 标识响应结束。

add 呯令

仅当 key 不存在时存储数据,若 key 已存在则返回 NOT_STORED
语法add key flags exptime bytes [noreply] data
示例

add user:1002 0 360 5  
status=ok\r\n  
STORED  

若再次执行相同 add 命令,服务器会返回 NOT_STORED

replace 命令

仅当 key 存在时替换其值,若 key 不存在则返回 NOT_STORED
语法replace key flags exptime bytes [noreply] data
示例

replace user:1001 0 360 6  
status=ok\r\n  
STORED  

前提是 user:1001 已存在,否则返回 NOT_STORED

memcached 客户端命令
(图片来源网络,侵删)

更新与删除命令

appendprepend 命令

分别在已存在数据的末尾或开头追加新数据,要求 key 必须存在且数据为二进制安全。
语法

  • append key flags exptime bytes [noreply] data
  • prepend key flags exptime bytes [noreply] data
    示例

    set user:1001 0 0 5  
    hello\r\n  
    STORED  
    append user:1001 0 0 6  
    world\r\n  
    STORED  
    get user:1001  
    VALUE user:1001 0 11  
    hello world  
    END  

    prepend 则会在数据开头追加,结果为 worldhello

cas 命令(Check And Set)

用于实现乐观锁,仅在 key 的 cas_id 匹配时更新数据,避免并发修改冲突。
语法cas key flags exptime bytes unique_cas_id [noreply] data

  • unique_cas_id:由 gets 命令返回的唯一标识符,每次修改后会更新。
    示例

    gets user:1001  
    VALUE user:1001 0 5 1  
    hello  
    END  
    cas user:1001 0 0 5 2  
    world\r\n  
    ERROR  

    cas_id 不匹配(如 1≠2),返回 ERROR;若匹配则更新并返回 STORED

delete 命令

删除指定 key,若 key 不存在则返回 NOT_FOUND
语法delete key [noreply]
示例

delete user:1001  
DELETED  

若再次删除,返回 NOT_FOUND

统计与管理命令

stats 命令

返回服务器的运行状态信息,包括内存使用、连接数、命中率等。
语法stats [args]
常用参数

  • stats:返回所有统计信息。
  • stats slabs:显示内存 slab 分配器详情(如各 slab 类的使用情况)。
  • stats items:显示当前存储的 item 数量按 key 前缀分类。
  • stats reset:重置统计计数器(如 cmd_getcmd_set)。

示例输出

stats  
STAT pid 12345  
STAT uptime 3600  
STAT curr_items 100  
STAT total_items 500  
STAT bytes_read 1024000  
STAT bytes_written 2048000  
END  

flush_all 命令

清空所有缓存数据,可设置延迟执行(秒)。
语法flush_all [delay] [noreply]

  • delay:延迟清空时间,0 表示立即执行。
    示例

    flush_all all  
    SERVER_ERROR flush_all with all parameter is not supported  
    flush_all 10  
    OK  

    10 秒后所有数据将被清空。

version 命令

返回 Memcached 服务器的版本信息。
语法version
示例

version  
VERSION 1.6.9  

高级命令与注意事项

incrdecr 命令

对 key 对应的数值进行原子性递增或递减,要求 key 存在且值为 64 位无符号整数。
语法

  • incr key delta [noreply]
  • decr key delta [noreply]
    示例

    set counter 0 0 1  
    5\r\n  
    STORED  
    incr counter 1  
    6  
    decr counter 2  
    4  

    若 key 不存在或非数值类型,返回 NOT_FOUNDCLIENT_ERROR

注意事项

  • key 命名规范:建议使用冒号分隔的层级命名(如 user:1001:profile),便于管理。
  • 内存管理:Memcached 采用 LRU(最近最少使用)算法淘汰数据,当内存不足时会自动删除未过期的冷数据。
  • 网络协议:所有命令和数据需以 \r\n 客户端需处理分块传输(如 VALUE 行可能分多次返回)。
  • 多线程安全:Memcached 服务端为单线程模型,客户端需自行处理并发(如通过 cas 命令避免竞争)。

相关问答FAQs

Q1:Memcached 的 setadd 命令有什么区别?
A:set 命令会无条件存储数据,若 key 已存在则覆盖其值;而 add 命令仅在 key 不存在时存储数据,若 key 已存在则返回 NOT_STORED,不会覆盖原有数据。add 适用于需要确保 key 唯一性的场景,如用户注册时检查用户名是否已存在。

Q2:如何通过 stats 命令查看 Memcached 的内存使用情况?
A:使用 stats slabs 命令可以查看内存 slab 分配器的详细信息,包括每个 slab 类的 ID、大小、已分配 item 数量、内存占用等。stats slabs 会返回类似 STAT 1:chunk_size 96(slab 1 中每个 chunk 大小为 96 字节)、STAT 1:used_chunks 10(已使用 10 个 chunk)等信息,通过这些数据可以分析内存分配是否合理,是否存在内存碎片化问题。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/459362.html<

(0)
运维的头像运维
上一篇2025-11-11 01:54
下一篇 2025-11-11 02:01

相关推荐

  • FTP复制文件命令有哪些?

    FTP(文件传输协议)是一种用于在网络上客户端和服务器之间传输文件的标准协议,它支持两种基本模式:主动模式(Active Mode)和被动模式(Passive Mode),其中被动模式因防火墙兼容性更好而被更广泛使用,在FTP操作中,复制文件通常涉及从本地客户端上传文件到远程服务器,或从远程服务器下载文件到本地……

    2025-11-20
    0
  • FTP命令如何复制文件?

    FTP(File Transfer Protocol)是一种用于在客户端和服务器之间传输文件的协议,广泛应用于文件上传、下载和管理,通过FTP命令,用户可以在命令行界面中执行各种文件操作,其中复制文件是常见的功能之一,虽然FTP本身没有直接的“复制”命令,但可以通过结合上传、下载等操作实现文件复制的目的,本文将……

    2025-11-17
    0
  • FTP如何直接查看文件内容?

    在FTP(File Transfer Protocol)操作中,直接通过FTP命令查看文件内容并不像在本地终端中使用cat或type命令那样简单,因为FTP协议本身主要用于文件传输而非文本内容展示,用户可以通过一些间接方法实现类似功能,结合FTP命令和本地系统工具来查看文件内容,以下是详细的操作方法和相关注意事……

    2025-11-15
    0
  • 批处理命令结果如何赋值给变量?

    在Windows操作系统中,批处理(Batch)脚本是一种强大的自动化工具,它允许用户通过一系列预定义的命令来完成重复性任务,将命令结果赋值给变量的功能是批处理脚本的核心特性之一,它能够动态捕获命令的输出,并在后续逻辑中灵活运用这些数据,本文将详细探讨批处理中如何获取命令结果并将其赋值给变量,包括基础语法、常见……

    2025-11-15
    0
  • Linux安装文件命令有哪些?

    在Linux系统中,安装文件是系统管理和日常运维中的常见操作,不同类型的文件(如二进制包、源码包、压缩包等)需要使用不同的命令进行安装,本文将详细介绍Linux系统中安装文件的相关命令,包括包管理工具、源码编译安装、压缩包解压等内容,并通过表格对比不同命令的适用场景和基本用法,最后附上常见问题解答,基于包管理器……

    2025-11-14
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注