libmemcached库api接口讲解二
我们来学一下怎么存数据
📘 libmemcached 数据写入函数详解(set
/ add
/ replace
)
✅ 一、三个函数的作用与区别
函数 | 作用 | key 存在时 | key 不存在时 | 常见用途 |
---|---|---|---|---|
memcached_set() | 写入(新增或覆盖) | ✅ 覆盖 | ✅ 创建 | 默认推荐 |
memcached_add() | 仅在 key 不存在时写入 | ❌ 返回错误 | ✅ 创建 | 初始化数据 |
memcached_replace() | 仅在 key 存在时替换 | ✅ 替换 | ❌ 返回错误 | 更新已有数据 |
🧩 二、函数原型
memcached_return_t memcached_set(memcached_st *ptr,const char *key, size_t key_length,const char *value, size_t value_length,time_t expiration, uint32_t flags);
add()
和 replace()
与 set()
参数一致,仅行为不同。
参数说明:
ptr
:memcached_st*
客户端实例key
:要存储的键value
:要存储的值expiration
:过期时间(单位秒,0
表示永不过期)flags
:可选的自定义标记(通常为0
)
🔧 三、完整示例代码
#include <libmemcached/memcached.h>
#include <stdio.h>
#include <string.h>int main() {memcached_st *memc;memcached_return rc;const char *key = "example";const char *val1 = "hello";const char *val2 = "world";// 创建客户端memc = memcached_create(NULL);memcached_server_add(memc, "127.0.0.1", 11211);// 使用 memcached_add(仅在 key 不存在时成功)rc = memcached_add(memc, key, strlen(key), val1, strlen(val1), 0, 0);printf("Add: %s\n", memcached_strerror(memc, rc));// 使用 memcached_replace(仅在 key 存在时成功)rc = memcached_replace(memc, key, strlen(key), val2, strlen(val2), 0, 0);printf("Replace: %s\n", memcached_strerror(memc, rc));// 使用 memcached_set(总是写入,无论 key 是否存在)rc = memcached_set(memc, key, strlen(key), "overwrite", 9, 0, 0);printf("Set: %s\n", memcached_strerror(memc, rc));// 读取值size_t val_len;uint32_t flags;char *got = memcached_get(memc, key, strlen(key), &val_len, &flags, &rc);printf("Get: %s (rc=%s)\n", got, memcached_strerror(memc, rc));free(got);memcached_free(memc);return 0;
}
⚠️ 注意事项
add()
在 key 已存在时返回MEMCACHED_NOTSTORED
replace()
在 key 不存在时返回MEMCACHED_NOTSTORED
- 所有函数都返回
memcached_return_t
类型,用memcached_strerror()
可打印解释 - 遇到值过大、网络异常、权限问题等也会失败,检查返回值很重要
🔄 使用场景建议
需求 | 推荐函数 |
---|---|
写入或更新都可以 | memcached_set() |
只希望写入一次,防止覆盖已有数据 | memcached_add() |
确保数据存在才更新(防止误写) | memcached_replace() |
注意我们memcached_free(memc)
只释放你程序中 memc
这个客户端实例的内存
并不会清除你通过 memcached_set()
或 memcached_add()
存到 Memcached 服务器里的 key