libmemcached库api接口讲解一
前言:好多接口的用法都不怎么会,得学习一下具体的用法
memcached_st
✅ 一个连接 memcached 服务集群的“客户端实例”对象,用于管理连接、执行读写操作、设置行为、维护哈希环等一切功能。
它在使用中通常通过下面的方式创建:
memcached_st* memc = memcached_create(NULL);
平时调用的函数比如:
memcached_set(memc, ...)memcached_get(memc, ...)memcached_behavior_set(memc, ...)memcached_server_add(memc, ...)
都需要传入 memcached_st* 类型的参数(即你创建的那个 memc 变量),所有操作都基于这个
memcached_servers_reset() 是 libmemcached 中的一个函数,用于:
✅ 清空并重置一个 memcached_st 客户端实例中的服务器列表,包括内部的连接状态、哈希环(Ketama continuum)等。
很好,这四个函数是 libmemcached
的核心 API,分别用于配置和操作 Memcached 客户端。下面是它们各自的详细说明和用途:
1. 🔧 memcached_behavior_set(memc, ...)
✅ 功能:
设置客户端的行为参数(behavior),比如:
- 是否使用一致性哈希
- 是否使用非阻塞 I/O
- 是否启用压缩、二进制协议等
🔍 例子:
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, MEMCACHED_DISTRIBUTION_CONSISTENT);
这行代码的意思是:设置客户端使用一致性哈希(Ketama)进行 key 分布。
🔧 常用设置项:
设置项 | 描述 |
---|---|
MEMCACHED_BEHAVIOR_NO_BLOCK | 使用非阻塞 I/O |
MEMCACHED_BEHAVIOR_TCP_KEEPALIVE | 保持 TCP 长连接 |
MEMCACHED_BEHAVIOR_BINARY_PROTOCOL | 使用二进制协议 |
MEMCACHED_BEHAVIOR_HASH | 设置 Hash 算法(如 MD5、CRC) |
📚 官方文档:memcached_behavior_set
2. 🖧 memcached_server_add(memc, ...)
✅ 功能:
向客户端添加一个 Memcached 服务器(IP 地址 + 端口),可以调用多次添加多个服务器。
🔍 例子:
memcached_server_add(memc, "127.0.0.1", 11211);
代表向客户端添加本地的一个 Memcached 服务节点。
🧠 说明:
- 这是构建哈希环或普通服务器列表的前提
- 如果你不添加任何服务器,
memcached_set()
和memcached_get()
是不能工作的
3. 📝 memcached_set(memc, key, key_length, value, value_length, expiration, flags)
✅ 功能:
向服务器写入一对 key-value 数据
🔍 例子:
memcached_set(memc, "mykey", 5, "myvalue", 7, 0, 0);
参数说明:
参数 | 含义 |
---|---|
key | 要存储的键名 |
key_length | 键名长度 |
value | 要存储的值 |
value_length | 值长度 |
expiration | 过期时间(0 表示永不过期) |
flags | 自定义的整型标志位,可用于存储元数据 |
📚 官方文档:memcached_set
4. 🔍 memcached_get(memc, key, key_length, &value_length, &flags, &rc)
✅ 功能:
从服务器获取指定 key 对应的值
🔍 例子:
char* value = memcached_get(memc, "mykey", 5, &value_length, &flags, &rc);
参数说明:
参数 | 含义 |
---|---|
key / key_length | 要查找的 key 和它的长度 |
&value_length | 返回值的长度 |
&flags | 获取的标志位(可用于识别数据类型) |
&rc | 返回码,判断操作是否成功 |
注意事项:
- 返回值是动态分配的,你要用
free(value)
手动释放 - 如果
rc != MEMCACHED_SUCCESS
,说明没找到或出错
📚 官方文档:memcached_get