memcached在linux上的安装,C C++调用memcached,memcached与Redis的区别_memcheck linux 下载与安装(1)

cd memcached-1.x.x 进入目录

./configure --prefix=/usr/local/memcached 配置

make && make test 编译

sudo make install 安装




---


#### Memcached 运行


Memcached命令的运行:



$ memcached -h 命令帮助


注意:如果使用自动安装 memcached 命令位于 **/usr/local/bin/memcached**。


**启动选项:**


* -d是启动一个守护进程;
* -m是分配给Memcache使用的内存数量,单位是MB;
* -u是运行Memcache的用户;
* -l是监听的服务器IP地址,可以有多个地址;
* -p是设置Memcache监听的端口,,最好是1024以上的端口;
* -c是最大运行的并发连接数,默认是1024;
* -P是设置保存Memcache的pid文件。


##### (1)作为前台程序运行:


从终端输入以下命令,启动memcached:



memcached -p 11211 -m 64m -vv

slab class 1: chunk size 88 perslab 11915

slab class 2: chunk size 112 perslab 9362

slab class 3: chunk size 144 perslab 7281

中间省略

slab class 38: chunk size 391224 perslab 2

slab class 39: chunk size 489032 perslab 2

<23 server listening

<24 send buffer was 110592, now 268435456

<24 server listening (udp)

<24 server listening (udp)

<24 server listening (udp)

<24 server listening (udp)


这里显示了调试信息。这样就在前台启动了memcached,监听TCP端口11211,最大内存使用量为64M。调试信息的内容大部分是关于存储的信息。


##### (2)作为后台服务程序运行:



memcached -p 11211 -m 64m -d


或者



memcached -d -m 64M -u root -l 192.168.0.200 -p 11211 -c 256 -P /tmp/memcached.pid


### 二、C/C++ 调用memcached的API


成功安转memcached之后,我们可以在 usr/include/memcached 目录下。


当然你在安装memcached之后,可能发现会有如下报错:


**fatal error: libmemcached/memcached.h: No such file or directory**


解决方法是运行如下命令:



sudo apt-get install libmemcached-dev zlib1g-dev


后面就应该没问题了。


下面我参考官方的[使用手册]( )来说明一下怎么使用C/C++来调用memcached。



#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <libmemcached/memcached.h>

int main(int argc, char *argv[])
{
memcached_server_st *servers = NULL;
memcached_st *memc;
memcached_return rc;
char *key= “keystring”;
char *value= “keyvalue”;

memcached_server_st *memcached_servers_parse (char *server_strings);
memc = memcached_create(NULL);

servers = memcached_server_list_append(servers, “localhost”, 11211, &rc);
rc = memcached_server_push(memc, servers);

if (rc == MEMCACHED_SUCCESS)
fprintf(stderr,“Added server successfully\n”);
else
fprintf(stderr,“Couldn’t add server: %s\n”,memcached_strerror(memc, rc));

rc= memcached_set(memc, key, strlen(key), value, strlen(value), (time_t)0, (uint32_t)0);

if (rc == MEMCACHED_SUCCESS)
fprintf(stderr,“Key stored successfully\n”);
else
fprintf(stderr,“Couldn’t store key: %s\n”,memcached_strerror(memc, rc));

return 0;
}


编译一下:



gcc -o memc_basic memc_basic.c -lmemcached


运行一下:



./memc_basic
Added server successfully
Key stored successfully


### 三、Memcached与Redis有什么区别


Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。那么,Memcached与Redis有什么区别呢?


**1**、数据操作不同


与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。Redis支持服务器端的数据操作相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,支持list、set、sorted set、hash等众多数据结构,还同时提供了持久化和复制等功能。而通常在Memcached里,使用者需要将数据拿到客户端来进行类似的修改再set回去,这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作, Redis会是更好的选择。


**2**、内存管理机制不同


在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age\*log(size\_in\_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。


而Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。


从内存利用率来讲,使用简单的key-value存储的话,Memcached的内存利用率更高。而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。


**3**、性能不同
**先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里**

**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/777167c3d34d6ddfac398bf01d13e64d.png)
![img](https://img-blog.csdnimg.cn/img_convert/77d4a4a7b067883f478f0cfc2b7c6565.png)
![img](https://img-blog.csdnimg.cn/img_convert/ca977e11af84b62c39357b33dab0f415.png)
![img](https://img-blog.csdnimg.cn/img_convert/ac47dbf2d06390ae962029295cc99c92.png)
![img](https://img-blog.csdnimg.cn/img_convert/86b9865453c6422a6696deaeaa6e6744.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

04146341)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值