高性能内存对象缓存memcached

家住魔仙堡 提交于 2019-12-28 17:42:30

一、memcached简介

1.memcached是基于内存级的缓存服务器,将所有的数据都存在内存中。因为在内存中会统一维护一张巨大的hash表,所以支持任意存储类型的数据
2.memcached是C/S架构,需要安装memcached服务端和memcached API客户端
3.主要作用:

       memcache主要用于分担数据库的负载压力,是缓存系统,所以严格意义上来说,memcache不是一个nosql的数据库,只是一个提供内存缓存功能的系统。那怎么理解别人说的memcache又是一个nosql数据库?
       首选说明一下什么是nosql(泛指非关系型数据库),关系型数据是基于二维表(实体和实体之间的关系就叫做关系型数据库),而非关系型数据库不使用SQL语句作为查询,使用key-value这种数据结构保存数据的数据库,而memcache本身是没有使用SQL语句作为查询的,所以他是nosql库。

二、memcached原理

1.当Web客户端发送请求到Web服务器的应用程序时,应用程序会通过调用Memcached API客户端程序库接口去连接Memcached服务器,进而查询数据。如果此时Web客户端所请求的数据已经在Memcached服务端中缓存,则Memcached服务端会将数据返回给Web客户端;如果数据不存在,则会将Web客户端请求发送至MySQL数据库,由数据库将请求的数据返回给Memcached以及Web客户端,与此同时memcached服务器也会将数据保存,方便下次使用
2.存储方式与数据过期方式

1)数据存储方式:Slab Allocation
       按组分配内存,每次分配一个Slab,相当于一个大小为1MB的页,然后在1MB的空间里根据数据大小划分大小相同的chunk。该方法可以有效解决内存碎片问题,但对内存空间有所浪费
2)数据过期方式: LRU、Laxzy Expiration
        LRU是指追加的数据空间不足时,会根据LRU的情况淘汰最近最少使用的记录。
        Laxzy Expiration即惰性过期,是指使用get时查看记录时间,从而检查记录是否已经过期

3. Memcached 缓存机制

       缓存是常驻在内存的数据,能够快速进行读取。当程序写入缓存数据请求时,Memcached 的API接口将Key输入路由算法模块路由到集群中一台服务器, 之后由API接口与服务器进行通信,完成一次分布式缓存写入

4. Memcached分布式

       当向memcached集群存入/取出key/value时,memcached客户端程序根据一定的算法计算存入哪台服务器,然后再把key/value值存到此服务器中。
也就是说,存取数据分二步走,第一步,选择服务器,第二步存取数据。

5.分布式算法(Consistent Hashing):

余数算法
散列算法

三、安装memcached

1.安装libevent

1)解压

2)编译

./configure --prefix=/usr/local/libevent

3)安装

make && make install
2.安装memcached

1)解压

2)配置

./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/

3)安装

make && make install
3.memcached启动与停止

1)启动:memcached -d -m 128 -u root -l 192.168.11.6 -p 11211 -c 1024 -P /usr/local/memcached/memcached.pid

选项及解释
-d 启动一个守护进程
-m 分配使用的内存空间大小 默认 64M
-u  运行memcached的用户
-l  服务器的监听地址
-p  端口  11211
-c 设置最大并发连接数 1024
-P 保存PID文件

2)停止

killall memcached
4.编写memcached服务控制脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、memcached数据库操作与管理

1.连接memcached
telnet ip 11211

在这里插入图片描述

2.操作命令格式
<command name><key><flags><exptime><bytes><data block>
3.常见操作命令

1)添加一条键值数据

add username 0 0 7
example
STORED
username:键值
0:标记位,表示自定义信息为0(序号)
0:过期时间(表示永不过期)
example:键值

2)查询键值数据

get 键值名
gets 键值名	#检查最近是否更新,最后一位显示的是更新因子,每更新一次,更新因子加一

在这里插入图片描述
3)更新一条数据

replace 需要更新的键值名 标记位 过期时间 字节数  #键值必须存在,否则报错
	例:replace username 0 0 7
set 需要更新的键值名 标记位 过期时间 字节数	#如果键值名不存在,就创建键值
	例:set username 0 0 10

4)删除一条缓存数据

delete 键值名 

5)追加数据

在原键值后追加
	append 键值名 标记位 过期时间 字节数 
	例:append username 0 0 7
在原键值前追加
	prepend 键值名 标记位 过期时间 字节数

6)清除所有缓存数据

flush_all

7)查看服务器统计信息

stats
stats items          #返回所有键值对的统计信息
stats cachedump 1 0  #返回指定存储空间的键值对
stats slabs		     #显示各个slab的信息,包括chunk大小、数目、使用情况
stats sizes		     #输出所有item的大小
stats reset 		 #清空统计数据

五、安装memcached API客户端

1.安装libmemcached

1)解压

2)配置

./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached
make && make install
2.编译安装memcached扩展

1)解压memcached-2.2.0.tgz

2)进入解压目录

cd memcached-2.2.0.tgz

3)配置,因为memcached-2.2.0.tgz包中没有配置脚本,需要PHP的phpize生成配置脚本
/usr/local/php5/bin/phpize

./configure --enable-memcached --with-php-config=/usr/local/php5/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl

4)安装

make test
make install

共享组件位置共享组件位置
5)配置PHP,添加memcached组件

vim /usr/local/php5/php.ini
添加:
extension_dir="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/"
extension=memcached.so

6)访问nginx的PHP页面看模块是否添加成功

vim /var/www/html/index.php
<?php
	phpinfo();
?>

在这里插入图片描述
7)编写网页,测试memcached API功能

vim /var/www/html/test.php
<?php
 $memcache = new Memcached();
 $memcache->addServer('192.168.1.6',11211);  memcached服务端的ip
 $memcache->set('key','Memcache test successful',0,60);
 $result = $memcache->get('key');
 unset($memcache);
 echo $result;
?>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!