• 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);
    }
    }
    ?>

  • 相关阅读:
    UOJ 347(洛谷4220) 【WC2018】通道——随机化
    bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
    bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开
    bzoj 4006 [JLOI2015]管道连接——斯坦纳树
    洛谷4294 [WC2008]游览计划——斯坦纳树
    CF 757 E Bash Plays with Functions —— 积性函数与质因数分解
    洛谷 P2444 [ POI 2000 ] 病毒 —— AC自动机+dfs
    洛谷 P1072 Hankson 的趣味题 —— 质因数分解
    洛谷 P1071 潜伏者 —— 模拟
    洛谷 P1541 乌龟棋 —— DP
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1689215.html
Copyright © 2020-2023  润新知