Memcache

本文介绍了Memcached作为高性能分布式缓存系统的原理及应用场景,并详细解释了如何在Linux环境下安装配置Memcached及其PHP扩展,同时提供了基本命令用法示例。

Memcache

Memcache是什么

高性能分布式的key->value内存对象缓存系统 动态web应用 缓解数据库的压力 在内存中缓存数据和对象读数据库的次数

在内存中 它维护一个巨大的hash表 可以存各种格式的数据 图像 视频 文件 数据库检索结果 从内存中读取速度很快

Memcache 和 Memcached区别

memcache 是项目的名称 Memcached 服务端主程序的文件名

memcached

memcache 使用场景

  • 频繁访问的数据 比如头条新闻
  • 大量的hot 数据
  • 页面缓存
  • 频繁的查询条件 和结果
  • 临时的数据

安装 memcache

yum -y install libevent libevent-devel   

准备 安装包

libmemcached-1.0.18.tar.gz memcached-1.4.33.tar.gz php-memcached-php7.zip

tar -zxvf  memcached-1.4.33.tar.gz
cd  memcached-1.4.33
./configure --prefix=/usr/local/memcached/ --enable-64bit  #支持64位  
make   #时钟错误    date -s 20190705 +11:50
make install 

cd 
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached/  --with-memcached-dir=/usr/local/memcached 
make  
make install

cd php-memcached-php7
phpize  #安装PHP扩展靠这个来解压  /usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached/ --disable-memcached-sasl 

make  

make install 

cd /usr/local/memcached/bin
./memcached -u www -d
telnet 127.0.0.1 11211
也可以把它加入到开机启动
cd /etc/rc.d 
vim rc.local
./usr/local/memcached/bin/memcached -u www -d
然后重启虚拟机


vim /etc/php.ini 
extension_dir =/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
extension memecache.so;

重启 php-fpm
开启memcache  ./memcached -u www -d
telnet 127.0.0.1 11211

memcached 特点

  • 单个key 最大的长度 是 memcached.h 设置 KEY_MAX_LENGTH

  • 早前版本通常单个key 是 1M 新版本 2M

  • 数据保存在 内存中 断电数据消失

memcache set 命令 将 value的值 存放到指定的key中

set name 0 10 8 

set key flags exptime bytes   如果存在 更新原有的  

key name  键的名字  
falgs 0 键值额外的东西 
exptime 10 过期时间  秒为单位   
bytes 8  长度  
STORED 保存成功后输出
NOT_STORED 保存失败 退出  
ERROR 出错 比如语法错误  
----------------------------------------------
get key  获取在key 中的value值    如果key不存在  返回  null 
可以 get key1 key2 key3   

----------------------------------------------
add key flags exptime bytes  将value的值添加到制定的 key 中  如果存在  则不更新  
key name  键的名字  
falgs 0 键值额外的东西 
exptime 过期时间  秒为单位   
bytes  长度  
----------------------------------------------
delete name 删除已经存在的key 

-----------------------------
replace   key flags exptime bytes # 替换的是 key中的value值  而不是 key 
set name 0 100 5
hello   

replace name 0 100 6
hellos

get name
获取的是 hellos  

----------------------------------------

set name 0 100 6
asdfgh
STORED
get name 
VALUE name 0 6
asdfgh
END
append name 0 200 5key中 追加  value的值  追加到尾部   
hello
STORED
get name
VALUE name 0 11
asdfghhello
END
--------------------------------
incr keyname 数字  自增多少    decr keyname  自减多少     

set numer 0 100 2
10 

get number  

10 

incr number 5 

get number 15  

decr number 5 


get number 

10 

session共享 主要解决负责均衡 session 不一样 存放到 memcached 中

vim /etc/php.ini

session.save_handler = memcached;

session.save_path = “127.0.0.1:11211,10.0.164.161:11211”;存放地址

$mem = new Memcached();
$mem->addServer('127.0.0.1','11211');
$mem->set('test',['l'=>'longlong','le'=>'乐天']);
$mem->get('test')




memcached在php程序中的实现
<?php
    $list = memcached_get('list');
    if (!$list) {
        echo 'this is from mysql';
        $list = article_list();
        memcached_set('list',$list,time()+3600);
    } else {
        echo 'this is from memcached';
    }
    echo '<ul>';
        foreach ($list as $v) {
            echo '<li><a href="#">' . $v['title'] . '</a></li>';
        }
    echo '</ul>';
    function article_list()
    {
        $link = mysqli_connect('127.0.0.1','root','123456');
        mysqli_select_db($link,'chen');
        mysqli_set_charset($link,'utf8');
        $res = mysqli_query($link,'select * from article');
        $arr = [];
        while ($row = mysqli_fetch_assoc($res)) {
            $arr[] = $row;
        }
        return $arr;
    }
    function memcached_set($key,$value,$expire = null)
    {
        $mem = new Memcached();
        $mem->addServer('127.0.0.1','11211');
        if ($expire == null) {
            return $mem->set($key,$value);
        } else {
            return $mem->set($key,$value,$expire);
        } 
    }
    function memcached_get($key)
    {
        $mem = new Memcached();
        $mem->addServer('127.0.0.1','11211');
        return $mem->get($key);
    }
?>

Memcached::addSevers()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值