memcached 就是这么简单

memcached

以key:value方式存储数据的服务器

以URI地址作为key,以实际页面作为value,缓存http对象数据

memcached: 缓存服务器,但本身无法决定缓存任何数据 ;非持久性

一半依赖于客户端(决定缓存哪些数据,缓存时长,key)

一半依赖于服务器(提供存储缓存数据的能力)

清除缓存数据的机制:

lazy:惰性,只要还有剩余缓存空间可用,之前缓存的数据不会自动清除

LRU:最近最少使用

非持久性服务器

缓存数据保存到内存中

48bytes最小

1M最大

避免内存碎片

buddy system:伙伴系统

避免内存外碎片(内存页面间的碎片)

将页面间的碎片重新组合成一个连续空间使用

slab allocator: slab分配器

存储小于内存单个页面大小(4K)的数据时,内存事先分配好符合各种小数据的空间使用

避免内存内碎片

slab class

memcached分配的内存空间大小的类别(48bytes的,80bytes的)

slab chunk

每个类别中分割的内存块的大小

memcached:不通信的分布式缓存服务器

memcached安装配置

安装libevent,用于提供基于事件驱动的API

# tar zxf libevent-2.0.20-stable.tar.gz

# cd libevent-2.0.20-stable

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

# make && make install

安装memcached

# yum  install -y cyrus-sasl-devel

# tar zxf memcached-1.4.15.tar.gz

# cd memcached-1.4.15

# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ --enable-sasl

# make && make install

memcached启动选项:

-p <num>:指定监听在TCP协议的端口,默认为11211

-U <num>:指定监听在UDP协议的端口,默认为11211;为0表示关闭监听UDP协议

-s <file>:指定监听在本地套接字

-l <addr>:指定监听的地址

-d:以daemon服务方式运行

-u <username>:指定运行的用户

-m <num>:以MB为单位,指定memcached使用的最大内存空间,默认为64M

-t <num>:指定用于处理入站请求的最大线程数,仅在memcached编译时开启支持线程才有效

-f <factor>: 指定slab allocator定义预先分配内存空间大小固定的块时的增长因子

-n <bytes>:指定最小的slab chunk大小,单位是字节 默认为48bytes

-P <file>:指定PID文件

-S:启用SASL认证功能

-c <num>: 最大并发连接数据,默认为1024

启动memcached进程

# /usr/local/memcached/bin/memcached -m 128 -n 20 -f 1.1 -d -u nobody

# netstat -tunlp | grep memcached

tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      6979/memcached

tcp        0      0 :::11211                    :::*                        LISTEN      6979/memcached

udp        0      0 0.0.0.0:11211               0.0.0.0:*                               6979/memcached

udp        0      0 :::11211                    :::*                                    6979/memcached

memcached服务启动脚本:

#!/bin/bash

#

# Init file for memcached

#

# chkconfig: - 86 14

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached

. /etc/rc.d/init.d/functions

## Default variables

PORT="11211"

USER="nobody"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

RETVAL=0

prog="/usr/local/memcached/bin/memcached"

desc="Distributed memory caching"

lockfile="/var/lock/subsys/memcached"

start() {

echo -n $"Starting $desc (memcached): "

daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE  "$OPTIONS"

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch $lockfile

return $RETVAL

}

stop() {

echo -n $"Shutting down $desc (memcached): "

killproc $prog

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f $lockfile

return $RETVAL

}

restart() {

stop

start

}

reload() {

echo -n $"Reloading $desc ($prog): "

killproc $prog -HUP

RETVAL=$?

echo

return $RETVAL

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

condrestart)

[ -e $lockfile ] && restart

RETVAL=$?

;;

reload)

reload

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

RETVAL=1

esac

exit $RETVAL

memcached常用命令

add命令:添加一个键

add keyname flag timeout datasize

get命令:获取键对应的值

get keyname

# telnet 10.1.1.1 11211

Trying 10.1.1.1...

Connected to 10.1.1.1.

Escape character is ‘^]‘.

add mykey 0 30 5 //添加一个键,名称为mykey

hello

STORED

get mykey   //获取mykey键对应的值

VALUE mykey 0 5

hello

END

perl module

cache::memcached

php

memcache

memcached

C/C++

libmemcached

memadmin基于GUI管理memcached的工具

配置PHP整合memcached

1、安装memcache

# tar zxf memcache-2.2.5.tgz

# cd memcache-2.2.5

# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:         20090626

Zend Module Api No:      20090626

Zend Extension Api No:   220090626

# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache

# make && make install

安装完成后,会有如下提示信息:

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

2、编辑/etc/php.d/memcache.ini文件,指定PHP支持memcache.so扩展模块

# vim /etc/php.d/memcache.ini

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so

3、重启php-fpm服务

# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

通过客户端浏览器访问index.php页面,查看memcache模块信息

创建如下php测试页面,查看php是否启用memcached

# vim /web/htdocs/test.php

<?php

$mem = new Memcache;

$mem->connect("127.0.0.1", 11211)  or die("Could not connect");

$version = $mem->getVersion();

echo "Server‘s version: ".$version."<br/>\n";

$mem->set(‘testkey‘, ‘Hello World‘, 0, 600) or die("Failed to save data at the memcached server");

echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";

$get_result = $mem->get(‘testkey‘);

echo "$get_result is from memcached server.";

?>

在客户端浏览器输入 http://10.1.1.1/test.php ,可看到如下信息,表示成功

Server‘s version: 1.4.15

Store data in the cache (data will expire in 600 seconds)

Hello World is from memcached server.

Nginx整合memcached

server {

listen 80;

server_name www.bj.com;

location / {

set $memcached_key $uri;

memcached_pass 127.0.0.1:11211;

default_type text/html;

error_page   404 @fallback;

}

location @fallback {

proxy_pass http://172.16.0.1;

}

}

配置memcached保存php session

条件:各PHP服务器要支持memcache

提供一台memcached服务器 IP地址 10.1.1.1  默认端口11211

此环境memeched服务及PHP全都安装在同一台机器上,IP地址为10.1.1.1

1、修改php.ini配置文件,指定使用memcache缓存数据并指定memcached服务器IP/端口

# vim /etc/php.ini

session.save_handler = memcache

session.save_path = "tcp://10.1.1.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

# /etc/init.d/php-fpm restart

2、测试

新建php页面setsess.php,为客户端设置启用session:

<?php

session_start();

if (!isset($_SESSION[‘www.bj.com‘])) {

$_SESSION[‘www.bj.com‘] = time();

}

print $_SESSION[‘www.bj.com‘];

print "<br><br>";

print "Session ID: " . session_id();

?>

新建php页面showsess.php,获取当前用户的会话ID:

<?php

session_start();

$memcache_obj = new Memcache;

$memcache_obj->connect(‘172.16.200.11‘, 11211);

$mysess=session_id();

var_dump($memcache_obj->get($mysess));

$memcache_obj->close();

?>

访问http://10.1.1.1/setsess.php页面时,可看到如下session ID:

1451393251

Session ID: af5ad1mvvgi9i249n31p1iflj2

访问http://10.1.1.1/showsess.php页面时,可看到如下session id的返回信息

string(24) "www.bj.com|i:1451393251;"

上、下session ID一致

安装memadmin以GUI界面管理memcached服务器

# tar zxf memadmin-1.0.12.tar.gz

将解压目录复制到网站根目录下

# mv memadmin /web/htdocs/memadmin

访问 http://10.1.1.1/memadmin即可打开GUI界面工具

可编辑/web/htdocs/memadmin目录下的config.php文件,修改默认登录的用户名、密码

时间: 2024-10-27 13:04:41

memcached 就是这么简单的相关文章

浅谈Memcached服务器的简单属性

Memcached的内存算法: 1. 传统的内存管理方式是,使用完通过malloc分配的内存后通过free来回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率. 2. Memcached利用slab allocation机制来分配和管理内存,它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,数据在存放时,根据键值大小去匹配slab大小,找就近的slab存放,也存在空间浪费现象. Memcached服务器的缓存: 1. Memcached的缓存策略

Memcached命令:简单获取缓存value用法

Memcached:命令用法1.cmd 输入telnet ip  端口 进入memcached服务端窗口比如:xxx.Token_T1435622096xxx为key获取此key的memcached value值:get xxx.Token_T1435622096xxx删除此key的memcached value值:delete xxx.Token_T1435622096xxx新赋值此key的memcached value值:set xxx.Token_T1435622096xxx 0 0 3 

memcached 安装与简单实用使用

一.简介 1.memcache与memcached的区别与联系: memcache是php的拓展,memcached是客户端,复杂的说:Memcache模块提供了于memcached方便的面向过程及面向对象的接口,memcached是为了降低动态web应用 从数据库加载数据而产生的一种常驻进程缓存产品. 二.安装 Windows 64位 memcached下载地址:http://www.urielkatz.com/projects/memcached-win64/memcached-win64.

memcached简单介绍及在django中的使用

什么是memcached? Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力.Memcached是通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像.视频.文件.以及数据库检索的结果等,当然因为memcached中的数据是保存在内存中的,应该没有人会把视频.图片等数据保存在memcached中.其实,memcached的原理简单的说就是将数据调用到内存中,然后从内存中读取,从

php使用memcached详解

一.memcached 简介 在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高效.快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序. 二.memcached 安装 首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz.除此之外,memcached 用到了 libevent,我

Memcached 笔记与总结(4)memcache 扩展的使用

在 wamp 环境下进行测试:WAMPSERVER 2.2(Windows 7 + Apache 2.2.21 + PHP 5.3.10 + memcache 3.0.8 + Memcached 1.4.24) 在本地开启 Memcached 服务: 简单例子: <?php //创建Memcache对象 $mc = new Memcache(); //连接Memcached服务器 $mc->connect('127.0.0.1', 11211); //存储数据 $mc->set('nam

Linux CentOS 7下Memcached 安装与配置

前言 本篇文章记录一下Linux CentOS 7中关于Memcached的安装与配置. 安装 安装memcached之前首先需要安装libevent,我这里用的版本是: ?libevent-2.0.22 ?memcached-1.4.25 首先将这两个安装文件上传至Linux服务器,在解压安装之前最好先检查一下是否已安装,从libevent开始: rpm -q libevent 发现系统已经安装了一个版本的libevent: 这里写图片描述 既然已经安装了一个版本的libevent,那么我们就

谈谈Memcached与Redis

1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失.Memcached使用C语言开发,在大多数像Linux.BSD和Solaris等POSIX系统上,只要安装了libevent即可使用.在Windows下,它也有一个可用的非官方版本(http://code.jellyc

memcached使用文档

使用memcached进行内存缓存 通常的网页缓存方式有动态缓存和静态缓存等几种,在ASP.NET中已经可以实现对页面局部进行缓 存,而使用memcached的缓存比ASP.NET的局部缓存更加灵活,可以缓存任意的对象,不管是否在页面上输出.而memcached最大的优点是 可以分布式的部署,这对于大规模应用来说也是必不可少的要求. LiveJournal.com使用了memcached在前端进行缓存,取得了良好的效果,而像wikipedia,sourceforge等也采用了或即将采用memca