觀察者模式
這種創(chuàng)建一個(gè)消息中心拔鹰, 所有消息發(fā)布者發(fā)布消息到中心凿掂, 中心把消息通知到各訂閱者的設(shè)計(jì)模式在GUI程序的事件模型中使用比較多是牢。
而放在WEB應(yīng)用中灯荧,主要用來(lái)解決流程計(jì)時(shí)礁击, 以及代替輕量級(jí)的實(shí)時(shí)隊(duì)列的功能(如計(jì)數(shù)的邏輯的異步)。
Channel
頻道, 每一個(gè)訂閱者可根據(jù)頻道選擇自己喜歡的信息哆窿,一個(gè)訂閱者可能對(duì)多個(gè)頻道有興趣链烈。 但一個(gè)消息發(fā)布者不宜把消息發(fā)布到多個(gè)頻道中, 至于說(shuō)為什么不宜發(fā)布到多個(gè)頻道中挚躯, 我這暫時(shí)很難拿出一個(gè)合理的數(shù)學(xué)證明强衡。 不過(guò)有個(gè)很簡(jiǎn)單的邏輯, 如果一個(gè)訂閱者訂閱了多個(gè)頻道码荔, 一個(gè)消息又發(fā)到了多個(gè)頻道漩勤, 那么一個(gè)訂閱者就可會(huì)收到重復(fù)的消息,即使消息中心應(yīng)該處理這個(gè)重復(fù)的消息缩搅, 但明顯處理邏輯增加了越败,遍歷訂閱者的次數(shù)也增加了。 具體分析依賴(lài)于實(shí)現(xiàn)硼瓣。
=== Keyspace Notifications
其官網(wǎng)這樣描述
Keyspace notifications allows clients to subscribe to Pub/Sub channels in order to receive events affecting the Redis data set in some way.
Examples of the events that is possible to receive are the following:
All the commands affecting a given key.
All the keys receiving an LPUSH operation.
All the keys expiring in the database 0.
Events are delivered using the normal Pub/Sub layer of Redis, so clients implementing Pub/Sub are able to use this feature without modifications.
Redis 是一個(gè)鍵值對(duì)的系統(tǒng)究飞, 其數(shù)據(jù)變化會(huì)產(chǎn)生事件, 具體內(nèi)容可參考 http://redis.io/topics/notifications
這里我想用來(lái)做流程計(jì)時(shí)堂鲤, 所以關(guān)心的是 EXPIRE 事件亿傅。 Keyspace notifications
消耗CPU,默認(rèn)是關(guān)閉的瘟栖,所以需要在配置文件中聲明葵擎, 下面是可控粒度。
K Keyspace events, published with keyspace@<db> prefix.
E Keyevent events, published with keyevent@<db> prefix.
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
x Expired events (events generated every time a key expires)
e Evicted events (events generated when a key is evicted for maxmemory)
A Alias for g$lshzxe, so that the "AKE" string means all the events.
Spring Data Redis
其配置可參考 http://docs.spring.io/spring-data/redis/docs/1.7.1.RELEASE/reference/html/#redis:pubsub:subscribe 沒(méi)什么可說(shuō)的半哟, 但需要注意的是酬滤, 需要使用org.springframework.data.redis.listener.PatternTopic
來(lái)使得訂閱者訂閱多個(gè)頻道。
其它
這里實(shí)現(xiàn)的觀察者模式比較簡(jiǎn)單镜沽, 但事實(shí)上,我們也暫時(shí)不用去考慮觀察者的沖突贱田,時(shí)效缅茉,處理時(shí)間與堆積,處理優(yōu)先的問(wèn)題男摧。