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

  • 相关阅读:
    Mac电脑,Andorid studio 配置 Flutter
    java.lang.RuntimeException: com.intellij.ide.plugins.PluginManager
    #Java Web累积#关于MUI的上滑和下拉加载
    #iOS问题记录#WKWebView 闪退异常
    #iOS问题记录#UITableView加载后直接滑动倒最底部
    #Java Web累积#JS动态加载所有同name的select的option
    #iOS问题记录# UIWebView滑动到底部
    #Java Web累积#表格<table>中隐藏列做备用数据
    #iOS问题记录# UITextview富文本链接,禁止长按事件
    Day 1:自定义tableview cell xib版
  • 原文地址:https://www.cnblogs.com/vveiliang/p/6836842.html
Copyright © 2020-2023  润新知