我刚刚开始使用redis搞乱,并且出现了以下情况:
考虑您有一个提交表单,并且您想要跟踪人们在其中写的内容(在网站中)。你也想在某个地方监视它。
我的想法是,由于redis是单线程的,因此在redis的内存中写入块时,永远不会出现问题。
这里的问题是,显示器应该只是从同一条信息中读取的天气,还是应该订阅它并从那里获取价值?
对于像我这样的初学者来说,这两种方法基本上都是相同的,并且两者都需要客户端以定时间隔从字段中读取。有什么重大差异吗?
答案 0 :(得分:0)
此处的设计选择是在PUSH或PULL之间。如果监视器定期从某个源读取数据,那么它就是PULLING数据。但如果它订阅了数据,那么数据就会被推送到它。
PUSH和PULL之间的区别在于,在PULL监视器的情况下,总是会定期轮询更多数据。而在PUSH(订阅)的情况下,数据将被发送到监视器,因此它可以在没有数据要处理的情况下休眠。
PUB / SUB是一个更好的设计,牢记以上几点。
Monitor应该有多个线程,每个线程都应该订阅一个发布数据的通道。请注意,一旦线程订阅了某个频道,它就无法发出任何命令。它只能订阅更多频道。如果监视器必须发出其他命令,那么它应该创建一个新连接。
我们也可以在讨论中寻找其他处理设计问题的方法。由于要处理的数据量可能很大,并且可能导致监视器的大量工作堆栈。可以考虑消息队列,其中可以转储要处理的所有数据。监视器可以充当消费者。队列的好处是: