很多项目中都会用到memcached、redis作缓存,一般我们获取数据都会优先从缓存获取数据,如果缓存中没有,再去读取数据库或者从其他方式获得相应的数据,处理之后返回同时种入缓存,那么很多时候代码便要重复这样一个判断逻辑,于是在这里,考虑了这么一种方式,简单地封装了一个缓存控制类,在从缓存读取数据的时候传入一个回调函数,如果缓存中不存在就执行回调函数,返回回调函数的结果,并自动将结果存入缓存。
首先定义缓存控制类的接口
interface Interface_Cache {
/**
* 获取当前缓存控制类实例,单例模式
*/
public static function getInstance();
/**
* 获取当前类中原生mc、redis对象
*/
public function query();
/**
* 读取配置设置缓存
* @param array $cache_config 缓存配置
* @param array $cache_params 缓存参数,构造key
* @param callable $func 回调函数,返回应当设置的值,返回值为null时,不设置缓存数据
*/
public function set(array $cache_config, array $cache_params, callable $func);
/**
* 优先从缓存读取数据,如果缓存中不存在,执行回调函数获得数据返回,同时将数据写入缓存
* @param array $cache_config 缓存配置
* @param array $cache_params 缓存参数,构造key
* @param callable $func 回调函数,返回查询的数据,返回值为null时,不写入缓存
*/
public function get(array $cache_config, array $cache_params, callable $func);
}
然后进行不同的实现
memcached
class Base_Mc implements Interfac