当前位置: 首页 > news >正文

libmemcached库api接口讲解三

前言:讲解一下如何删除数据


🗑️ libmemcached 删除键操作教程:memcached_delete() / memcached_delete_by_key()


📘 1. 函数作用

用于从 Memcached 中删除指定的 key,包括:

  • memcached_delete():删除普通 key
  • memcached_delete_by_key():删除属于特定“命名空间”下的 key(更适合分布式一致性哈希中的高级用法)

🧩 2. 函数原型

memcached_return_t memcached_delete(memcached_st *ptr,const char *key,size_t key_length,time_t expiration
);memcached_return_t memcached_delete_by_key(memcached_st *ptr,const char *group_key,size_t group_key_length,const char *key,size_t key_length,time_t expiration
);

📌 3. 参数说明

参数说明
ptr客户端句柄 (memcached_st*)
key要删除的键名
key_length键名的长度(不包括结尾的 \0
group_key用于一致性哈希定位的命名空间键(仅限 *_by_key 版本)
expiration过期延迟(1.4版本之后已废弃,直接传 0

⚙️ 4. 实际效果

  • 立即删除 key:调用后,使用 memcached_get() 将无法再取到这个 key。
  • 删除进入“删除队列”机制(老版本):早期 memcached 实际上是延迟删除;1.4 后已废弃
  • 调用 add() / replace() 可能仍失败,除非 key 真正被清理掉。

✅ 5. 返回值说明

返回类型为 memcached_return_t,常见返回值如下:

返回值含义
MEMCACHED_SUCCESS删除成功
MEMCACHED_NOTFOUNDkey 不存在
MEMCACHED_CONNECTION_FAILURE与服务器连接失败
MEMCACHED_FAILURE其他错误

使用 memcached_strerror(ptr, rc) 转换为可读字符串。


🧪 6. 使用示例代码

#include <libmemcached/memcached.h>
#include <stdio.h>
#include <string.h>int main() {memcached_st *memc;memcached_return rc;const char *key = "sample_key";const char *value = "some data";// 初始化客户端并添加服务器memc = memcached_create(NULL);memcached_server_add(memc, "127.0.0.1", 11211);// 写入数据rc = memcached_set(memc, key, strlen(key), value, strlen(value), 0, 0);printf("Set: %s\n", memcached_strerror(memc, rc));// 删除 keyrc = memcached_delete(memc, key, strlen(key), 0);printf("Delete: %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);if (got) {printf("Unexpected Get: %s\n", got);free(got);} else {printf("Get after delete: %s\n", memcached_strerror(memc, rc));}memcached_free(memc);return 0;
}

🚫 7. 常见误区与注意事项

误区真相
memcached_free() 会删除 key❌ 不会,它只释放客户端对象
expiration 可延迟删除❌ 1.4+ 版本已无效,直接忽略或传 0
delete() 后立刻可 add() 成功✅ 通常可以,但极端高并发下也可能因为延迟删除失败(不常见)
delete_by_key() 是强制删除❌ 实际上只是在一致性哈希中提供分布选择,行为一样

🔄 8. 使用场景建议

场景推荐函数
删除普通 keymemcached_delete()
基于 group_key 删除(hash ring 粒度控制)memcached_delete_by_key()
程序退出不保留缓存可批量 delete 或使用过期控制

http://www.xdnf.cn/news/451945.html

相关文章:

  • 速来体验丨MaxKB v1.10.7 LTS版本发布,支持接入Qwen3
  • 嵌入式学习笔记DAY20(链表,gdb调试)
  • vue2 头像上传+裁剪组件封装
  • FFplay 音视频同步机制解析:以音频为基准的时间校准与动态帧调整策略
  • 动态稀疏化训练系统设计:从算法到GPU硬件协同优化
  • C语言—再学习(指针)
  • C++(2)
  • 中国古代史7
  • 230. 二叉搜索树中第 K 小的元素
  • day25 python异常处理
  • c#中equal方法与gethashcode方法之间有何关联?
  • 2025五一杭州西湖三天游
  • 大涡模拟实战:从区域尺度到街区尺度的大气环境模拟
  • 【python】UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xb2
  • 一种资源有限单片机处理cJSON数据的方法
  • 编写第一个MCP Client之Hello world
  • Android RTL语言视图适配(保加利亚,阿拉伯语种等)
  • JAVA中的文件操作
  • sqli—labs第六关——双引号报错注入
  • BitMart合约交易体验 BitMart滑点全赔的底层逻辑
  • 朱老师,3518系列,第八季
  • 使用Git+Cron实现BIND的Named域名配置自动化管理!
  • D2203使用手册—高压、小电流LDO产品4.6V~36V、150mA
  • AD 异性铺铜
  • 破解商业综合体清洁管理困局:商业空间AI智能保洁管理系统全场景解决方案
  • CodeBuddy 接入 MCP,一键生成网站!
  • 从规则驱动到深度学习:自然语言生成的进化之路
  • SpringbBoot nginx代理获取用户真实IP
  • 3337|3335. 字符串转换后的长度 I(||)
  • leetcode2934. 最大化数组末位元素的最少操作次数-medium