memcache

memcache简单描述

memcache不适合场景:
(1)缓存对象的大小大于1MB 
(2)key的长度大于250字符

过期时间最长可以达到30天

memcached编译安装

编译安装libevent
wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
tar xzvf libevent-2.0.22-stable.tar.gz
./configure --prefix=/opt/local/libevent
make && make install
编译安装memcache
tar zxvf memcached-1.4.30.tar.gz
./configure --prefix=/opt/local/memcache --with-libevent=/opt/local/libevent
make && make install
编译安装memcached扩展
tar xzvf memcached-2.2.0.tgz
/opt/local/php/bin/phpize
./configure --enable-memcached --with-php-config=/opt/local/php/bin/php-config --with-libmemcached-dir=/opt/local/libmemcached --disable-memcached-sasl
make && make install
php使用类
<?php
/**
 * Pengcz_Cache
 *
 * @version $Id$
 * @copyright
 */

/**
 * 缓存类
 *
 */
class Pengcz_Cache {
    var $_memcached;
    var $_app_key;

    public function Seedit_Cache($app_key) {
        $this->_memcached = new Memcached();
        $this->_memcached->addServer(MEMCACHE_HOST, MEMCACHE_PORT);
        $this->_app_key = strtolower($app_key);
    }
    public function set($key,$value,$expiration=0) {
        $key   = $this->_app_key . "_" . substr(md5($key),8,16);
        $this->_memcached->set($key,$value,$expiration);
    }
    public function get($key) {
        $key   = $this->_app_key . "_" . substr(md5($key),8,16);
        $data = $this->_memcached->get($key);
        return $data;
    }
    public function delete($key) {
        $key   = $this->_app_key . "_" . substr(md5($key),8,16);
        $data = $this->_memcached->delete($key);
        return $data;
    }
    /*public function flush() {
        return $this->_memcached->flush();
    }*/
}

memcached FAQ

memcache安全:

memcache通过客户端直接连接,没有验证过程
memcache都是以root权限运行的

方法:
(1)内网访问,如果有两块网卡,web服务器通过内网网卡访问memcache,启动memcache的时候就监听内网的ip和端口
memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
(2)设置防火墙,只开放固定的ip地址(只开放192.168.0.2)
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT

FAQ

1.为什么会有Memcache和memcached两种名称
Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名
php有两个扩展

2.如何遍历memcahe的key值
php 使用getExtendedStats方法

3.使用$memcache->addServer 而不是 $memcache->connect 去连接 Memcached 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的

4.实现memcache的主从工具
repcached

5.监控memcache的工具
[memadmin](http://www.junopen.com/memadmin/)

6.MemcacheDB=Memcached+BerkeleyDB组成的轻量的持久数据库

7.memcache分布式算法
分布式算法采用基于server节点数的取余法(增加和减少服务器会对之前的缓存有影响)
consistent hash算法,直接对服务器的节点进行hash,然后散布在0~2^32的圆周上,同样对于数据的key也采用同样的hash进行散布

8.Memcached没有持久性,数据采用LRU算法

libmemcached

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值