摘要: 第十六章 Sentinel(哨兵) 1.Sentinel(哨兵)是redis高可用的解决方案:由一个或者多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器下面的从服务器,并在被监视的主服务器下线时自动将下线主服务器的某个从服务器升级为新的主服务器。 2.当m 阅读全文
posted @ 2019-12-11 19:36 love17311706 阅读(259) 评论(0) 推荐(0)
摘要: 第九章数据库 Redis将所有数据库都保存在redisServer结构体的db数组中,db数组的每一项都是一个redisDb结构,代表一个数据库。 struct redisServer{//... redisDb * db; int dbnum //要创建的服务器数量,默认16 //... } 1. 阅读全文
posted @ 2019-12-10 15:08 love17311706 阅读(162) 评论(0) 推荐(0)
摘要: 第二章 SDS(简单动态字符串) redis只会用C字符串作为字面量,而大部分字符串表示用SDS。 struct sdshdr{ int len;//基于已使用的字节长度,即SDS的长度 int free;//记录未使用的字节数量 char buf[];//保存字符串 } SDS的优点: 1.可以以 阅读全文
posted @ 2019-11-29 21:49 love17311706 阅读(137) 评论(0) 推荐(0)
摘要: 1.1 上下文切换 即便是单核CPU也支持多线程并发,CPU通过给每个线程分配时间片(几十毫秒)来实现并发的机制。通过不停切换线程,使得多个任务并发处理。切换前会保存上个线程的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。由于上下文切换以及线程 阅读全文
posted @ 2019-11-29 16:26 love17311706 阅读(121) 评论(0) 推荐(0)
摘要: 思想 模板方法模式很容易理解。思想基本如下:先在父类规定了具体的算法步骤以及算法顺序。父类可以给出部分步骤的具体实现,也可以都只给出方法框架,没有具体实现。在子类具体实现各个步骤的方法,但是各个步骤间的顺序在父类已经确定,子类无法通常不应该更改。如果规定算法顺序的方法在父类被定义成final,则子类 阅读全文
posted @ 2019-11-28 22:35 love17311706 阅读(132) 评论(0) 推荐(0)
摘要: 思想 适配器模式的原理就和转接口差不多,比如普通的耳机无法连接iPhone,但是加根转接线就好了,普通的USB线无法给type C接口的手机充电,但是加个转接口就好啦。说到底,适配器就是当某个东西不满足当前条件时,我们通过一个转换对象,使得这个东西满足条件。书上的例子更加生动形象。 将火鸡转化为鸭子 阅读全文
posted @ 2019-11-28 19:39 love17311706 阅读(127) 评论(0) 推荐(0)
摘要: 思想 在编程中有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等如果我们创造出多个实例可能就会导致出很多问题:比如占用对多资源,在不同地方得到了不一致的结果等。单你只需要创建一个实例时就需要用到单例模式。 单例模式有两种类型 1.饿汉模式 --》在类装载的时候就完成实例化,这样 阅读全文
posted @ 2019-11-28 16:53 love17311706 阅读(95) 评论(0) 推荐(0)
摘要: 思想 工厂方法模式(factory method pattern)定义了一个创建对象的接口,由子类决定要实例化的类是哪一个,让类的实例化推迟到子类。 从类图可以看出,工厂方法模式封装了具体类型的实例化,抽象的Creator类提供了一个抽象方法用来创建产品,同时也实现了一些操作产品的方法(如anOpe 阅读全文
posted @ 2019-11-28 15:30 love17311706 阅读(178) 评论(0) 推荐(0)
摘要: 上图为装饰模式的UML图 思想 当前有个需求如下:一家奶茶店出售各式饮料,比如饮料A,饮料B,饮料可以放入不同的配料,比如加冰,加巧克力,加摩卡等等。要如何实现呢。是否可以通过继承来实现?比如实现巧克力饮料A,摩卡饮料B,加冰饮料A。。。。。。可以想见,这样会出现类爆炸的情况,如果客人需要双倍加冰双 阅读全文
posted @ 2019-11-27 13:35 love17311706 阅读(193) 评论(0) 推荐(0)
摘要: 思想观察者模式是使用的比较普遍的设计模式,其核心思想是在被观察者(Observable/Subject)中放入观察者(Observer)的实例列表,一旦被观察者有数据更新,则遍历观察者列表,调用观察者方法来更新数据。 下面举个例子:比如一家气象站有气象数据,拥有历史 当前和未来数天的天气数据,现在要 阅读全文
posted @ 2019-11-27 11:21 love17311706 阅读(138) 评论(0) 推荐(0)