-
什么是memcache:
-
Memcache是分布式高速缓存系统。
-
Memcache把从数据库中读取到的数据暂存在内存中,等下次访问同样数据时,直接从Memcache中读取。因为Memcache中的数据存放在内存中,所以访问速度特别快,但重要数据最好保存在数据库或硬盘上,防止断电后Memcache数据丢失
-
-
使用场景:
-
非持久化存储:对数据存储要求不高。
-
分布式存储:不适合单机使用。(一台服务器,不建议装memcache,占内存太大,讲memcache单独装到一台服务器上,推荐使用 数据库主机1 + memcache主机2)
-
Key/Value存储:格式件单,不支持List、Array数据格式。
-
-
memcache服务端的安装
-
编译安装Libevent Memcache(编译安装更灵活,但是出现问题解决复杂)
-
使用安装管理工具 centos的yum,ubuntu的apt-get
-
memcached 是memcache的升级版本 在速度和稳定性上都会比memcache要好的多
-
-
启动进程:memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root
-
PHP使用Memcache类:
-
系统类:addServer | addServers | getStats | getVersion
-
数据类:add | set | delete | flush | replace | increment | decrement | get
-
进阶类:setMulti | deleteMulti | getMulti | getResultCode | getResultMessage
-
-
项目中使用memcache案例
-
即时生成缓存
比如新闻页面,第一个访问者访问的时候生成缓存,以后的访问者就利用缓存,然后设置这种缓存有过期时间,当过一定时间没有访问的时候,缓存自动清除
-
提前生成缓存
比如网站首页,访问量很高,可以使用脚本提前生成缓存
-
永久生成缓存
比如联系我们页面,很少改动,可以生成永久缓存
-
-
telnet测试memcached:
-
telnet 127.0.0.1 11211
-
添加缓存数据:只有数据不存在时进行添加的
-
add keyName(键名) 0 30(过期时间单位为秒)3 (要添加value的长度)
-
123(缓存内容)
-
-
获取缓存数据:用于检索与之前添加的键相对的值
-
get keyName(键名)
-
-
添加或更新缓存数据:set的key已经存在,该命令更新该key所对应的原来的数据。如果不存在就等于a
-
set keyName(键名) 0 30(过期时间单位为秒)3 (要添加value的长度)
-
123(缓存内容)
-
-
替换缓存数据:替换存储中的键
-
replace keyName(键名) 0 30(过期时间单位为秒)3 (要添加value的长度)
-
123(缓存内容)
-
-
删除缓存数据:删除 memcached 中的任何现有值
-
delete keyName(键名)
-
-
-
代码逻辑:
<?php
$memd = new Memcached();
$memd->addServer('127.0.0.1', 11211);
// array(1) { ["127.0.0.1:11211"]=> array(24) { ["pid"]=> int(3702) ["uptime"]=> int(75687) ["threads"]=> int(4) ["time"]=> int(1487659933) ["pointer_size"]=> int(64) ["rusage_user_seconds"]=> int(1) ["rusage_user_microseconds"]=> int(372759) ["rusage_system_seconds"]=> int(0) ["rusage_system_microseconds"]=> int(594052) ["curr_items"]=> int(7) ["total_items"]=> int(69) ["limit_maxbytes"]=> int(67108864) ["curr_connections"]=> int(5) ["total_connections"]=> int(47) ["connection_structures"]=> int(9) ["bytes"]=> int(6030) ["cmd_get"]=> int(113) ["cmd_set"]=> int(100) ["get_hits"]=> int(83) ["get_misses"]=> int(30) ["evictions"]=> int(0) ["bytes_read"]=> int(11966) ["bytes_written"]=> int(36622) ["version"]=> string(6) "1.4.14" } }
var_dump($memd->getStats()); echo '<br />';
// array(1) { ["127.0.0.1:11211"]=> string(6) "1.4.14" }
var_dump($memd->getVersion()); echo '<br />';
// bool(false) int(1)
var_dump($memd->add('key1', 'value1', 60)); var_dump($memd->get('key1')); echo '<br />';
// bool(false) int(1)
var_dump($memd->add('key1', 'value1', 60)); var_dump($memd->get('key1')); echo '<br />';
// bool(true) string(6) "value2"
var_dump($memd->set('key1', 'value2', 60)); var_dump($memd->get('key1')); echo '<br />';
// bool(true) string(6) "value3"
var_dump($memd->replace('key1', 'value3', 60)); var_dump($memd->get('key1')); echo '<br />';
// bool(true)
var_dump($memd->delete('key1')); echo '<br />';
// bool(false) bool(false) int(16)
var_dump($memd->replace('key1', 'value2', 60)); var_dump($memd->get('key1')); var_dump($memd->getResultCode()); echo '<br />';
// bool(false) bool(false)
var_dump($memd->increment('key1', 1, 60)); var_dump($memd->get('key1')); echo '<br />';
// bool(true) int(2) int(2)
var_dump($memd->set('key1', 1, 60)); var_dump($memd->increment('key1', 1)); var_dump($memd->get('key1')); echo '<br />';
// int(1) int(1)
var_dump($memd->decrement('key1', 1)); var_dump($memd->get('key1')); echo '<br />';