Linux系统安装memcached,首先要先安装libevent库。
sudo apt-get install libevent ibevent-dev 自动下载安装(Ubuntu/Debian)
yum install libevent libevent-devel 自动下载安装(Redhat/Fedora/Centos)
安装 Memcached
自动安装
Ubuntu/Debian
sudo apt-get install memcached
Redhat/Fedora/Centos
yum install memcached
FreeBSD
portmaster databases/memcached
安装完后可以使用 whereis 查看命令的路径:
whereis memcached
发现安装位置在 /usr/bin/memcached。
源代码安装
从其官方网站(http://memcached.org)下载memcached最新版本。
wget http://memcached.org/latest 下载最新版本
tar -zxvf memcached-1.x.x.tar.gz 解压源码
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。
特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。
从内存利用率来讲,使用简单的key-value存储的话,Memcached的内存利用率更高。而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
[外链图片转存中…(img-BZySb0q4-1727250497581)]
[外链图片转存中…(img-5ZqAVr1p-1727250497582)]
[外链图片转存中…(img-NUvZYIUs-1727250497582)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!