zoukankan      html  css  js  c++  java
  • PHP Memcached + APC + 文件缓存封装

    使用方法:

    Memcached

    $cache = new Cache_MemCache();
    $cache->addServer('www1');
    $cache->addServer('www2',11211,20); // this server has double the memory, and gets double the weight
    $cache->addServer('www3',11211);
    // Store some data in the cache for 10 minutes
    $cache->store('my_key','foobar',600);
    // Get it out of the cache again
    echo($cache->fetch('my_key'));

    文件缓存

    $cache = new Cache_File();
    $key = 'getUsers:selectAll';
    // check if the data is not in the cache already
    if (!$data = $cache->fetch($key)) {
    // assuming there is a database connection
    $result = mysql_query("SELECT * FROM users");
    $data = array();
    // fetching all the data and putting it in an array
    while($row = mysql_fetch_assoc($result)) { $data[] = $row; }
    // Storing the data in the cache for 10 minutes
    $cache->store($key,$data,600);
    }

    class_cache3.php

    <?php
    abstract class Cache_Abstract {
    abstract function fetch($key);
    abstract function store($key, $data, $ttl);
    abstract function delete($key);
    }
    class Cache_APC extends Cache_Abstract {
    function fetch($key) {
    return apc_fetch($key);
    }
    function store($key, $data, $ttl) {
    return apc_store($key, $data, $ttl);
    }
    function delete($key) {
    return apc_delete($key);
    }
    }
    class Cache_MemCache extends Cache_Abstract {
    public $connection;
    function __construct() {
    $this->connection = new MemCache;
    }
    function store($key, $data, $ttl) {
    return $this->connection->set($key, $data, 0, $ttl);
    }
    function fetch($key) {
    return $this->connection->get($key);
    }
    function delete($key) {
    return $this->connection->delete($key);
    }
    function addServer($host, $port = 11211, $weight = 10) {
    $this->connection->addServer($host, $port, true, $weight);
    }
    }
    class Cache_File extends Cache_Abstract {
    function store($key, $data, $ttl) {
    $h = fopen($this->getFileName($key), 'a+');
    if (!$h)
    throw new Exception('Could not write to cache');
    flock($h, LOCK_EX);
    fseek($h, 0);
    ftruncate($h, 0);
    $data = serialize(array(time() + $ttl, $data));
    if (fwrite($h, $data) === false) {
    throw new Exception('Could not write to cache');
    }
    fclose($h);
    }
    function fetch($key) {
    $filename = $this->getFileName($key);
    if (!file_exists($filename))
    return false;
    $h = fopen($filename, 'r');
    if (!$h)
    return false;
    flock($h, LOCK_SH);
    $data = file_get_contents($filename);
    fclose($h);
    $data = @ unserialize($data);
    if (!$data) {
    unlink($filename);
    return false;
    }
    if (time() > $data[0]) {
    unlink($filename);
    return false;
    }
    return $data[1];
    }
    function delete($key) {
    $filename = $this->getFileName($key);
    if (file_exists($filename)) {
    return unlink($filename);
    }
    else {
    return false;
    }
    }
    private function getFileName($key) {
    return '/tmp/s_cache' . md5($key);
    }
    }
    ?>

  • 相关阅读:
    在Windows QT下使用ZeroMQ
    libpng warning: iCCP: known incorrect sRGB profile告警处理
    qt 程序发布
    Qtcreator 之中文目录
    windows下kafka配置入门 示例
    CentOS-7安装Mysql集群
    zookeeper 集群安装(单点与分布式成功安装)摘录
    Linux下安装Redis2.6.17
    Hadoop集群Hadoop安装配置
    lvs/dr+keepalived应用测试实施文档
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1689215.html
Copyright © 2011-2022 走看看