{"id":628,"date":"2024-09-16T13:13:04","date_gmt":"2024-09-16T05:13:04","guid":{"rendered":"http:\/\/120.55.184.7\/?p=628"},"modified":"2025-05-03T05:41:59","modified_gmt":"2025-05-02T21:41:59","slug":"go-redis","status":"publish","type":"post","link":"https:\/\/beijian99.top\/?p=628","title":{"rendered":"go-redis"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"260\" height=\"180\" src=\"https:\/\/beijian99.top\/wp-content\/uploads\/2024\/09\/image.png\" alt=\"\" class=\"wp-image-983\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e00\u3001\u5b89\u88c5\u548c\u4f7f\u7528<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b89\u88c5<br> <a href=\"https:\/\/github.com\/go-redis\/redis\"><code>go-redis\/v8<\/code><\/a>\uff0c\u5176 API \u7b80\u6d01\u4e14\u652f\u6301 Redis 6+ \u7279\u6027\u3002\u5b89\u88c5\u547d\u4ee4\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  go get github.com\/go-redis\/redis\/v8\n<\/pre><\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8fde\u63a5 Redis \u670d\u52a1\u5668<\/strong><br>\u521d\u59cb\u5316\u5ba2\u6237\u7aef\u5e76\u6d4b\u8bd5\u8fde\u63a5\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n   import (\n       &quot;context&quot;\n       &quot;github.com\/go-redis\/redis\/v8&quot;\n   )\n\n   func main() {\n       ctx := context.Background()\n       rdb := redis.NewClient(&amp;redis.Options{\n           Addr:     &quot;localhost:6379&quot;, \/\/ Redis \u5730\u5740\n           Password: &quot;&quot;,               \/\/ \u5bc6\u7801\n           DB:       0,               \/\/ \u6570\u636e\u5e93\u7f16\u53f7\n       })\n\n       \/\/ \u6d4b\u8bd5\u8fde\u63a5\n       if _, err := rdb.Ping(ctx).Result(); err != nil {\n           panic(&quot;\u8fde\u63a5\u5931\u8d25: &quot; + err.Error())\n       }\n       defer rdb.Close() \/\/ \u7a0b\u5e8f\u9000\u51fa\u65f6\u5173\u95ed\u8fde\u63a5\n   }\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e8c\u3001\u57fa\u7840\u6570\u636e\u7c7b\u578b\u64cd\u4f5c<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>\u5b57\u7b26\u4e32\uff08String\uff09<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8bbe\u7f6e\/\u83b7\u53d6\u503c<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  \/\/ \u8bbe\u7f6e\u503c\uff080 \u8868\u793a\u6c38\u4e0d\u8fc7\u671f\uff09\n  err := rdb.Set(ctx, &quot;name&quot;, &quot;John Doe&quot;, 0).Err()\n  \/\/ \u83b7\u53d6\u503c\n  val, err := rdb.Get(ctx, &quot;name&quot;).Result()\n<\/pre><\/div>\n\n\n<p>\u652f\u6301\u6279\u91cf\u64cd\u4f5c <code>MSet<\/code> \u548c <code>MGet<\/code>\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u5b50\u64cd\u4f5c<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  \/\/ \u81ea\u589e\/\u81ea\u51cf\n  rdb.Incr(ctx, &quot;counter&quot;)    \/\/ +1\n  rdb.IncrBy(ctx, &quot;counter&quot;, 5) \/\/ +5\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">2. <strong>\u54c8\u5e0c\uff08Hash\uff09<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8bbe\u7f6e\/\u83b7\u53d6\u5b57\u6bb5<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  \/\/ \u5355\u4e2a\u5b57\u6bb5\n  rdb.HSet(ctx, &quot;user:1&quot;, &quot;name&quot;, &quot;Alice&quot;)\n  name := rdb.HGet(ctx, &quot;user:1&quot;, &quot;name&quot;).Val()\n\n  \/\/ \u6279\u91cf\u64cd\u4f5c\n  userData := map&#x5B;string]interface{}{&quot;age&quot;: 30, &quot;email&quot;: &quot;alice@example.com&quot;}\n  rdb.HMSet(ctx, &quot;user:1&quot;, userData)\n  allFields := rdb.HGetAll(ctx, &quot;user:1&quot;).Val()\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">3. <strong>\u5217\u8868\uff08List\uff09<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u63d2\u5165\/\u83b7\u53d6\u5143\u7d20<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  rdb.LPush(ctx, &quot;tasks&quot;, &quot;task1&quot;)          \/\/ \u5934\u90e8\u63d2\u5165\n  rdb.RPush(ctx, &quot;tasks&quot;, &quot;task2&quot;)          \/\/ \u5c3e\u90e8\u63d2\u5165\n  tasks := rdb.LRange(ctx, &quot;tasks&quot;, 0, -1).Val() \/\/ \u83b7\u53d6\u5168\u90e8\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">4. <strong>\u96c6\u5408\uff08Set\uff09<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6210\u5458\u64cd\u4f5c<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n  rdb.SAdd(ctx, &quot;tags&quot;, &quot;go&quot;, &quot;redis&quot;)       \/\/ \u6dfb\u52a0\u6210\u5458\n  members := rdb.SMembers(ctx, &quot;tags&quot;).Val() \/\/ \u83b7\u53d6\u6240\u6709\u6210\u5458\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">5. <strong>\u6709\u5e8f\u96c6\u5408\uff08Sorted Set\uff09<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5206\u6570\u4e0e\u6392\u5e8f<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  rdb.ZAdd(ctx, &quot;rank&quot;, &amp;redis.Z{Score: 100, Member: &quot;user1&quot;})\n  top3 := rdb.ZRangeWithScores(ctx, &quot;rank&quot;, 0, 2).Val()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e09\u3001\u9ad8\u7ea7\u529f\u80fd<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>\u7ba1\u9053\uff08Pipeline\uff09<\/strong><\/h4>\n\n\n\n<p>\u6279\u91cf\u53d1\u9001\u547d\u4ee4\u4ee5\u51cf\u5c11\u7f51\u7edc\u5f80\u8fd4\u65f6\u95f4\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  pipe := rdb.Pipeline()\n  pipe.Set(ctx, &quot;key1&quot;, &quot;val1&quot;, 0)\n  pipe.Get(ctx, &quot;key2&quot;)\n  results, _ := pipe.Exec(ctx)\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">2. <strong>\u4e8b\u52a1\uff08Transaction\uff09<\/strong><\/h4>\n\n\n\n<p>\u4f7f\u7528 <code>TxPipeline<\/code> \u4fdd\u8bc1\u539f\u5b50\u6027\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  tx := rdb.TxPipeline()\n  tx.Set(ctx, &quot;balance&quot;, 100, 0)\n  tx.IncrBy(ctx, &quot;balance&quot;, 50)\n  _, err := tx.Exec(ctx) \/\/ \u5168\u90e8\u6267\u884c\u6216\u56de\u6eda\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">3. <strong>\u53d1\u5e03\u8ba2\u9605\uff08Pub\/Sub\uff09<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n  pubsub := rdb.Subscribe(ctx, &quot;channel1&quot;)\n  \/\/ \u63a5\u6536\u6d88\u606f\n  msg, err := pubsub.ReceiveMessage(ctx)\n  fmt.Println(msg.Channel, msg.Payload)\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">4. <strong>\u96c6\u7fa4\u4e0e\u54e8\u5175\u6a21\u5f0f<\/strong><\/h4>\n\n\n\n<p>\u2022 <strong>\u96c6\u7fa4\u8fde\u63a5<\/strong>\uff1a<br><code>go rdb := redis.NewClusterClient(&amp;redis.ClusterOptions{ Addrs: []string{\"node1:6379\", \"node2:6379\"}, })<\/code><br>\u2022 <strong>\u54e8\u5175\u6a21\u5f0f<\/strong>\uff1a<br><code>go rdb := redis.NewFailoverClient(&amp;redis.FailoverOptions{ MasterName: \"mymaster\", SentinelAddrs: []string{\"sentinel1:26379\"}, })<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u56db\u3001\u6027\u80fd\u4f18\u5316\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8fde\u63a5\u6c60\u7ba1\u7406<\/strong><br>\u9ed8\u8ba4\u5df2\u542f\u7528\u8fde\u63a5\u6c60\uff0c\u53ef\u901a\u8fc7 <code>Options<\/code> \u8c03\u6574\u53c2\u6570\uff08\u5982 <code>PoolSize<\/code>\uff09\u3002<\/li>\n\n\n\n<li><strong>\u9519\u8bef\u5904\u7406<\/strong><br>\u6240\u6709\u64cd\u4f5c\u9700\u68c0\u67e5\u9519\u8bef\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n   val, err := rdb.Get(ctx, &quot;key&quot;).Result()\n   if err == redis.Nil {\n       fmt.Println(&quot;\u952e\u4e0d\u5b58\u5728&quot;)\n   } else if err != nil {\n       panic(err)\n   }\n<\/pre><\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u952e\u8fc7\u671f\u4e0e\u5220\u9664<\/strong><\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n   rdb.Expire(ctx, &quot;key&quot;, 10*time.Second) \/\/ \u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\n   rdb.Del(ctx, &quot;key1&quot;, &quot;key2&quot;)          \/\/ \u5220\u9664\u952e\n<\/pre><\/div>\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u66ff\u4ee3\u5e93\u5bf9\u6bd4<\/strong><br>\u2022 <strong>Redigo<\/strong>\uff1a\u5b98\u65b9\u63a8\u8350\uff0cAPI \u66f4\u5e95\u5c42\uff0c\u9002\u5408\u9700\u8981\u7cbe\u7ec6\u63a7\u5236\u7684\u573a\u666f\u3002<br>\u2022 <strong>go-redis<\/strong>\uff1a\u66f4\u9ad8\u5c01\u88c5\u5ea6\uff0c\u652f\u6301\u65b0\u7279\u6027\uff08\u5982\u96c6\u7fa4\u3001\u4e8b\u52a1\uff09\u3002<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u5b89\u88c5\u548c\u4f7f\u7528 \u4e8c\u3001\u57fa\u7840\u6570\u636e\u7c7b\u578b\u64cd\u4f5c 1. \u5b57\u7b26\u4e32\uff08String\uff09 \u652f\u6301\u6279\u91cf\u64cd\u4f5c MSet \u548c MGet\u3002 2 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":983,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[121,128],"tags":[],"class_list":["post-628","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-golang","category-redis"],"_links":{"self":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=628"}],"version-history":[{"count":3,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/628\/revisions"}],"predecessor-version":[{"id":984,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/628\/revisions\/984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/media\/983"}],"wp:attachment":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}