2015-04-07 70 views
1

我想將數據更改記錄到sql更新觸發器中的redis數據庫,通過c#dll調用。 但我不想讓任何延遲觸發器。就好像日誌記錄redis操作是異步的。SQL Server在線程中觸發並運行CLR方法

有沒有辦法做到這一點?

+1

使用SQL Server提供的用於解耦的工具(如服務代理),而不是嘗試執行線程工作。 –

回答

1

試試這個,它使用PubSub的,但這個概念幾乎是相同的:

http://blogs.msdn.com/b/frcogno/archive/2014/11/14/microsoft-sql-server-meets-redis-an-elegant-logging-platform-at-your-doorstep.aspx

亮點的情況下,鏈接雲:

[SqlProcedure] 
public static void Publish(SqlString redisServerAddress, SqlInt32 redisServerPort, SqlString channel, SqlString message) 
{ 
    using (RedisConnection rc = GetRedisConnection(redisServerAddress.Value, redisServerPort.Value)) 
    { 
     rc.Publish(channel.Value, message.Value); 
    } 
} 

CREATE PROCEDURE Redis.Publish(@RedisServerAddress NVARCHAR(1024), @RedisServerPort INT, @Channel NVARCHAR(1024), @Message NVARCHAR(MAX)) 
AS EXTERNAL NAME [MindFlavor.RESP.SQLCLR]. [MindFlavor.RESP.SQLCLR.Redis].Publish; 
GO 

EXEC [MindFlavor].[Redis].[Publish] N'ubuntu-spare.pelucchi.local', 6379, N'msbackup:sql', @txt; 

要留意的是,在一些環境(例如Azure),則需要將您的clr標記爲safe,如果您的dll或依賴關係破壞了實踐,則會引發一些問題。