欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

Redis的事件机制是如何实现的?

发布时间:2017-04-05 11:45  回复:0  查看:2357   最后回复:2017-04-05 11:45  
本文和大家分享的主要是redis 中事件机制相关内容,一起来看看吧,希望对大家 学习redis有所帮助。
  在上个星期之前一直不知道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

您还未登录,请先登录

热门帖子

最新帖子