麦子学院 2017-04-05 11:45
Redis的事件机制是如何实现的?
回复:0 查看:2358
在上个星期之前一直不知道redis
居然还有事件机制,一个研发同事问了下我,居然一直都不知道,但是
BLPOP
和
RPUSH
也算是事件啊。一直只是把它当做一个高速缓存和队列来使用。
在每个redis
里可以设置
3
种事件,测试过把所有加上并不起作用,具体列表如下:
K Keyspace events, published
with __keyspace@__ prefix.
E Keyevent events, published
with __keyevent@__ 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.
设置的方式如下:
$ redis-cli config
set notify-keyspace-
events KEA
接下来是如下看这个事件机制是否生效,在没看上面那篇文章的时候,我比较简单粗暴,直接使用ngrep
来进行查看返回,
ngrep
是类似于
tcpdump
的一个网络
dump
工具,但是使用上更轻量。
sudo ngrep -d eth0 -q -Wbyline 22364505-b4f9-49c5-b5fd-1ab04a41fa78 port 6379
T 10.10.10.96:6379 -> 10.10.100.100:42026 [AP]
*4.$8.
pmessage.$20.
__keyevent@*:expired.$22.
__keyevent@0__:expired.$42.11831:22364505-b4f9-49c5-b5fd-1ab04a41fa78
当然更官方的做法是订阅事件就行了
$ redis-cli SUBSCRIBE __keyevent@0__:expired
1) "message"
2) "__keyevent@0__:expired"
3) "wtx:gtc:session:timer:5660:f0e468c3-238c-4872-854e-1f1f2cd4e525"
1) "message"
2) "__keyevent@0__:expired"
3) "5660:f0e468c3-238c-4872-854e-1f1f2cd4e525"
来源:Timo is my oasis