1. 程式人生 > >Redis 數據變化通知服務實踐

Redis 數據變化通知服務實踐

裝包 ram ref lpush none hub .exe ssa 參數

從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參數必須有一個,否則就沒有通知。技術分享

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("[email protected]

/* */__:expired", "[email protected]__: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數據的變更通知了。

Redis 數據變化通知服務實踐