超酷小 发表于 2017-12-21 12:10:56

Redis 数据变化通知服务实践

  从Redis 2.8.0版本起,Redis加入了“Keyspace notifications”(即“键空间通知”)的功能。键空间通知,允许Redis客户端从“发布/订阅”通道中建立订阅关系,以便客户端能够在Redis中的数据因某种方式受到影响时收到相应事件。
  可能接收到的事件举例如下:

[*]影响一个给出的键的所有命令(会告诉你哪个键被执行了一个命令,这个命令是什么);
[*]接收到了一个LPUSH操作的所有键(LPUSH命令:key v1 将指定的所有值从左到右进行压栈操作,形成一个栈,并将该栈命名为指定的key);
[*]在数据库0中失效的所有键(不一定非得是数据库0,这里这样表述其实想表达可以知道影响的哪个数据库)。
  详细信息请参考:https://redis.io/topics/notifications
  下面是动手实验环节:
  1.准备Redis环境。找到Redis.conf配置文件,搜索Notify找到下面内容。红色标注是开启了所有通知。大家可以根据实际情况进行筛选,具体情况可以看解释,但是K、E参数必须有一个,否则就没有通知。
  2.通过命令行启动Redis Server:Redis-server.exe redis.conf
  3.编写一个C#程序,监控事件变化,主要代码如下,采用了ServiceStack组件,此组件可从github获取:https://github.com/ServiceStack/ServiceStack.Redis 。编译并运行。
  class Program
  {
  static void Main(string[] args)
  {
  ServiceStack.Redis.RedisClient client = new ServiceStack.Redis.RedisClient("127.0.0.1", 6379);
  ServiceStack.Redis.RedisSubscription sub = new ServiceStack.Redis.RedisSubscription(client);
  sub.OnMessage += ShowMessage;
  //订阅过期时间、set命令
  sub.SubscribeToChannels("__keyevent@0__:expired", "__keyevent@0__:set");
  Console.ReadLine();
  }
  static void ShowMessage(string a, string b)
  {
  Console.WriteLine("{0},{1}", a, b);
  }
  }
  4.打开redis安装包中的redis client,自动连接127.0.01:6379端口上的Redis Server,输入下面指令后,可以看到C#程序接收到了时间通知。
  Set Name 张三


  通过上面功能,可以简单实现Redis数据的变更通知了。
页: [1]
查看完整版本: Redis 数据变化通知服务实践