当前位置: 首页 > 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 或使用过期控制

相关文章:

  • 可视化图解算法39: 输出二叉树的右视图
  • 前端表格滑动滚动条太费事,做个浮动滑动插件
  • synchronized关键字详解
  • 有关多线程
  • 总共76dp 空出20dp然后放一个控件的写法
  • Spring 中的 @ComponentScan注解详解
  • Android Framework学习五:APP启动过程原理及速度优化
  • Redis内存淘汰策略和过期键删除策略有哪些?
  • TAOCMS漏洞代码学习及分析
  • 微信开发者工具里面模拟操作返回、录屏、网络速度、截屏等操作
  • 企业级IP代理解决方案:负载均衡与API接口集成实践
  • 【CUDA】Sgemm单精度矩阵乘法(上)
  • 达梦数据库 【-6111: 字符串转换出错】问题处理
  • 【AI大模型】赋能【传统业务】
  • React构建组件
  • 微信小程序学习之轮播图swiper
  • 【unity游戏开发——编辑器扩展】EditorWindow自定义unity窗口拓展
  • 橙子、橘子相关(果实、叶片、疾病等)数据集大合集
  • SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
  • 材料×工艺×AI:猎板PCB重构汽车电子四层板技术逻辑
  • 马上评丨75万采购300元设备,仅仅终止采购还不够
  • 波兰关闭俄罗斯驻克拉科夫领事馆
  • 江西省司法厅厅长张强已任江西省委政法委分管日常工作副书记
  • 5.19中国旅游日,上海56家景区景点限时门票半价
  • 宇树科技王兴兴:第一桶金来自上海,欢迎上海的年轻人加入
  • 被取消总统候选人资格,金文洙:将采取政治法律措施讨回公道