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

libMemcached 库下载记录

前言:简单记录一下libMemcached下载使用的一些问题


下载地址

先从上面下载一个压缩包,然后解压

tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18# 编译安装
./configure --prefix=/usr/local
make && sudo make install

具体分析一下./configure --prefix=/usr/local,这样我们刚刚下载的ibmemcached-1.0.18就可以删除了

  1. ./configure 的核心功能
    检查系统环境:脚本会检测当前系统的编译器(如 gcc/g++)、依赖库(如 zlib、sasl)、头文件等是否存在,确保编译环境完整。
    生成 Makefile:根据检查结果和用户参数(如 --prefix),生成适合当前系统的 Makefile,后者定义了编译规则和安装路径。
  2. –prefix=/usr/local 的作用
    指定安装根目录:–prefix 参数告诉 configure 脚本将软件安装到 /usr/local 目录下。具体来说:
    可执行文件:安装到 /usr/local/bin
    库文件:安装到 /usr/local/lib
    头文件:安装到 /usr/local/include
    配置文件:安装到 /usr/local/etc
    为何选择 /usr/local:这是 Linux/macOS 系统中用户级软件的标准安装位置,与系统自带的 /usr 目录分离,避免覆盖系统文件,方便管理。

执行make指令的时候,出现了报错

clients/memflush.cc: In function ‘int main(int, char**)’:
clients/memflush.cc:42:19: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]42 |   if (opt_servers == false)|       ~~~~~~~~~~~~^~~~~~~~
clients/memflush.cc:51:21: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]51 |     if (opt_servers == false)|         ~~~~~~~~~~~~^~~~~~~~
make[1]: *** [Makefile:5832: clients/memflush.o] Error 1
make[1]: Leaving directory '/home/echash_go/libmemcached-1.0.18'
make: *** [Makefile:3700: all] Error 2

表明在memflush.cc文件中存在指针与布尔值比较的类型不匹配问题,大致原因就是我现在的g++版本太高了,所以得修改 上面的false为null

后面再次执行make的时候,就只出现一些编译的警告了

./libtest/thread.hpp: In destructor ‘libtest::thread::Mutex::~Mutex()’:
./libtest/thread.hpp:59:7: warning: ‘throw’ will always call ‘terminate’ [-Wterminate]59 |       throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_cond_destroy: %s", strerror(_err));|       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./libtest/thread.hpp:59:7: note: in C++11 destructors default to ‘noexcept’
./libtest/thread.hpp: In destructor ‘libtest::thread::ScopedLock::~ScopedLock()’:
./libtest/thread.hpp:92:7: warning: ‘throw’ will always call ‘terminate’ [-Wterminate]92 |       throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_mutex_unlock: %s", strerror(err));|       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./libtest/thread.hpp:92:7: note: in C++11 destructors default to ‘noexcept’
./libtest/thread.hpp: In destructor ‘libtest::thread::Condition::~Condition()’:
./libtest/thread.hpp:132:7: warning: ‘throw’ will always call ‘terminate’ [-Wterminate]132 |       throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_cond_destroy: %s", strerror(err));

然后我们需要确保已安装 libMemcached 开发库

sudo apt install libmemcached-dev

后面我们开始写一个简单的测试代码

#include <iostream>
#include <cstdlib>
#include <libmemcached/memcached.h>int main() {// 初始化客户端memcached_st* memc = memcached_create(nullptr);// 配置服务器(可添加多个服务器形成集群)memcached_server_st* server = memcached_server_list_append(nullptr, "localhost", 11211, nullptr);  // 最后一个参数应为nullptr// 添加服务器列表到客户端memcached_return_t rc = memcached_server_push(memc, server);if (rc != MEMCACHED_SUCCESS) {std::cerr << "Failed to add server: " << memcached_strerror(memc, rc) << std::endl;memcached_server_list_free(server);memcached_free(memc);return 1;}memcached_server_list_free(server);  // 释放临时服务器列表// 设置键值对(有效期3600秒)const char* key = "test_key";const char* value = "Hello, Memcached!";size_t value_len = strlen(value);time_t expiration = 3600;  // 1小时后过期rc = memcached_set(memc, key, strlen(key), value, value_len, expiration, 0);if (rc != MEMCACHED_SUCCESS) {std::cerr << "Failed to set value: " << memcached_strerror(memc, rc) << std::endl;memcached_free(memc);return 1;}// 获取键值对char* retrieved_value;size_t retrieved_length;uint32_t flags;retrieved_value = memcached_get(memc, key, strlen(key), &retrieved_length, &flags, &rc);if (rc == MEMCACHED_SUCCESS && retrieved_value) {std::cout << "Retrieved value: " << retrieved_value << std::endl;free(retrieved_value);  // 必须手动释放内存} else {std::cerr << "Failed to get value: " << memcached_strerror(memc, rc) << std::endl;}// 删除键rc = memcached_delete(memc, key, strlen(key), 0);if (rc != MEMCACHED_SUCCESS) {std::cerr << "Failed to delete key: " << memcached_strerror(memc, rc) << std::endl;}// 释放资源memcached_free(memc);return 0;
}

