Memcached 数据缓存系统

常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。本质上,它是一个简洁的key-value存储系统。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

内存管理机制:采用slab内存动态分配机制,采用lru对象清除机制。采用hash机制快速检索。


Memcached服务端的安装:

1,安装epel-release扩展源

2.安装:事件触发的网络库.libevent libevent-devel

3.安装:连接memcached的工具nc(查看工具)

4.安装memcached,libmemcached(客户端工具包可以不按照)当然memcached也有自动工具memcached-tool,也可查看。

通过yum源安装即可,提前按照epel扩展源

yum install -y libevent libevent-devel nc  memcached libmemcached

查看是否安装成功

rpm -qa libevent libevent-devel nc  memcached libmemcached

查看命令路径:which memcached 为:/usr/bin/memcached

启动:/etc/init.d/memcached start

查看监听默认端口及进程:默认端口为:11211

netstat -lnp|grep memcached

ps -ef|grep memcached|grep -v grep

lsof -i :11211

相关参数如端口等.在/etc/init.d/memcached启动文件中或/etc/syscofig/memcached配置文件中定义。注释:只有更改/etc/sysconfig/memcached文件才生效。


文件内容如下:vim /etc/syscofig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

如:更改内存大小为128M CACHESIZE="128" 重启

[root@bogon ~]# ps -aux|grep mem

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

root        843  0.0  0.0      0     0 ?        S    04:10   0:00 [vmmemctl]

496        2818  0.0  0.0 330844   988 ?        Ssl  04:51   0:00 memcached -d -p 11211 -u memcached -m 128 -c 1024 -P /var/run/memcached/memcached.pid

root       2852  0.0  0.0 103252   876 pts/1    S+   04:54   0:00 grep mem

已经生效。

Memcached启动参数

-d 启动一个守护进程。

-m 分配个memcache使用的内存熟路,单位是MB

-u 运行memcache的用户,如果当前为root,需要使用此参数指定用户。

-l 监听的服务器ip地址。

-p 设定memcache监听的端口,默认11211

-c 设置最大运行的并发连接数,默认为1024.

-P设置保存Memcache的pid文件 保存pid到指定文件。

默认没有指定ip,如果设置可以在配置文件中设置OPTIONS="-l 127.0.0.1"

重启!Ps可以查看。


Memcached可以同时启动多个实例如
启动第一个实例:memcached -m 16m -p 11211 -d -u root -c 8192

启动第二个实例:memcached -m 16m -p 11212 -d -u root -c 8192

ps -ef|grep memcache|grep -v grep

可以加入/etc/rc.local中以便下次开机启动tail -2 /etc/rc.local

/usr/bin/memcached -m 16m -p 11211 -d -u root -c 8192

/usr/bin/memcached -m 16m -p 11211 -d -u root -c 8192

查看运行状态命中多少数据,查看命令nc 提前我们已经安装过了nc

查看memcached状态

用自带工具查看:memcached-tool 127.0.0.1:11211 stats

查看此工具由那个包安装的:rpm -qf `which memcached-tool` 由:memcached包安装的。

查看比较多的有:get_hits命中了多少cmd_get总请求多少?等...通过此值可以算出命中率多少,最好不要第一百分之80.

用nc命令查看echo stats|nc 127.0.0.1 11211 和上面显示一致。

用:memstat --servers=127.0.0.1:11211 由libmemcached包安装的

连接memcached进行管理 管理可用telnet ip 端口 管理也可用nc管理

新手可以按照memadmin php工具第三方软件管理(memadmin-1.0.12.tar.gz)下载解压后将Memadmin 移动至站点根目录。注:必须支持php。

mv memadmin /usr/local/apache2/htdocs 下浏览器访问:

新手管理还是比较方便的。呵呵。


Telnet 127.0.0.1 11211

添加数据:set key1 0 300 2  (键名为key,0为flags标记必须为10进制整数,300过期时间s,2表示字节。)

回车显示STORED表示存储成功。

查看数据:get key1

删除数据:delete key1

替换数值:replace key1 0 300 2

