php memcached存储对象,高性能内存对象缓存——Memcached

认识 Memcached

Memcached 简介

Memcached 是一套开源的高性能分布式内存对象缓存系统,它将所有的数据都存储在内存中,因为在内存中会统一维护一张巨大的 Hash 表,所以支持任意存储类型的数据。很多网站通过使用 Memcached 提高网站的访问速度,尤其是对于大型的需要频繁访问数据的网站。

Memcached 是典型的 C/S 架构,因此需要安装 Memcached 服务端与 Memcached API 客户端。Memcached 服务端是用 C 语音编写的,而 Memcached API 客户端可以用任何语言来编写,如PHP、Python、Perl 等,并通过 Memcached 协议与 Memcached 服务端进行通信。

存储方式与数据过期方式

Memcached 具有独特的存储方式和数据过期方式

数据存储方式:Slab Allocation

Slab Allocation 即按组分配内存,每次先分配一个 Slab ,相当于一个大小为1MB的页,然后在1MB的空间里根据数据划分大小相同的 Chunk 。该方法可以有效解决内存碎片问题,但可能会对内存空间有所浪费。

数据过期方式:LRU、Laxzy Expiration

LRU是指追加的数据空间不足时,会根据LRU的情况淘汰最近很少使用的记录。Laxzy Expiration即惰性过期,是指使用get时查看记录时间,从而检查记录是否已经过期。

Memcached 缓存机制

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

Memcached 分布式

Memcached 分布式部署主要依赖于 Memcached 的客户端来实现,多个 Memcached 服务器是独立的。分布式数据如何存储是由路由算法所决定的。

当数据达到客户端程序库时,客户端的算法就依据路由算法来决定保存的 Memcached 服务器。读取数据时,客户端依据保存数据时的路由算法选中和存储数据时相同的服务器来读取数据。

Memcached 路由算法

求余数 hash 算法

求余数 hash 算法是先用 key 做 hash 运算得到一个整数,再去做 hash 算法,根据余数进行路由。这种算法适合大多数据需求,但是不适合用在动态变化的环境中,比如有大量机器添加或者删除时,会导致大量对象的存储位置失效。

一致性 hash 算法

一致性 hash 算法适合在动态变化的环境中使用。原理是按照 hash 算法把对应的 key 通过一定的 hash 算法处理后,映射形成一个首尾相接的闭合循环,然后通过使用与对象存储一样的 hash 算法将机器也映射到环中,按顺时针方向将所有对象存储到离自己最近的机器中。

安装 Memcached 案例

本案例使用两台 CentOS 7.4 系统完成,一台是 Memcached 服务器,一台是基于 LAMP 架构进行 Memcached 拓展的 Memcached API 客户端,可以根据企业需求进行架构调整。

案例环境

主机

IP地址

主要软件包

Memcached 服务器

192.168.100.201

memcached-1.5.6.tar.gz、libevent-2.1.8-stable.tar.gz

Memcached API客户端

192.168.100.202

memcached-2.2.7.tgz 、httpd、mysql、php

开始部署

Memcached 服务器

# tar zxvf memcached-1.5.6.tar.gz -C /opt/

# tar zxvf libevent-2.1.8-stable.tar.gz -C /opt/

# yum install gcc gcc-c++ make -y

# cd /opt/libevent-2.1.8-stable

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

# make && make install

# cd /opt/memcached-1.5.6

# ./configure \

--prefix=/usr/local/memcached \

--with-libevent=/usr/local/libevent/

# make && make install

# ln -s /usr/local/memcached/bin/* /usr/local/bin/

# memcached -d -m 32m -p 11211 -u root // 开启服务(-d守护进程 -m缓存大小32M -p端口11211)

# netstat -anpt | grep memc //查看端口 11211/tcp端口

# systemctl stop firewalld.service

# setenforce 0

Memcached API 客户端

手工编译安装LAMP架构:见之前的博文,在此不多叙述

测试数据库工作是否正常

# mysql -u root -p

> CREATE DATABASE sky;

> GRANT all ON sky.* TO 'skyuser'@'%' IDENTIFIED BY 'admin123';

> flush privileges;

# vi /usr/local/httpd/htdocs/index.php

$link=mysql_connect('192.168.100.202','skyuser','admin123');

if($link) echo "

Success!!

";

else echo "Fail!!";

mysql_close();

?>

显示 Success 为正常工作

安装Memcached API 客户端

# yum install autoconf -y

# tar xf memcached-2.2.7.tgz -C /opt/

# cd /opt/memcached-2.2.7

//使用PHP的phpize脚本生成配置脚本configure 再进行配置编译

# /usr/local/php5/bin/phpize

# ./configure \

--enable-memcache \

--with-php-config=/usr/local/php5/bin/php-config

# make && make install

............

/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/ //记录此行(共享组件的位置) 下面用到

配置PHP,添加Memcached组件

# vi /usr/local/php5/php.ini //搜索并修改下面一行,再新增一行

extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20131226/"

extension = memcache.so

编写测试页面,测试Memcached是否正常工作

# vi /usr/local/httpd/htdocs/index.php

$memcache = new Memcache();

$memcache->connect('192.168.100.202',11211);

$memcache->set('key','Memcache test Successfull!',0,60);

$result = $memcache->get('key');

unset($memcache);

echo $result;

?>

# service httpd restart

6d0b7b12ff45164c3b1224c3434d4c0b.png

Memcached 数据库操作与管理

Memcached数据库操作和管理非常简单,安装使用telnet连接11211端口就可以

# yum install telnet -y

# telnet 127.0.0.1 11211

新建数据

add username 0 0 7 //不进行压缩和序列化标识 数据过期时间为永不过期 标识号是7就需要输入7位数。

example //输入数据

获取数据

get username //获取数据

VALUE username 0 7

example

gets username

VALUE username 0 7 1 //最后一位是更新因子会自增1

example

更新数据

set username 0 0 10 //更新信息,若键名不存在,则自行添加

everything

replace username 0 0 8 //更新信息,若键名不存在,则报错

12345678

检查更新

gets username

VALUE username 0 8 4

12345678

cas username 0 0 7 4 //检查更新,更新因子相等则更新否则返回EXISTS

lodging

STORED

追加数据

append username 0 0 7 //键值后追加数据

example

STORED

prepend username 0 0 2 //键值前追加数据

un

STORED

清除数据

delete username //清除指定的键值数据

flush_all //清除所有缓存数据

OK

查看服务器统计信息

stats //显示状态信息

stats items //返回所有键值对的统计信息

stats cachedump 1 0 //返回指定存储空间的键值对

stats slabs //显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats sizes //输出所有item的大小和个数

stats reset //清空统计数据

退出

quit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值