然后生成可执行文件

g++ -o memcached_test memcached_test.cpp -lmemcached

然后我们需要先启动我们的memcached服务器

memcached -p 11211 -d  # 后台运行,监听 11211 端口

如果没下载的可能还得下载一下

root@gc-hashchain-001:/home/echash_go# memcached -p 11211 -d
can't run as root without the -u switch

又报错了,这是因为我们不能用root权限运行

我们得创建一个新的用户

使用以下命令创建一个新用户,例如名为 memuser:

adduser memuser

按照提示设置该用户的密码及其他信息。
将新用户添加到需要的组中,例如 sudo 组(如果希望该用户有一定的管理权限):
我的密码是12345678

usermod -aG sudo memuser

切换用户运行 Memcached
切换到新创建的用户:memuser是我们创建的用户名

su - memuser

切换到新用户下后我们进入项目,接着
运行

memcached -p 11211 -d  # 后台运行,监听 11211 端口

然后运行你的测试程序:

./memcached_test

出现下面的内容就是正确运行了

Retrieved value: Hello, Memcached!

如果创建了新用户但是不想切换新用户来启动服务器,可以用下面的代码

memcached -u memuser -p 11211 -d

我们来了解一下mamecached的更多命令

  • 查看 Memcached 运行状态
ps -ef | grep memcached  # 查看进程是否存在
http://www.xdnf.cn/news/424891.html

相关文章:

  • SQL 中 INSTR 函数简介及 截取地址应用
  • 【python】—conda新建python3.11的环境报错
  • 第五十七篇 Java接口设计之道:从咖啡机到智能家居的编程哲学
  • 本地部署ollama及deepseek(linux版)
  • ssl 中 key 和pem 和crt是什么关系
  • 配置 Spark 以 YARN 模式
  • 笔试模拟 day9
  • 深入理解Java编写泛型的方法!
  • 杰理-701-手表sdk无法电脑连接经典蓝牙
  • 微信小程序的开发及问题解决
  • 游戏资源传输服务器
  • 第三章 初始化配置(一)
  • GitHub 趋势日报 (2025年05月12日)
  • 电能质量扰动信号信号通过hilbert变换得到瞬时频率
  • 2025.05.11拼多多机考真题算法岗-第一题
  • MCU开发学习记录14* - 8080学习与实践(HAL库) - 控制LCD屏幕显示中英文、图片 - STM32CubeMX
  • 【Axure视频教程】中继器表格间批量控制和传值
  • 艺考之神余嘉诚话剧舞台首秀《屈原辞》 倾情演绎楚辞风骨
  • [Java][Leetcode middle] 45. 跳跃游戏 II
  • 音频转文字-在线工具包及使用记录
  • 提示词设计模板(基于最佳实践)
  • Datawhale PyPOTS时间序列5月第1次笔记
  • 2025 3D工业相机选型及推荐
  • Elecron 相关介绍以及常见的面试问题
  • 【MapReduce入门】深度解析MapReduce:定义、核心特点、优缺点及适用场景
  • 1950-2024年中国区域的积温数据(大于10°)
  • 2025最新出版 Microsoft Project由入门到精通(七)
  • Unity 2D 行走动画示例工程手动构建教程-AI变成配额前端UI-完美游戏开发流程
  • 5月13日day24日打卡
  • 完成springBoot+vue项目时学习到的知识点