Memcache内存缓存学习

分类: 互联网 > 内存缓存
  1. 什么是memcache:

    1. Memcache是分布式高速缓存系统。

    2. Memcache把从数据库中读取到的数据暂存在内存中,等下次访问同样数据时,直接从Memcache中读取。因为Memcache中的数据存放在内存中,所以访问速度特别快,但重要数据最好保存在数据库或硬盘上,防止断电后Memcache数据丢失

  2. 使用场景:

    1. 非持久化存储:对数据存储要求不高。

    2. 分布式存储:不适合单机使用。(一台服务器,不建议装memcache,占内存太大,讲memcache单独装到一台服务器上,推荐使用 数据库主机1 + memcache主机2)

    3. Key/Value存储:格式件单,不支持List、Array数据格式。

  3. memcache服务端的安装

    1. 编译安装Libevent Memcache(编译安装更灵活,但是出现问题解决复杂)

    2. 使用安装管理工具 centos的yum,ubuntu的apt-get

    3. memcached 是memcache的升级版本 在速度和稳定性上都会比memcache要好的多

  4. 启动进程:memcached -d -l 127.0.0.1 -p 11211 -m 150 -u root

  5. PHP使用Memcache类:

    1. 系统类:addServer | addServers | getStats | getVersion

    2. 数据类:add | set | delete | flush | replace | increment | decrement | get

    3. 进阶类:setMulti | deleteMulti | getMulti | getResultCode | getResultMessage

  6. 项目中使用memcache案例

    1. 即时生成缓存

      比如新闻页面,第一个访问者访问的时候生成缓存,以后的访问者就利用缓存,然后设置这种缓存有过期时间,当过一定时间没有访问的时候,缓存自动清除

    2. 提前生成缓存

      比如网站首页,访问量很高,可以使用脚本提前生成缓存

    3. 永久生成缓存

      比如联系我们页面,很少改动,可以生成永久缓存

  7. telnet测试memcached:

    1. telnet 127.0.0.1 11211

    2. 添加缓存数据:只有数据不存在时进行添加的

      1. add keyName(键名) 0 30(过期时间单位为秒)3 (要添加value的长度)

      2. 123(缓存内容)

    3. 获取缓存数据:用于检索与之前添加的键相对的值

      1. get keyName(键名)

    4. 添加或更新缓存数据:set的key已经存在,该命令更新该key所对应的原来的数据。如果不存在就等于a

      1. set keyName(键名) 0 30(过期时间单位为秒)3 (要添加value的长度)

      2. 123(缓存内容)

    5. 替换缓存数据:替换存储中的键

      1. replace keyName(键名) 0 30(过期时间单位为秒)3 (要添加value的长度)

      2. 123(缓存内容)

    6. 删除缓存数据:删除 memcached 中的任何现有值

      1. delete keyName(键名)

  8. 代码逻辑:

<?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 />';

 

来源:原创 发布时间:2020-12-11 20:21:03