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数据的变更通知了。

  • 相关阅读:
    Apache配置虚拟主机的三种方法(基于IP、端口、域名)
    Apache httpd.conf配置详解
    php-fpm配置文件详解
    php-fpm 三种运行模式
    Nginx优化详解(超详细)
    nginx反向代理实现获取用户真实ip
    WordCount示例深度学习MapReduce过程(1)
    Hadoop学习笔记:MapReduce框架详解
    Locality Sensitive Hash 局部敏感哈希
    Hash表算法
  • 原文地址:https://www.cnblogs.com/vveiliang/p/6836842.html
Copyright © 2011-2022 走看看