退出:quit

查看memcached chunks等,占用大小:memcached-tool 127.0.0.1:11211 display。

Mysql与memcached的对比:

Mysql:insert  memcached:set

Mysql:select  memcached: get

Mysql:delete  memcached:delete

Memcached的语法规则:

<command name><key><flags><exptime><bytes>\r\n<data block>\r\n\

\r\n在windows是Enter


缓存管理命令

stats 显示信息同上“memcached-tool 127.0.0.1:11211 stats

STAT pid 22459                             进程ID

STAT uptime 1027046                        服务器运行秒数

STAT time 1273043062                       服务器当前unix时间戳

STAT version 1.4.4                         服务器版本

STAT libevent 2.0.21-stable

STAT pointer_size 64                       操作系统字大小(这台服务器是64位的)

STAT rusage_user 0.040000                  进程累计用户时间

STAT rusage_system 0.260000                进程累计系统时间

STAT curr_connections 10                   当前打开连接数

STAT total_connections 82                  曾打开的连接总数

STAT connection_structures 13              服务器分配的连接结构数

STAT reserved_fds 20

STAT cmd_get 54                            执行get命令总数

STAT cmd_set 34                            执行set命令总数

STAT cmd_flush 3                           指向flush_all命令总数

STAT get_hits 9                            get命中次数

STAT get_misses 45                         get未命中次数

STAT delete_misses 5                       delete未命中次数

STAT delete_hits 1                         delete命中次数

STAT incr_misses 0                         incr未命中次数

STAT incr_hits 0                           incr命中次数

STAT decr_misses 0                         decr未命中次数

STAT decr_hits 0                           decr命中次数

STAT cas_misses 0                          cas未命中次数

STAT cas_hits 0                            cas命中次数

STAT cas_badval 0                          使用擦拭次数

STAT touch_hits 0

STAT touch_misses 0

STAT auth_cmds 0

STAT auth_errors 0

STAT bytes_read 15785                      读取字节总数

STAT bytes_written 15222                   写入字节总数

STAT limit_maxbytes 67108864               分配的内存数(字节)

STAT accepting_conns 1                     目前接受的链接数

STAT listen_disabled_num 0

STAT time_in_listen_disabled_us 0

STAT threads 4                             线程数

STAT conn_yields 0

STAT hash_power_level 16

STAT hash_bytes 524288

STAT hash_is_expanding 0

STAT malloc_fails 0

STAT conn_yields 0

STAT bytes 0                               存储item字节数

STAT curr_items 0                          item个数

STAT total_items 34                        item总数

STAT expired_unfetched 0

STAT evicted_unfetched 0

STAT evictions 0                           为获取空间删除item的总数

STAT reclaimed 0

STAT crawler_reclaimed 0

STAT crawler_items_checked 0

STAT lrutail_reflocked 0


stats items 命令
执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行。

stats slabs命令

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

flush_all命令

flush_all 仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则 flush_all 能提供很大的用处。

PHP连接Memcached

客户端:安装php的memcache扩展(lamp平台)

memcache在php中编译

#  wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.3.tgz

# tar zxvf memcache-2.2.3.tgz

# cd memcache-2.2.3

# /usr/local/php/bin/phpize

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

# make

# make install

# cp modules/memcache.so /usr/local/php/ext/   //把memcache.so 拷贝至php的extension_dir下,#查看php extension_dir的方法是  /usr/local/php/bin/php -i |grep extension_dir

修改扩展路径

mkdir /usr/local/php/ext

在php.ini中修改:

extension_dir = "/usr/local/php/ext"

然后在php.ini 中添加

extension = memcache.so

下载测试页面:

curl www.apelearn.com/study_v2/.memcache.txt>1.php 2>/dev/null

或者直接创建测试文件内容如下vim /usr/local/php/bin/1.php

<?php

//连接Memcache Memcache

$mem = new Memcache;

$mem->connect("192.168.1.105", 11211);

//保存数据

$mem->set('key1', 'This is first value', 0, 60);

$val = $mem->get('key1');

echo "Get key1 value: " . $val ."<br>";

