欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

高性能内存对象缓存memcached

程序员文章站 2022-07-03 14:07:05
...

一、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
高性能内存对象缓存memcached
高性能内存对象缓存memcached

四、memcached数据库操作与管理

1.连接memcached
telnet ip 11211

高性能内存对象缓存memcached

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 键值名	#检查最近是否更新,最后一位显示的是更新因子,每更新一次,更新因子加一

高性能内存对象缓存memcached
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

高性能内存对象缓存memcached共享组件位置
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();
?>

高性能内存对象缓存memcached
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;
?>
相关标签: memcached