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數據的變更通知了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM