空间换时间
在实际开发中时间 = 运行时间,空间 =
运行内存,所以空间和时间的转换其实也就是运行时间和内存之间的占比。在时间运行中如何将两者的关系处理好就能提升系统的运行速度。时间换空间就是执行那些复杂的程序的时候需要消耗很大的内存,我们就需要把程序拆分成不同模块执行利用时间来降低内存的消耗,反之亦然。
策略模式
策略模式(Strategy Pattern):
定义一系列的算法,把它们一个个封装起来,并且使他们可相互替换。本模式使得算法的变化可以独立于使用它的客户。(Define a family
of algorithms,encapsulate each one and make them
interchangeable.Strategy lets the algorithmvary independently from
clients that use it.)策略模式本质是:分离算法,选择实现
通俗来讲:策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用哪个算法。
redis发布订阅模式
发布订阅模式 redis的发布订阅模式 发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis
客户端可以订阅任意数量的频道。 SUBSCRIBE,用于订阅信道 PUBLISH,向信道发送消息 UNSUBSCRIBE,取消订阅
用于退订给定的一个或多个频道的信息。 语法: UNSUBSCRIBE channel
我们为什么不选择这种方式来作为api服务和server服务间的通信
原因:在分布式环境下,一旦发送者(pub)发送了消息,所有的订阅者能同时接收到消息,如果采用这样的方式
api服务作为数据的发送者pub,而server服务作为订阅者,存在多个server同时接收到请求的情况,会造成重复发送短信的情况
这是一种广播的模式,并不适用于我们的系统
于是我们使用lpush、lpop、rpush、rpop、lrange这几组命令 Lpush 命令将数据插入到队列头部 格式:
LPUSH key “数据” Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。 格式:
Rpush key “数据” Lpop 命令用于移除并返回列表的第一个元素 格式:
Lpop key Rpop 命令用于移除列表的最后一个元素,返回值为移除的元素 格式:
RPOP key
Lrange 返回列表中指定区间内的元素,可以指定一个区间以偏移量 START 和 END 指定。
其中 0 表示列表的第一个元素, 1表示列表的第二个元素,以此类推
也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
格式:LRANGE key START END
- 为什么我们不使用lpush、lpop、rpush、rpop作为我们api服务和server服务通信的模式 原因:在服务的接收方并不知道什么时候会有数据,因为需要通过死循环的方式重复去redis里获取数据,然后判断读取到的==null
这样存在一直空转的情况,会造成资源的浪费,但是对于api服务来说,通过lpush或rpush命令添加数据是没有问题的- blpop、brpop:相比于rpop和lpop多了b(b代表blocking)及阻塞的意思 Blpop:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 格式:相比于lpop我们需要指定超时时间 blpop heima 3
从左侧获取key为heima的数据 如果超过3秒则超时 brpop:移出并获取列表的最后一个元素,
如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 brpop heima 3 从右侧获取key为heima的数据
如果超过3秒则超时最终我们选择 lpush 、 rpush 、 blpop 、 brpop 这组命令作为我们api服务和server服务之间的数据交互方式