zoukankan      html  css  js  c++  java
  • Redis 数据变化通知服务实践

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

      可能接收到的事件举例如下:

    • 影响一个给出的键的所有命令(会告诉你哪个键被执行了一个命令,这个命令是什么);
    • 接收到了一个LPUSH操作的所有键(LPUSH命令:key v1 [v2 v3..]将指定的所有值从左到右进行压栈操作,形成一个栈,并将该栈命名为指定的key);
    • 在数据库0中失效的所有键(不一定非得是数据库0,这里这样表述其实想表达可以知道影响的哪个数据库)。

         详细信息请参考:https://redis.io/topics/notifications 

    下面是动手实验环节:

    1.准备Redis环境。找到Redis.conf配置文件,搜索Notify找到下面内容。红色标注是开启了所有通知。大家可以根据实际情况进行筛选,具体情况可以看解释,但是K、E参数必须有一个,否则就没有通知。image

    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 张三

    image

    image

        通过上面功能,可以简单实现Redis数据的变更通知了。

  • 相关阅读:
    转:.net面试题及答案(一)
    高兴!
    游标中LOCAL的意思
    九度 1333
    在进程槽中为进程分配一个空闲位置并分配一个进程号
    USACO Section 1.2 Milking Cows
    九度 1334
    USACO Section 1.3 Mixing Milk
    USACO Section 1.3 Calf Flac
    USACO Section 1.3 Prime Cryptarithm
  • 原文地址:https://www.cnblogs.com/vveiliang/p/6836842.html
Copyright © 2011-2022 走看看