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參數必須有一個,否則就沒有通知。
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]
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 數據變化通知服務實踐