{"id":192,"date":"2021-06-15T19:07:32","date_gmt":"2021-06-15T11:07:32","guid":{"rendered":"https:\/\/fugary.com\/?p=192"},"modified":"2021-06-15T19:07:32","modified_gmt":"2021-06-15T11:07:32","slug":"%e5%ae%89%e8%a3%85redis%e5%92%8credis%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae","status":"publish","type":"post","link":"https:\/\/fugary.com\/?p=192","title":{"rendered":"\u5b89\u88c5Redis\u548cRedis\u96c6\u7fa4\u914d\u7f6e"},"content":{"rendered":"<h2>Redis\u5b89\u88c5<\/h2>\n<p>Redis \u662f\u4e00\u4e2a\u5f00\u6e90\uff08BSD\u8bb8\u53ef\uff09\u7684\uff0c\u5185\u5b58\u4e2d\u7684\u6570\u636e\u7ed3\u6784\u5b58\u50a8\u7cfb\u7edf\uff0c\u5b83\u53ef\u4ee5\u7528\u4f5c\u6570\u636e\u5e93\u3001\u7f13\u5b58\u548c\u6d88\u606f\u4e2d\u95f4\u4ef6\u3002<br \/>\n\u5b83\u652f\u6301\u591a\u79cd\u7c7b\u578b\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5982 \u5b57\u7b26\u4e32\uff08strings\uff09\uff0c \u6563\u5217\uff08hashes\uff09\uff0c \u5217\u8868\uff08lists\uff09\uff0c \u96c6\u5408\uff08sets\uff09\uff0c \u6709\u5e8f\u96c6\u5408\uff08sorted sets\uff09 \u4e0e\u8303\u56f4\u67e5\u8be2\uff0c bitmaps\uff0c hyperloglogs \u548c \u5730\u7406\u7a7a\u95f4\uff08geospatial\uff09 \u7d22\u5f15\u534a\u5f84\u67e5\u8be2\u3002<br \/>\nRedis \u5185\u7f6e\u4e86 \u590d\u5236\uff08replication\uff09\uff0cLUA\u811a\u672c\uff08Lua scripting\uff09\uff0c LRU\u9a71\u52a8\u4e8b\u4ef6\uff08LRU eviction\uff09\uff0c\u4e8b\u52a1\uff08transactions\uff09 \u548c\u4e0d\u540c\u7ea7\u522b\u7684 \u78c1\u76d8\u6301\u4e45\u5316\uff08persistence\uff09\uff0c \u5e76\u901a\u8fc7\u81ea\u52a8 \u5206\u533a\uff08Cluster\uff09\u63d0\u4f9b\u9ad8\u53ef\u7528\u6027\uff08high availability\uff09\u3002  <\/p>\n<p>\u5b98\u7f51\u5730\u5740\uff1a<a href=\"https:\/\/redis.io\">https:\/\/redis.io<\/a><\/p>\n<p>\u4e2d\u6587\u7f51\u5730\u5740\uff1a<a href=\"https:\/\/www.redis.cn\">https:\/\/www.redis.cn<\/a><\/p>\n<p>\u4e0b\u8f7d\u5730\u5740\uff1a<a href=\"https:\/\/redis.io\/download\">https:\/\/redis.io\/download<\/a><\/p>\n<h3>\u4e0b\u8f7dRedis\u5230\u672c\u5730<\/h3>\n<p>\u5efa\u8bae\u4f7f\u7528\u865a\u62dflinux\u4e2d\u5b89\u88c5\u914d\u7f6eRedis\uff08\u5e38\u7528\u8fde\u63a5\u5de5\u5177Xshell\u3001MobaXterm\uff09<br \/>\n\u4e0b\u8f7dRedis<\/p>\n<pre><code>curl -O https:\/\/download.redis.io\/releases\/redis-6.2.4.tar.gz\n\/\/ \u6216\u8005\u4f7f\u7528wget\nsudo yum install wget\nwget https:\/\/download.redis.io\/releases\/redis-6.2.4.tar.gz<\/code><\/pre>\n<h3>\u5b89\u88c5\u914d\u7f6eRedis<\/h3>\n<pre><code>\/\/ \u89e3\u538bmake\ntar -zxvf redis-6.2.4.tar.gz\ncd redis-6.2.4\nmake<\/code><\/pre>\n<h4>\u5b89\u88c5\u9519\u8bef\u5904\u7406<\/h4>\n<p><strong>gcc\u6ca1\u6709\u5b89\u88c5<\/strong><\/p>\n<p>make[3]: gcc: Command not found<br \/>\nsudo yum install gcc<\/p>\n<p><strong>jemalloc\u4e0d\u5b58\u5728\u95ee\u9898<\/strong><\/p>\n<p>zmalloc.h:50:31: \u81f4\u547d\u9519\u8bef\uff1ajemalloc\/jemalloc.h\uff1a\u6ca1\u6709\u90a3\u4e2a\u6587\u4ef6\u6216\u76ee\u5f55<\/p>\n<pre><code>\/\/ \u4f7f\u7528\u6b64\u547d\u4ee4\u4ee3\u66ffmake\nmake MALLOC=libc<\/code><\/pre>\n<h4>\u7b80\u5355\u542f\u52a8redis-server<\/h4>\n<p>\u9ed8\u8ba4\u914d\u7f6e\u542f\u52a8redis-server\uff0c&amp;\u8868\u793a\u540e\u53f0\u8fd0\u884c<\/p>\n<pre><code>.\/redis-6.2.4\/src\/redis-server &<\/code><\/pre>\n<h4>\u4f7f\u7528redis-cli\u8fde\u63a5\u5e76\u6d4b\u8bd5\u7ed3\u679c<\/h4>\n<pre><code>.\/redis-6.2.4\/src\/redis-cli\n127.0.0.1:6379> set test 123456\nOK\n127.0.0.1:6379> get test\n\"123456\"<\/code><\/pre>\n<h4>\u914d\u7f6eRedis<\/h4>\n<p>\u9ed8\u8ba4\u914d\u7f6e\u4e0b\uff0credis\u542f\u52a8\u53ea\u80fd\u672c\u673a\u8bbf\u95ee\uff0c\u800c\u4e14\u9ed8\u8ba4\u4e0d\u662f\u540e\u53f0\u8fd0\u884c\uff0c\u9700\u8981\u914d\u7f6e\uff1a<\/p>\n<p>\u914d\u7f6eredis.conf<\/p>\n<pre><code class=\"language-properties\"># \u540e\u53f0\u8fd0\u884c\ndaemonize yes\n# \u914d\u7f6ebind\u540e\u53ef\u4ee5\u5c40\u57df\u7f51\u8bbf\u95ee\uff0c\u5426\u5219\u53ea\u80fd\u672c\u673ahost\uff0c\u53ef\u4ee5\u914d\u7f6ebind\u6216\u8005protected-mode no\n# bind 127.0.0.1 ::1\nbind 10.181.3.25\nprotected-mode no<\/code><\/pre>\n<p>\u4f7f\u7528\u914d\u7f6e\u6587\u4ef6\u542f\u52a8<\/p>\n<pre><code class=\"language-shell\">.\/redis-6.2.4\/src\/redis-server .\/redis-6.2.4\/redis.conf<\/code><\/pre>\n<h2>\u914d\u7f6eRedis\u96c6\u7fa4<\/h2>\n<p>\u6587\u6863\u5730\u5740\uff1a<a href=\"https:\/\/redis.io\/topics\/cluster-tutorial\">https:\/\/redis.io\/topics\/cluster-tutorial<\/a><\/p>\n<h3>\u672c\u5730\u73af\u5883<\/h3>\n<p>\u672c\u5730\u4f7f\u7528\u4e24\u53f0\u673a\u5668\uff0c10.181.3.25\u548c10.181.3.26\u53ef\u4ee5\u914d\u7f6eRedis\u96c6\u7fa4\uff0c\u9996\u5148\u6309\u7167\u524d\u9762\u7684\u65b9\u5f0f\u5728\u4e24\u53f0\u673a\u5668\u4e0a\u90fd\u5b89\u88c5\u597dRedis\u3002<\/p>\n<p>\u4e24\u53f0\u673a\u5668\u5206\u522b\u8dd13\u4e2aRedis\u8fdb\u7a0b\uff0c\u76d1\u542c\u7aef\u53e3\u4e3a7000-7002<\/p>\n<h3>\u96c6\u7fa4\u914d\u7f6e\u6587\u4ef6<\/h3>\n<p>\u6bcf\u53f0\u673a\u5668\u590d\u52363\u4efdredis.conf\uff0c\u5206\u522b\u547d\u540d\u4e3aredis7000.conf\uff0credis7001.conf\uff0credis7002.conf\uff0c\u7136\u540e\u627e\u5230\u76f8\u5173\u914d\u7f6e\uff1a<\/p>\n<pre><code class=\"language-properties\"># \u540e\u53f0\u8fd0\u884c\ndaemonize yes\n# \u914d\u7f6ebind\u540e\u53ef\u4ee5\u5c40\u57df\u7f51\u8bbf\u95ee\uff0c\u5426\u5219\u53ea\u80fd\u672c\u673ahost\uff0c\u53ef\u4ee5\u914d\u7f6ebind\u6216\u8005protected-mode no\n# bind 127.0.0.1 ::1\nbind 10.181.3.25\nprotected-mode no\n# \u96c6\u7fa4\u76f8\u5173\u914d\u7f6e\nport 7000\ncluster-enabled yes\ncluster-config-file nodes-7000.conf\ncluster-node-timeout 5000\n# \u914d\u7f6ePid\u6587\u4ef6\npidfile \/var\/run\/redis_7000.pid\n# \u5f00\u542fAOF\nappendonly yes\nappendfilename &quot;appendonly7000.aof&quot;<\/code><\/pre>\n<p>\u5bf9\u5e94\u7aef\u53e3\u7684\u914d\u7f6e\u6587\u4ef6\u9700\u8981\u4fee\u6539\u76f8\u5173\u7aef\u53e3\u914d\u7f6e\uff0c\u4e0d\u540c\u673a\u5668\u4e5f\u9700\u8981\u914d\u7f6e\u4e0d\u540c\u7684IP\u5730\u5740\u3002<\/p>\n<h3>\u542f\u52a8Redis<\/h3>\n<p>\u542f\u52a8\u4e2a\u53f0\u673a\u5668\u4e0a\u7684Redis<\/p>\n<pre><code class=\"language-shell\"># 3.25\u8282\u70b9\n\/home\/gary\/redis-6.2.4\/src\/redis-server \/home\/gary\/redis-6.2.4\/cluster\/redis7000.conf\n\/home\/gary\/redis-6.2.4\/src\/redis-server \/home\/gary\/redis-6.2.4\/cluster\/redis7001.conf\n\/home\/gary\/redis-6.2.4\/src\/redis-server \/home\/gary\/redis-6.2.4\/cluster\/redis7002.conf\n# 3.26\u8282\u70b9\n\/home\/gary\/redis-6.2.4\/src\/redis-server \/home\/gary\/redis-6.2.4\/cluster\/redis7000.conf\n\/home\/gary\/redis-6.2.4\/src\/redis-server \/home\/gary\/redis-6.2.4\/cluster\/redis7001.conf\n\/home\/gary\/redis-6.2.4\/src\/redis-server \/home\/gary\/redis-6.2.4\/cluster\/redis7002.conf<\/code><\/pre>\n<p>\u542f\u52a8\u597d\u4e4b\u540e\u624d\u80fd\u628a\u673a\u5668\u52a0\u5165\u96c6\u7fa4\u914d\u7f6e\u3002<\/p>\n<h3>\u521b\u5efa\u96c6\u7fa4<\/h3>\n<p>\u5728Redis3\u6216\u80054\u7684\u65f6\u5019\uff0c\u521b\u5efa\u96c6\u7fa4\u9700\u8981\u4f7f\u7528<code>redis-trib.rb<\/code>,\u4e0d\u8fc7\u65b0\u7248\u672c\u5df2\u7ecf\u4e0d\u9700\u8981\u4e86\uff0c\u521b\u5efa\u96c6\u7fa4\u66f4\u52a0\u7b80\u5355\uff0c\u76f4\u63a5\u4f7f\u7528<code>redis-cli<\/code>\u547d\u4ee4\u6765\u521b\u5efa\u96c6\u7fa4\u3002<\/p>\n<pre><code class=\"language-shell\">.\/src\/redis-cli --cluster create 10.181.3.25:7000 10.181.3.25:7001 \\\n10.181.3.25:7002 10.181.3.26:7000 10.181.3.26:7001 10.181.3.26:7002 \\\n--cluster-replicas 1<\/code><\/pre>\n<h3>\u6d4b\u8bd5\u96c6\u7fa4\u8fde\u63a5<\/h3>\n<pre><code class=\"language-shell\"># \u8fde\u63a5\u96c6\u7fa4\u6d4b\u8bd5\n.\/src\/redis-cli -h 10.181.3.25 -p 7000 -c\n# \u96c6\u7fa4\u72b6\u6001\n> cluster nodes<\/code><\/pre>\n<p>\u6210\u529f\u7ed3\u679c<\/p>\n<pre><code>84656ca7bba9a7da82b1177ea5b5678e70eb0139 10.181.3.26:7002@17002 slave 61236bdc80eb7067591a7b7a8d8ee3d04bec80db 0 1623754839000 1 connected\n3a383bc597bc79da479f85fa75ac18093237ea7f 10.181.3.26:7000@17000 master - 0 1623754839839 4 connected 5461-10922\n41f9ded60d05180baa20ae69bbcd517532f5c48f 10.181.3.25:7001@17001 master - 0 1623754839000 2 connected 10923-16383\n4a8d0026e6c5cc98494a47e63909c8407819b423 10.181.3.26:7001@17001 slave 41f9ded60d05180baa20ae69bbcd517532f5c48f 0 1623754838532 2 connected\nf8d48552c3e3e225de695303e0f002590a55f87e 10.181.3.25:7002@17002 slave 3a383bc597bc79da479f85fa75ac18093237ea7f 0 1623754840542 4 connected\n61236bdc80eb7067591a7b7a8d8ee3d04bec80db 10.181.3.25:7000@17000 myself,master - 0 1623754837000 1 connected 0-5460<\/code><\/pre>\n<h3>\u5e38\u89c1\u9519\u8bef<\/h3>\n<p>\u4e00\u76f4\u5361\u5728<\/p>\n<pre><code>Waiting for the cluster to join..<\/code><\/pre>\n<p>\u9700\u8981\u68c0\u67e5\u5404\u4e2a\u8282\u70b97000-7002\u548c17000-17002\u7aef\u53e3\u662f\u5426\u4e92\u901a\uff0c\u53e6\u5916<code>pidfile \/var\/run\/redis_7000.pid<\/code>\u6ca1\u6709\u914d\u7f6e\u4e5f\u53ef\u80fd\u9020\u6210\u4e00\u76f4\u7b49\u5f85join\u3002<\/p>\n<pre><code>[ERR] Node 10.181.3.25:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.<\/code><\/pre>\n<p>\u5982\u679c\u4e2d\u9014\u6709\u521b\u5efa\u5931\u8d25\uff0c\u518d\u6b21\u8c03\u7528\u547d\u4ee4\u521b\u5efa\uff0c\u4f1a\u63d0\u793a\u4e0d\u4e3a\u7a7a\u7684\u9519\u8bef\uff0c\u9700\u8981\u5220\u9664nodes-*\u3001dump.rdb\u3001appendonly*\u7b49\u6587\u4ef6<\/p>\n<pre><code class=\"language-shell\"># \u5220\u9664nodes-*\u3001dump.rdb\u3001appendonly*\nrm nodes-* appendonly* dump.rdb<\/code><\/pre>\n<h3>\u7b80\u5355\u5355\u673a\u96c6\u7fa4<\/h3>\n<p>\u53e6\u5916Redis\u63d0\u4f9b\u4e00\u79cd\u5355\u673a\u521b\u5efa3\u4e3b3\u4ece\u7684\u5355\u673a\u96c6\u7fa4\u5de5\u5177\uff08<code>cd .\/utils\/create-cluster<\/code>\u76ee\u5f55\u4e0b\uff09\uff1a<\/p>\n<pre><code class=\"language-shell\"># \u542f\u52a8\u8282\u70b9\n.\/create-cluster start\n# \u521b\u5efa\u96c6\u7fa4\n.\/create-cluster create\n# \u505c\u6b62\u96c6\u7fa4\n.\/create-cluster stop\n# \u8fde\u63a5\u96c6\u7fa4\u6d4b\u8bd5\n.\/src\/redis-cli -p 30001 -c\n# \u96c6\u7fa4\u72b6\u6001\n> cluster nodes<\/code><\/pre>\n<p>\u9ed8\u8ba4\u7aef\u53e3\u662f:30001-30006\uff0c\u4e00\u5171\u516d\u4e2a\u8282\u70b9\u3002<\/p>\n<h3>\u6d4b\u8bd5\u7b80\u5355\u96c6\u7fa4<\/h3>\n<p>\u8fde\u63a5\u5230\u96c6\u7fa4<\/p>\n<pre><code>.\/src\/redis-cli -p 30001 -c<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Redis\u5b89\u88c5 Redis \u662f\u4e00\u4e2a\u5f00\u6e90\uff08BSD\u8bb8\u53ef\uff09\u7684\uff0c\u5185\u5b58\u4e2d\u7684\u6570\u636e\u7ed3\u6784\u5b58\u50a8\u7cfb\u7edf\uff0c\u5b83\u53ef\u4ee5\u7528\u4f5c\u6570\u636e\u5e93\u3001\u7f13\u5b58\u548c\u6d88\u606f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,14,2],"tags":[38,39],"_links":{"self":[{"href":"https:\/\/fugary.com\/index.php?rest_route=\/wp\/v2\/posts\/192"}],"collection":[{"href":"https:\/\/fugary.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fugary.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fugary.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fugary.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=192"}],"version-history":[{"count":1,"href":"https:\/\/fugary.com\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions"}],"predecessor-version":[{"id":193,"href":"https:\/\/fugary.com\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions\/193"}],"wp:attachment":[{"href":"https:\/\/fugary.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fugary.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fugary.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}