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

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() 参数一致,仅行为不同。

参数说明:

  • ptrmemcached_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

相关文章:

  • 关于vue学习的经常性错误
  • 无人机箱号识别系统结合5G技术的应用实践
  • 【ROS2】【分步讲解】节点的使用以及引入消息接口的方法
  • win11 安装 wsl ubuntu 18.04后换源失败!
  • PostgreSQL数据库有什么独特之处?为什么它成为了后起之秀?
  • OpenCV CUDA模块中逐元素操作------逻辑运算
  • 1669上什么课
  • Linux系统中,创建一个xxx.service服务单元文件,方便快速启动、停止java应用程序
  • 310. 最小高度树
  • Java高频面试之并发编程-17
  • PHP黑白胶卷底片图转彩图功能 V2025.05.15
  • 深圳无人机展览即将开始,无人机舵机为什么选择伟创动力
  • NHANES稀有指标推荐:PWI
  • LeetCode_sql刷题(3482.分析组织层级)
  • GitHub 趋势日报 (2025年05月13日)
  • 蓝桥杯 17. 修改数组
  • 01、基础入门-SpringBoot2课程介绍
  • 制作一款打飞机游戏48:敌人转向
  • 【氮化镓】AlGaN合金中成分相关的辐射响应
  • AI数字赋能,点亮精神心理康复之路 —— 华南精神心理数字化诊疗体系3.0发布会圆满举办成功!
  • 订婚不等于性同意!山西订婚强奸案入选最高法案例
  • 3年多来俄乌要首次直接对话?能谈得拢吗?
  • 外交部:各方应为俄乌双方恢复直接对话创造条件
  • 财政部党组召开2025年巡视工作会议暨第一轮巡视动员部署会
  • 因操纵乙烯价格再遭诉讼,科莱恩等四家企业被陶氏索赔60亿
  • 极限拉扯上任巴西,安切洛蒂开启夏窗主帅大挪移?