//替换数据

$mem->replace('key1', 'This is replace value', 0, 60);

$val = $mem->get('key1');

echo "Get key1 value: " . $val . "<br>";

//保存数组数据

$arr = array('aaa', 'bbb', 'ccc', 'ddd');

$mem->set('key2', $arr, 0, 60);

$val2 = $mem->get('key2');

echo "Get key2 value: ";

print_r($val2);

echo "<br>";

//删除数据

$mem->delete('key1');

$val = $mem->get('key1');

echo "Get key1 value: " . $val . "<br>";

//清除所有数据

$mem->flush();

$val2 = $mem->get('key2');

echo "Get key2 value: ";

print_r($val2);

echo "<br>";

//关闭连接

$mem->close();

?>

切记上面的ip设置服务器端ip。

/usr/local/php/bin/php 1.php

[root@localhost bin]# /usr/local/php/bin/php 1.php

Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array

(

[0] => aaa

[1] => bbb

[2] => ccc

[3] => ddd

)

<br>Get key1 value: <br>Get key2 value: <br>[root@localhost bin]#

出现如下结果表示ok。

或在站点根目录下创建2.php vim /usr/local/apache2//index1.html

内容如下

<?php

$memcache = new Memcache;

$memcache->connect( '192.168.1.105', 11211 ) or die ( "Could not connect Mc server" );

$memcache->set ( 'key','wyl wyl' );

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

echo $get;

?>

浏览器测试:出现wyl wyl 表示ok。


Memcached实现session共享

在php配置中分为lamp和lnmp 两者的配置是不一样的。在客户端lamp或者lnmpphp配置文件中修改php文件如下:

第一种:修改php配置文件

session.save_handler = files

session.save_path = "/tmp" 为--》

session.save_handler = memcache

session.save_path = "tcp://192.168.1.105:11211"

ip 端口改为memcache服务器ip端口地址即可。在apache 或nginx 站点目录新建测试的php文件

vim /usr/local/apache2/htdocs/index3.php

内容随便这里依然用以前的测试文件。

第二种:针对apache修改httpd.conf中对应的虚拟主机汇总添加

php_value session.save_handler “memcache”

php_value session.save_path “tcp://192.168.1.11211”

第三种:正对php 在php-fpm.conf中对应的pool中添加

php_value[session.save_handler]=memcache

php_value[session.save_path] = “tcp://192.168.1.105:11211”

测试1.可在站点配置文件下编写info.php文件

<?php

phpinfo();

?>

保存退出。

curl 192.168.1.220 info.php 用curl 筛选或浏览器访问:

session.referer_check

no value

no value

session.save_handler

memcache

memcache

session.save_path

tcp://192.168.1.105:11211

tcp://192.168.1.105:11211

session.serialize_handler

php

php

session.upload_progress.cleanup

On

On

有session.save_handler和_path显示数据表示ok


测试2.命令测试:

在站点文件下创建文件session.php文件

<?php

session_start();

if (!isset($_SESSION['TEST'])) {

$_SESSION['TEST'] = time();

}

$_SESSION['TEST3'] = time();

print $_SESSION['TEST'];

print "<br><br>";

print $_SESSION['TEST3'];

print "<br><br>";

print session_id();

?>

写入测试内容

[root@localhost htdocs]# telnet 192.168.1.105 11211

Trying 192.168.1.105...

Connected to 192.168.1.105.

Escape character is '^]'.

flush_all

OK

[root@localhost ~]# curl 192.168.1.220/session.php

1479421282<br><br>1479421282<br><br>0onfdgvsgvpuev63k5qn74e993

[root@localhost htdocs]# telnet 192.168.1.105 11211

Trying 192.168.1.105...

Connected to 192.168.1.105.

Escape character is '^]'.

flush_all

OK

get 0onfdgvsgvpuev63k5qn74e993

VALUE 0onfdgvsgvpuev63k5qn74e993 0 37

TEST|i:1479421282;TEST3|i:1479421282;

END

Memcached sesson共享存储ok


Memcached 兼容持久化

