{"id":202194,"date":"2025-05-10T09:26:58","date_gmt":"2025-05-10T01:26:58","guid":{"rendered":"https:\/\/server.hk\/cnblog\/202194\/"},"modified":"2025-05-10T09:26:58","modified_gmt":"2025-05-10T01:26:58","slug":"%e5%a6%82%e4%bd%95%e5%88%a9%e7%94%a8redis%e5%92%8cvb-net%e5%ae%9e%e7%8e%b0%e5%ae%9e%e6%97%b6%e6%97%a5%e5%bf%97%e6%94%b6%e9%9b%86%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/server.hk\/cnblog\/202194\/","title":{"rendered":"\u5982\u4f55\u5229\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd"},"content":{"rendered":"<p><b><\/b> <\/p>\n<h1>\u5982\u4f55\u5229\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd<\/h1>\n<p><span style=\"font-size: 15px\">\u5b66\u4e60\u77e5\u8bc6\u8981\u5584\u4e8e\u601d\u8003\uff0c\u601d\u8003\uff0c\u518d\u601d\u8003\uff01\u4eca\u5929golang\u5b66\u4e60\u7f51\u5c0f\u7f16\u5c31\u7ed9\u5927\u5bb6\u5e26\u6765<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\">\u300a\u5982\u4f55\u5229\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd\u300b<\/span>\uff0c\u4ee5\u4e0b\u5185\u5bb9\u4e3b\u8981\u5305\u542b<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\"><\/span>\u7b49\u77e5\u8bc6\u70b9\uff0c\u5982\u679c\u4f60\u6b63\u5728\u5b66\u4e60\u6216\u51c6\u5907\u5b66\u4e60<span style=\"color: #FF6600;, Helvetica, Arial, sans-serif;font-size: 14px;background-color: #FFFFFF\">\u6570\u636e\u5e93<\/span>\uff0c\u5c31\u90fd\u4e0d\u8981\u9519\u8fc7\u672c\u6587\u5566~\u8ba9\u6211\u4eec\u4e00\u8d77\u6765\u770b\u770b\u5427\uff0c\u80fd\u5e2e\u52a9\u5230\u4f60\u5c31\u66f4\u597d\u4e86\uff01<\/span><\/p>\n<p>\u5982\u4f55\u5229\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd<\/p>\n<p>\u5f15\u8a00\uff1a<br \/>\u5728\u73b0\u4ee3\u7684\u8f6f\u4ef6\u5f00\u53d1\u548c\u8fd0\u7ef4\u4e2d\uff0c\u65e5\u5fd7\u7684\u91cd\u8981\u6027\u4e0d\u8a00\u800c\u55bb\u3002\u901a\u8fc7\u65e5\u5fd7\u7684\u6536\u96c6\u548c\u5206\u6790\uff0c\u6211\u4eec\u53ef\u4ee5\u4e86\u89e3\u7cfb\u7edf\u7684\u8fd0\u884c\u60c5\u51b5\u3001\u68c0\u6d4b\u95ee\u9898\u548c\u6545\u969c\uff0c\u4ece\u800c\u5e2e\u52a9\u6211\u4eec\u53ca\u65f6\u53d1\u73b0\u548c\u89e3\u51b3\u6f5c\u5728\u7684\u98ce\u9669\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5229\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd\uff0c\u5e76\u63d0\u4f9b\u5177\u4f53\u7684\u4ee3\u7801\u793a\u4f8b\u3002<\/p>\n<ol>\n<li>Redis\u7b80\u4ecb<br \/>Redis\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u5185\u5b58\u6570\u636e\u5b58\u50a8\u7cfb\u7edf\uff0c\u901a\u5e38\u88ab\u7528\u4f5c\u7f13\u5b58\u3001\u6d88\u606f\u961f\u5217\u548c\u6570\u636e\u5b58\u50a8\u7b49\u3002\u5b83\u652f\u6301\u591a\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5982\u5b57\u7b26\u4e32\u3001\u54c8\u5e0c\u8868\u3001\u5217\u8868\u3001\u96c6\u5408\u548c\u6709\u5e8f\u96c6\u5408\u7b49\uff0c\u9002\u7528\u4e8e\u9ad8\u5e76\u53d1\u573a\u666f\u4e0b\u7684\u6570\u636e\u5b58\u50a8\u548c\u8bbf\u95ee\u3002<\/li>\n<li>VB.NET\u8fde\u63a5Redis<br \/>\u5728VB.NET\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528StackExchange.Redis\u5e93\u6765\u8fde\u63a5\u548c\u64cd\u4f5cRedis\u3002\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5b89\u88c5StackExchange.Redis\u5e93\uff0c\u5728Visual Studio\u4e2d\u521b\u5efa\u65b0\u7684VB.NET\u9879\u76ee\uff0c\u7136\u540e\u4f7f\u7528NuGet\u5b89\u88c5StackExchange.Redis\u5e93\u3002<\/li>\n<\/ol>\n<p>\u4ee5\u4e0b\u793a\u4f8b\u4ee3\u7801\u6f14\u793a\u4e86\u5982\u4f55\u5728VB.NET\u4e2d\u8fde\u63a5Redis\uff1a<\/p>\n<pre>Imports StackExchange.Redis\n\nPublic Class RedisHelper\n    Private Shared redis As ConnectionMultiplexer\n\n    Public Shared Function GetConnection() As IDatabase\n        If redis Is Nothing Then\n            redis = ConnectionMultiplexer.Connect(\"localhost\")\n        End If\n        Return redis.GetDatabase()\n    End Function\nEnd Class\n\nPublic Class Program\n    Public Shared Sub Main(args As String())\n        Dim db As IDatabase = RedisHelper.GetConnection()\n\n        ' \u5728Redis\u4e2d\u5199\u5165\u65e5\u5fd7\n        db.StringSet(\"log:1\", \"2022-01-01 00:00:00 - User 1 logged in\")\n\n        ' \u4eceRedis\u4e2d\u8bfb\u53d6\u65e5\u5fd7\n        Dim log As String = db.StringGet(\"log:1\")\n        Console.WriteLine(log)\n    End Sub\nEnd Class<\/pre>\n<ol>\n<li>\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd<br \/>\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u53ef\u4ee5\u8fde\u63a5Redis\uff0c\u5e76\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd\u3002<\/li>\n<\/ol>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5b9a\u65f6\u5668\u6765\u6a21\u62df\u65e5\u5fd7\u7684\u4ea7\u751f\u3002\u4ee5\u4e0b\u793a\u4f8b\u4ee3\u7801\u6f14\u793a\u4e86\u6bcf\u95f4\u96941\u79d2\u5411Redis\u5199\u5165\u4e00\u6761\u65e5\u5fd7\uff1a<\/p>\n<pre>Imports StackExchange.Redis\nImports System.Threading\n\nPublic Class RedisHelper\n    ' \u7701\u7565\u524d\u9762\u7684\u4ee3\u7801\n\n    Public Shared Sub WriteLog(log As String)\n        Dim db As IDatabase = GetConnection()\n\n        ' \u751f\u6210\u552f\u4e00\u7684\u65f6\u95f4\u6233\u4f5c\u4e3a\u65e5\u5fd7\u7684\u952e\n        Dim timestamp As String = DateTime.Now.ToString(\"yyyyMMddHHmmssfff\")\n  \n        ' \u5c06\u65e5\u5fd7\u5199\u5165Redis\n        db.StringSet(\"log:\" + timestamp, log)\n    End Sub\nEnd Class\n\nPublic Class Program\n    Public Shared Sub Main(args As String())\n        Dim timer As New Timer(AddressOf WriteLogCallback, Nothing, TimeSpan.Zero, TimeSpan.FromSeconds(1))\n\n        Console.WriteLine(\"Press any key to exit...\")\n        Console.ReadKey()\n\n        timer.Dispose()\n    End Sub\n\n    Public Shared Sub WriteLogCallback(state As Object)\n        RedisHelper.WriteLog(DateTime.Now.ToString() + \" - User 1 logged in\")\n    End Sub\nEnd Class<\/pre>\n<p>\u4ee5\u4e0a\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u4e86<code>System.Threading.Timer<\/code>\u7c7b\u6765\u5b9a\u65f6\u6267\u884c<code>WriteLogCallback<\/code>\u65b9\u6cd5\uff0c\u6a21\u62df\u6bcf\u96941\u79d2\u4ea7\u751f\u4e00\u6761\u65e5\u5fd7\uff0c\u65e5\u5fd7\u683c\u5f0f\u4e3a\u5f53\u524d\u65f6\u95f4\u548c\u56fa\u5b9a\u6d88\u606f\u3002\u7136\u540e\uff0c\u5c06\u65e5\u5fd7\u5199\u5165Redis\u4e2d\uff0c\u4f7f\u7528\u751f\u6210\u7684\u65f6\u95f4\u6233\u4f5c\u4e3a\u952e\u3002<\/p>\n<ol>\n<li>\u5b9e\u65f6\u65e5\u5fd7\u8bfb\u53d6\u529f\u80fd<br \/>\u9664\u4e86\u5199\u5165\u65e5\u5fd7\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u80fd\u591f\u5b9e\u65f6\u8bfb\u53d6\u5e76\u5c55\u793a\u65e5\u5fd7\u3002\u4ee5\u4e0b\u793a\u4f8b\u4ee3\u7801\u6f14\u793a\u4e86\u5982\u4f55\u4eceRedis\u4e2d\u8bfb\u53d6\u6700\u65b0\u768410\u6761\u65e5\u5fd7\uff1a<\/li>\n<\/ol>\n<pre>Imports StackExchange.Redis\n\nPublic Class RedisHelper\n    ' \u7701\u7565\u524d\u9762\u7684\u4ee3\u7801\n\n    Public Shared Function ReadLogs() As IEnumerable(Of String)\n        Dim db As IDatabase = GetConnection()\n\n        ' \u83b7\u53d6Redis\u4e2d\u6240\u6709\u7684\u65e5\u5fd7\u952e\n        Dim logKeys As IEnumerable(Of RedisKey) = db.KeyScan()\n\n        ' \u6839\u636e\u65f6\u95f4\u6233\u964d\u5e8f\u6392\u5e8f\u65e5\u5fd7\u952e\n        Dim sortedLogKeys As List(Of RedisKey) = logKeys.OrderByDescending(Function(key) key).ToList()\n\n        ' \u83b7\u53d6\u6700\u65b0\u768410\u6761\u65e5\u5fd7\n        Dim logs As List(Of String) = New List(Of String)()\n\n        For Each logKey In sortedLogKeys.Take(10)\n            Dim log As String = db.StringGet(logKey)\n            logs.Add(log)\n        Next\n\n        Return logs\n    End Function\nEnd Class\n\nPublic Class Program\n    Public Shared Sub Main(args As String())\n        While True\n            Dim logs As IEnumerable(Of String) = RedisHelper.ReadLogs()\n\n            Console.WriteLine(\"Latest 10 logs:\")\n            For Each log In logs\n                Console.WriteLine(log)\n            Next\n\n            Thread.Sleep(1000)\n        End While\n    End Sub\nEnd Class<\/pre>\n<p>\u4ee5\u4e0a\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u9996\u5148\u4f7f\u7528<code>db.KeyScan()<\/code>\u65b9\u6cd5\u83b7\u53d6Redis\u4e2d\u7684\u6240\u6709\u65e5\u5fd7\u952e\u3002\u7136\u540e\uff0c\u6211\u4eec\u4f7f\u7528LINQ\u5bf9\u952e\u8fdb\u884c\u964d\u5e8f\u6392\u5e8f\uff0c\u5e76\u4f7f\u7528<code>Take(10)<\/code>\u65b9\u6cd5\u83b7\u53d6\u6700\u65b0\u768410\u6761\u65e5\u5fd7\u3002\u6700\u540e\uff0c\u6211\u4eec\u904d\u5386\u8fd9\u4e9b\u952e\uff0c\u901a\u8fc7<code>db.StringGet()<\/code>\u65b9\u6cd5\u9010\u4e2a\u83b7\u53d6\u65e5\u5fd7\u5185\u5bb9\uff0c\u5c06\u5176\u6dfb\u52a0\u5230List\u4e2d\uff0c\u5e76\u8fd4\u56de\u3002<\/p>\n<p>\u603b\u7ed3\uff1a<br \/>\u901a\u8fc7\u672c\u6587\u7684\u4ecb\u7ecd\uff0c\u6211\u4eec\u5b66\u4e60\u4e86\u5982\u4f55\u5229\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd\u3002\u6211\u4eec\u9996\u5148\u8fde\u63a5Redis\u5e76\u8fdb\u884c\u57fa\u672c\u7684\u8bfb\u5199\u64cd\u4f5c\uff0c\u7136\u540e\u901a\u8fc7\u5b9a\u65f6\u5668\u6a21\u62df\u4ea7\u751f\u65e5\u5fd7\uff0c\u5e76\u5c06\u5176\u5199\u5165Redis\u3002\u6700\u540e\uff0c\u6211\u4eec\u5b9e\u73b0\u4e86\u5b9e\u65f6\u8bfb\u53d6\u6700\u65b0\u7684\u65e5\u5fd7\u5e76\u5c55\u793a\u7684\u529f\u80fd\u3002\u5e0c\u671b\u672c\u6587\u80fd\u5bf9\u8bfb\u8005\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\u5e94\u7528Redis\u548cVB.NET\u5b9e\u73b0\u5b9e\u65f6\u65e5\u5fd7\u6536\u96c6\u529f\u80fd\u63d0\u4f9b\u53c2\u8003\u548c\u5e2e\u52a9\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u672c\u6587\u4e2d\u7684\u4ee3\u7801\u793a\u4f8b\u4ec5\u4e3a\u6f14\u793a\u548c\u6559\u5b66\u76ee\u7684\uff0c\u5e76\u672a\u8fdb\u884c\u9519\u8bef\u5904\u7406\u548c\u6027\u80fd\u4f18\u5316\uff0c\u8bf7\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u9002\u5f53\u7684\u4f18\u5316\u548c\u6539\u8fdb\u3002<\/p>\n<dl>\n<dt>\n <\/dt>\n<dd>\n   \u7a81\u7834\u56fd\u4ea7\u673a\u5668\u4eba\u5185\u5377\u7684\u56f0\u5c40\uff0c\u94c2\u7535\u673a\u5668\u4eba\u6bcf\u53f0\u80fd\u53563\u4e07\u7f8e\u91d1\uff1f\u2014\u2014\u94c2\u7535\u673a\u5668\u4eba\u643a\u521b\u65b0\u6027\u673a\u5668\u4eba\u4eae\u76f823\u5c4a\u5de5\u535a\u4f1a\n <\/dd>\n<\/dl>\n<dl>\n<dt>\n <\/dt>\n<dd>\n   \u5982\u4f55\u4f7f\u7528Redis\u548cShell\u811a\u672c\u5f00\u53d1\u5206\u5e03\u5f0f\u5b9a\u65f6\u4efb\u52a1\u529f\u80fd\n <\/dd>\n<\/dl>\n","protected":false},"excerpt":{"rendered":"<p>\u5982\u4f55\u5229\u7528Redis\u548cVB.NET&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-202194","post","type-post","status-publish","format-standard","hentry","category-database"],"_links":{"self":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/202194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/comments?post=202194"}],"version-history":[{"count":0,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/202194\/revisions"}],"wp:attachment":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/media?parent=202194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/categories?post=202194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/tags?post=202194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}