设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
当需要保证对象只有一个实例的时候,单例模式是非常有用的。他把创建对象的控制权交给一个单一的点上,任何时候应用程序都只会存在且仅存在一个实例。单例类不应该能在类的外部进行实例化。
一个单例类应该具备以下几个因素:
简单实例:
class Single { public static $_instance; private function __construct() { } private function __clone() { } public static function getInstance() { if (!self::$_instance) { self::$_instance = new self(); } return self::$_instance; } public function sayHi() { echo "Hi \n"; } } $single = Single::getInstance(); $single->sayHi();
工厂模式解决的是如何不通过new建立实例对象的方法
工厂模式是一种类,它具有为你创建对象的某些方法,你可以使用工厂类创建对象而不使用new。这样,如果你想要更改所创建的对象类型只需要更改工厂即可,使用该工厂的所有代码会自动更改。
工厂模式往往配合接口一起使用,这样应用程序就不必要知道这些被实例化的类的具体细节,只要知道工厂返回的是支持某个接口的类就可以方便的使用了。
简单举例:
/** * 抽象出一个人的接口 * Interface Person */ interface Person { public function showInfo(); } /** * 一个继承于抽象人接口的学生类 * Class Student */ class Student implements Person { public function showInfo() { echo "这是一个学生 \n"; } } /** * 一个继承于抽象人接口的老师类 * Class Teacher */ class Teacher implements Person { public function showInfo() { echo "这是一个老师 \n"; } } /** * 人类工厂 * Class PersonFactory */ class PersonFactory { public static function factory($person_type) { // 将传入的类型首字母大写 $class_name = ucfirst($person_type); if(class_exists($class_name)){ return new $class_name; }else{ throw new Exception("类:$class_name 不存在",1); } } } // 需要一个学生 $student = PersonFactory::factory('student'); echo $student->showInfo(); // 需要一个老师的时候 $teacher = PersonFactory::factory('teacher'); echo $teacher->showInfo();
String
字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的
字符串类型实际上可以是字符串、数字、二进制(图片、音频),单最大不能超过512M
使用场景:
Hash
在redis中哈希类型是指键本身又是一种键值对结构,如 value = {{field1,value1}...{fieldn,valuen}}
使用场景:
list
列表类型是用来存储多个有序的字符串,列表的每个字符串成为一个元素,一个列表最多可以存储2的32次方减1个元素。在redis中,可以对列表插入(push)和弹出(pop),还可以获取指定范围的元素列表。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色。
使用场景:
使用技巧列表
lpush+lpop=Stack(栈) lpush+rpop=Queue(队列) lpush+ltrim=Capped Collection(有限集合) lpush+brpop=Message Queue(消息队列)
因为CPU并不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那么久顺理成章的采用了单线程的方案。
当然单个Redis进程是没办法使用多核的 ,但是它来就不是非常计算密集型的服务。如果单核性能不够用,可以多开几个进程。
参考文章:https://segmentfault.com/a/11...
参考文章:https://www.cnblogs.com/xifen...
参考文章:https://segmentfault.com/a/11...
什么是队列?什么是栈?
队列和栈的规则
队列和栈的遍历数据速度
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!