MemcachedBD(key-value)

Tokyo tyrant(key-value)

持久化软件如:redis,ttserver

Memcached 数据缓存系统的更多相关文章

  1. jQuery源码解读 - 数据缓存系统:jQuery.data

    jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据 ...

  2. jQuery.data的是jQuery的数据缓存系统

    jQuery.Data源码 jQuery.data的是jQuery的数据缓存系统 jQuery.data的是jQuery的数据缓存系统.它的主要作用就是为普通对象或者DOM元素添加数据. 1 内部存储 ...

  3. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  4. memcached搭建缓存系统

    Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 1.分布式应用.由于memca ...

  5. Memcached 分布式缓存系统部署与调试

    Memcache 分布式缓存系统部署与调试 工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的;目前主要用来缓存数据库的数据;存放在内存的数据通过LRU算法 ...

  6. [Memcached]分布式缓存系统Memcached在Asp.net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  7. memcached分布式缓存系统

    在数据驱动的Web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活.此时 ...

  8. 第十七课:js数据缓存系统的原理

    这一章主要讲的是jQuery的缓存系统的历史发展,以及他自己的框架的缓存系统的实现.都是源码解析. 我就挑几个重点讲下: (1)jQuery的缓存机制的原理 jQuery的缓存机制实现的原理是在元素中 ...

  9. 服务器后端开发系列——《实战Memcached内存缓存系统》

    1.实战Memcached缓存系统(1)Memcached基础及示例程序 内容:建筑Memcached背景知识和入门示例程序. 2.实战Memcached缓存系统(2)Memcached Java A ...

随机推荐

  1. 结构及其使用 struct (C#)

    首先结构是值类型. 结构是使用 struct 关键字定义的,结构如下: struct 结构名{} 结构概述 结构具有以下特点: 结构是值类型,而类是引用类型. (结构不能包含显式的无参数构造函数) 与 ...

  2. 架构设计 - Server设计草稿

    DMServer Framework 主要属性: 四个模块部署在不同服务器,双层部分考虑主备和分布式部署. 架构可依据具体前端需求进行裁剪,灵活配置. gate用于业务框架分布式部署,在业务量可控范围 ...

  3. js 自运行函数作用

    var obj = new Object(); function test2() { for (var i=1;i<5;i++) { obj['f'+i] = function() { retu ...

  4. [抓紧小长假的尾巴] 分析一个KeyFileMe

    系统 : Windows xp 程序 : keyfileme 程序下载地址 :http://pan.baidu.com/s/1qYVfvu0 要求 : 编写KeyFile 使用工具 : OD 可在看雪 ...

  5. 作业八:团队项目——Alpha阶段项目总结

    1.项目的预期目标 最初的项目计划实现一款类似微信飞机大战这样的一款模拟飞行游戏,中途也没有变动. 2.目前项目实现的功能. 击落飞机并计分. 3.下阶段我们可以增加游戏更多的功能,以及增加网络在线对 ...

  6. Android模拟器Genymotion如何访问本地服务器?

    Genymotion能否访问到本地服务器,其实与Genymotion本身并无太大关系.Genymotion作为VirtualBox中的一个虚拟OS运行,所以它访问网络的方式与其他VirtualBox中 ...

  7. Ubuntu vi 常用命令集合

    :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件,并退出viq: 不保存文件,退出vi:q! ...

  8. Java笔记10-Object包装类型字符串

    提纲: 1.java.lang.0bject中常用方法介绍 2.基本类型对应的包装类型的介绍 以及基本类型和包装类型之间的相互转换 3.java.lang.String 字符串处理类 java.lan ...

  9. ubuntu12.04静态ip设置问题

    由于linux知识不是学的很深,所以仅代表我自己的设置成功总结. 第一步是设置/etc/network/interfaces 增加静态ip设置 auto eth0iface eth0 inet sta ...

  10. 修改oracle实例名orcl为demo

    修改oracle实例名有六步: 1.sqlplus username/password as sysdba登陆,然后从spfile文件创建pfile文件 :create pfile from spfi ...