Memcached 数据缓存系统
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
转载于:https://www.cnblogs.com/wylhome/p/6076218.html
Memcached 数据缓存系统相关推荐
- Memcached和Redis数据缓存系统
1.1 Memcached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱 ...
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
一.问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从 ...
- memcached搭建缓存系统
概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 适用场合 分布式应用.由于memcac ...
- 第十七课:js数据缓存系统的原理
这一章主要讲的是jQuery的缓存系统的历史发展,以及他自己的框架的缓存系统的实现.都是源码解析. 我就挑几个重点讲下: (1)jQuery的缓存机制的原理 jQuery的缓存机制实现的原理是在元素中 ...
- Memcache缓存系统原理
在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...
- Memcached对象缓存详解
一.NoSQL概述 NoSQL数据存储不需要固定的表结构,通常也不存在连接操作.在大数据存取上具备关系型数据库无法比拟的性能优势.随着互联网web2.0网站的兴起,NoSQL数据库现在成了一个极其热门 ...
- 一款暴涨的全新缓存系统,让 Redis 气急败坏回击
回击就代表输了?! 今年年中,一位前谷歌.前亚马逊的工程师推出了他创作的开源内存数据缓存系统 Dragonfly,用 C/C++ 编写,基于 BSL 许可(Business Source Licens ...
- 分布式数据流计算系统的数据缓存技术综述
点击上方蓝字关注我们 分布式数据流计算系统的数据缓存技术综述 袁旭初, 付国, 毕继泽, 张岩峰, 聂铁铮, 谷峪, 鲍玉斌, 于戈 东北大学计算机科学与工程学院,辽宁 沈阳 110169 论文引用格 ...
- jQuery最核心的基础设施之一——数据缓存模块进化史
数据缓存系统最早应该是jQuery1.2引入的,那时它的事件系统完成照搬DE大神的addEvent.js,而addEvent在实现有个缺憾,它把事件的回调都放到EventTarget之上,这会引发循环 ...
最新文章
- Eigen教程1 - 基础
- python爬虫项目-32个Python爬虫实战项目,满足你的项目慌
- C语言函数调用过程的汇编分析(停更)
- Python基础7(集合与深浅copy)
- 精品教程--Android组件详解
- 拓端tecdat|R语言生存分析数据分析可视化案例
- 文献管理三剑客之Mendeley
- matlab读取excel、text文件 || xlsread textread
- 将自己开发的vue组件库发布到npm
- Solidity语言详解——view和pure函数的使用区别
- 万网绑定二级域名_万网主机绑定二级域名子目录
- UVa 1647 - Computer Transformation
- 雅可比(Jacobi)矩阵与行列式
- 解读:基于图卷积特征的卷积神经网络的股票趋势预测(文末赠书)
- 用Python定义一个求绝对值的函数
- 求解一个约束优化问题
- 【牛客网-前端笔试题】——Javascript专项练习
- 重新开始:第一篇,创建GitHub 仓库,搭建项目基础
- 5个商用字体网站,建议收藏
- 人生终其一生的意义和目的是什么?
热门文章
- 全方面了解和学习PHP框架
- [科普]MinGW vs MinGW-W64及其它
- 为数据中心度身定制智能基础设施管理系统
- Linux 常見的登錄檔檔名
- 人生致命的8个经典问题,你也常常犯傻
- Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi
- Android 多线程之Handler
- Android全局对象Application的使用,以及如何在任何地方得到Application全局对象
- Android 单击+双击+短按+长按 逻辑
- 如何向前一个Fragment回传信息?