设计模式详解 PHP版
  • 设计模式简介&原则
  • 常见设计模式
    • 工厂模式(Factory)
      • 简单工厂模式(Simple Factory)
      • 工厂方法模式(Factory Method)
      • 抽象工厂模式(Abstract Factory)
      • 三种工厂模式对比
    • 单例模式(Singleton)
      • 场景*memcache操作类
    • 注册树模式
    • 适配器模式(Adapter)
    • 策略模式(Strategy)
    • 数据对象映射模式
    • 观察者模式(observer)
    • 原型模式(Prototype)
    • 装饰器模式(Decorator)
    • 迭代器模式 (Iteration)
    • 桥接模式(Bridge)
    • 建造者模式(Builder)
    • 命令行模式(Command)
    • 组合模式(Composite)
    • 外观模式(Facade)
    • 享元模式(Flyweight)
    • 解释器模式(Interpreter)
    • 中介者模式(Mediator)
    • 备忘录模式(Memento)
    • 代理模式(Proxy)
    • 责任链模式(Responsibility Chain)
    • 状态模式(State)
    • 模板方法模式(Template Method)
    • 访问者模式(Visitor)
  • 资料
Powered by GitBook
On this page

Was this helpful?

  1. 常见设计模式
  2. 单例模式(Singleton)

场景*memcache操作类

memcache操作类

在实际的PHP项目中,应用单例模式可以应用到网络连接的。比如Mysql、Memcache、Redis连接等等,一般的需求通常Redis,Memcache都只有一台服务器,所以用单例模式将连接封装到getInstance(),这样做的好处是不用每次都去调用connect()方法,减少网络连接开销。PHP大部分情况是单线程同步执行的,所以整个程序只用实例化一个Redis对象即可。

Memcache.php

<?php
class MemcacheClass
{
    private static $instance = null;

    private $handler;

    private function __construct($config)
    {
        if(!isset($config['host']))
        {
            $config['host'] = '127.0.0.1';
        }

        if(!isset($config['port']))
        {
            $config['port'] = 11211;
        }

        if(!isset($config['timeout']))
        {
            $config['timeout'] = 1;
        }

        $this->handler = new Memcache();
        $this->handler->connect($config['host'], $config['port'], $config['timeout']);
    }

    public static function init($config = array())
    {
        if (!self::$instance) {
            self::$instance = new self($config);
        }
        return self::$instance;
    }

    /**
     * get cache
     * @access public
     * @param string $name
     * @return mixed
     */
    public function get($name)
    {
        return $this->handler->get($name);
    }

    /**
     * set cache
     * @access public
     * @param string $name 
     * @param mixed $value
     * @param integer $expire
     * @return boolean
     */
    public function set($name, $value, $expire = 0)
    {
        $this->handler->set($name, $value, MEMCACHE_COMPRESSED, $expire);
    }

    /**
     * delete cache
     * @access public
     * @param string $name
     * @return boolean
     */
    public function rm($name, $ttl = false)
    {
        return $ttl === false ?
        $this->handler->delete($name) :
        $this->handler->delete($name, $ttl);
    }

    /**
     * flush cache
     * @access public
     * @return boolean
     */
    public function clear()
    {
        return $this->handler->flush();
    }

    function __destruct()
    {
        $this->handler->close();
    }
}

test.php

include 'Memcache.class.php';

$cache = MemcacheClass::init();
Previous单例模式(Singleton)Next注册树模式

Last updated 6 years ago

Was this helpful?