{"id":2080,"date":"2023-04-01T21:49:26","date_gmt":"2023-04-01T13:49:26","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=2080"},"modified":"2023-04-06T15:59:58","modified_gmt":"2023-04-06T07:59:58","slug":"playing-redis-how-to-import-export-and-delete-a-large-amount-of-data-in-the-production-environment","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/04\/01\/playing-redis-how-to-import-export-and-delete-a-large-amount-of-data-in-the-production-environment\/","title":{"rendered":"\u73a9\u8f6cRedis-\u751f\u4ea7\u73af\u5883\u5982\u4f55\u5bfc\u5165\u3001\u5bfc\u51fa\u53ca\u5220\u9664\u5927\u91cf\u6570\u636e"},"content":{"rendered":"<h2>\u6982\u8ff0<\/h2>\n<p>\u672c\u6587\u5c06\u6a21\u62df\u751f\u4ea7\u73af\u5883\uff0c\u6784\u9020\u5927\u91cf\u6d4b\u8bd5\u6570\u636e\uff0c\u5e76\u5b8c\u6210\u9ad8\u6548\u5b89\u5168\u7684\u6570\u636e\u5bfc\u5165\u3001\u6570\u636e\u5bfc\u51fa\u3001\u6570\u636e\u5220\u9664\u3002<\/p>\n<p>\u4f17\u6240\u5468\u77e5\uff0cRedis\u662f\u5355\u7ebf\u7a0b\u7684\uff0c\u4e00\u65e6\u4e00\u4e2a\u547d\u4ee4\u53d1\u751f\u957f\u65f6\u95f4\u963b\u585e\uff0c\u6781\u6613\u5bfc\u81f4\u5927\u91cf\u547d\u4ee4\u963b\u585e\uff0c\u4ece\u800c\u5bfc\u81f4\u751f\u4ea7\u73af\u5883\u96ea\u5d29\uff0c\u6240\u4ee5\u672c\u6587\u7740\u91cd\u5f3a\u8c03 \u3010<strong>\u751f\u4ea7\u73af\u5883<\/strong>\u3001<strong>\u5b89\u5168\u9ad8\u6548<\/strong>\u3011 \u64cd\u4f5c\u3002<\/p>\n<p><!-- more --><\/p>\n<h2>Redis\u751f\u4ea7\u73af\u5883\u5b89\u5168\u9ad8\u6548\u5bfc\u5165\u5927\u91cf\u6570\u636e<\/h2>\n<h3>\u4f7f\u7528shell\u811a\u672c\u6784\u9020\u6d4b\u8bd5\u6570\u636e<\/h3>\n<p>Linux\u73af\u5883\u521b\u5efa<code>dataBuild.sh<\/code>\u811a\u672c\uff0c\u6b64\u811a\u672c\u7528\u4e8e\u751f\u6210\u6d4b\u8bd5\u6570\u636e\uff0c\u811a\u672c\u7684\u5165\u53c2\u662f\u6d4b\u8bd5\u6570\u636e\u7684\u6570\u91cf\uff0c\u811a\u672c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">#\uff01\/bin\/sh\n# init Test Data.\n\necho &quot;\u6784\u9020\u6570\u91cf\uff1a$1&quot;;\nrm -f .\/testdata.txt;\ntouch testdata.txt;\n\nstarttime=`date +&#039;%Y-%m-%d %H:%M:%S&#039;`;\necho &quot;Start: $starttime&quot;;\n\nfor((i=0; i &lt; $1; i++))\ndo\n    str=&#039;set key-&#039;;\n    name=${str}${i}&#039; value&#039;${i};\n    echo  $name&gt;&gt; testdata.txt;\ndone\n\nendtime=`date +&#039;%Y-%m-%d %H:%M:%S&#039;`;\necho &quot;End: $endtime&quot;;\n\nstart_seconds=$(date --date=&quot;$starttime&quot; +%s);\nend_seconds=$(date --date=&quot;$endtime&quot; +%s);\necho &quot;\u672c\u6b21\u8fd0\u884c\u65f6\u95f4\uff1a &quot;$((end_seconds-start_seconds))&quot;s&quot;\n#echo &#039;show testdata&#039;;\n#cat testdata.txt;<\/code><\/pre>\n<p>\u5efa\u8bae\u5728Linux\u73af\u5883\u521b\u5efa\u811a\u672c\uff0c\u5426\u5219\u53ef\u80fd\u6267\u884cshell\u811a\u672c\u65f6\u62a5\u9519<code>$&#039;\\r&#039;: command not found<\/code>\u3002\u89e3\u51b3\u65b9\u6848\uff1a<code>vim dataBuild.sh<\/code>\uff0c\u7136\u540e\u6267\u884c<code>:set fileformat=unix<\/code>\uff0c\u5e76wq\u4fdd\u5b58\u5373\u53ef\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u5c31\u53ef\u4ee5\u6267\u884c\u811a\u672c\u751f\u6210\u6d4b\u8bd5\u6570\u636e\u4e86\uff0c\u6b64\u5904\u751f\u621030W\u6570\u636e\uff0c\u811a\u672c\u6267\u884c\u5b8c\u6bd5\u540e\u5f53\u524d\u76ee\u5f55\u4f1a\u751f\u6210\u6d4b\u8bd5\u6570\u636e\u6587\u4ef6<code>testdata.txt<\/code>\u3002<\/p>\n<pre><code class=\"language-bash\"># \u6267\u884c\u811a\u672c\u751f\u621030W\u6d4b\u8bd5\u6570\u636e\n\nroot@xxx:\/study\/redis# .\/dataBuild.sh 300000\n\u6784\u9020\u6570\u91cf\uff1a300000\nStart: 2020-10-11 17:30:45\nEnd: 2020-10-11 17:34:54\n\u672c\u6b21\u8fd0\u884c\u65f6\u95f4\uff1a 249s<\/code><\/pre>\n<pre><code class=\"language-bash\"># \u811a\u672c\u5185\u5bb9\u793a\u4f8b\uff0c30W\u6570\u636e\u5927\u7ea6\u67097.5M\uff1a\nset key-0 value0\nset key-1 value1\nset key-2 value2\nset key-3 value3\nset key-4 value4\nset key-5 value5\n...<\/code><\/pre>\n<h3>Redis\u975e\u96c6\u7fa4\u6a21\u5f0f\u5bfc\u5165\u5927\u91cf\u6570\u636e<\/h3>\n<p>Redis\u5b98\u65b9\u5df2\u7ecf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u89e3\u51b3\u65b9\u6848\u3010mass-insert\u3011\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/redis.io\/topics\/mass-insert\">https:\/\/redis.io\/topics\/mass-insert<\/a>\uff1a<\/p>\n<blockquote>\n<p>Using a normal Redis client to perform mass insertion is not a good idea for a few reasons: the naive approach of sending one command after the other is slow because you have to pay for the round trip time for every command. It is possible to use pipelining, but for mass insertion of many records you need to write new commands while you read replies at the same time to make sure you are inserting as fast as possible.<\/p>\n<p>Only a small percentage of clients support non-blocking I\/O, and not all the clients are able to parse the replies in an efficient way in order to maximize throughput. For all of these reasons the preferred way to mass import data into Redis is to generate a text file containing the Redis protocol, in raw format, in order to call the commands needed to insert the required data.<\/p>\n<\/blockquote>\n<p>\u7ffb\u8bd1\u8fc7\u6765\u5c31\u662f\uff1a<\/p>\n<ul>\n<li>\u6bcf\u4e2aRedis\u5ba2\u6237\u7aef\u7684\u547d\u4ee4\u4ece\u6267\u884c\u5230\u8fd4\u56de\u7ed3\u679c\u90fd\u9700\u8981\u4e00\u5b9a\u7684\u65f6\u95f4<\/li>\n<li>\u53ea\u6709\u5c11\u90e8\u5206\u5ba2\u6237\u7aef\u652f\u6301\u5f02\u6b65I\/O\u5904\u7406\uff0c\u6240\u4ee5\u5373\u4f7f\u4f7f\u7528\u591a\u4e2aRedis\u5ba2\u6237\u7aef\u5e76\u53d1\u63d2\u5165\u4e5f\u4e0d\u80fd\u63d0\u9ad8\u541e\u5410\u91cf<\/li>\n<li>\u5efa\u8bae\u89e3\u51b3\u65b9\u6848\u662f\uff1a\u5c06\u5f85\u63d2\u5165\u6570\u636e\u4ee5Redis\u534f\u8bae\u751f\u6210\u6587\u672c\u6587\u4ef6\u518d\u5bfc\u5165<\/li>\n<\/ul>\n<p><strong>Redis 2.6\u4ee5\u4e0a\u7248\u672c\uff0c<code>redis-cli<\/code>\u652f\u6301\u7ba1\u9053\u6a21\u5f0f pipe mode\uff08\u7ba1\u9053\u6a21\u5f0f\uff09\uff0c\u8be5\u6a21\u5f0f\u4e13\u95e8\u4e3a\u6267\u884c\u5927\u89c4\u6a21\u63d2\u5165\u800c\u8bbe\u8ba1<\/strong>\u3002<\/p>\n<p>\u6211\u4eec\u6765\u5b9e\u6218\u4e00\u4e0b\uff0c\u7ba1\u9053\u6a21\u5f0f\u5bfc\u5165\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">cat testdata.txt | redis-cli --pipe<\/code><\/pre>\n<p>\u6211\u4eec\u53ef\u4ee5\u5728\u547d\u4ee4\u524d\u52a0time\u6307\u4ee4\u7528\u4e8e\u7edf\u8ba1\u547d\u540d\u6267\u884c\u65f6\u95f4\u3002<\/p>\n<pre><code class=\"language-bash\">[redis@xxx]$ time cat testdata.txt | .\/redis-cli --pipe\nWarning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\nAll data transferred. Waiting for the last reply...\nLast reply received from server.\nerrors: 0, replies: 300000\n\nreal    0m1.778s\nuser    0m0.039s\nsys    0m0.016s\n\n# \u8fde\u4e0aRedis\u786e\u8ba4\u6570\u636e\u662f\u5426\u5bfc\u5165\u6210\u529f\u3002\n\n127.0.0.1:6379&gt; get key-0\n&quot;value0&quot;\n127.0.0.1:6379&gt; get key-299999\n&quot;value299999&quot;\n127.0.0.1:6379&gt; get key-300000\n(nil)<\/code><\/pre>\n<p>30W\u6570\u636e\uff0c1.7\u79d2\u5b8c\u6210\u5bfc\u5165\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u679c<code>redis-cli<\/code>\u547d\u4ee4\u6ca1\u6709\u8bbe\u7f6e\u4e3a\u5168\u5c40\u547d\u4ee4\uff0c\u9700\u8981\u5148\u8fdb\u5165\u5230<code>redis-cli<\/code>\u6240\u5728\u76ee\u5f55\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a<\/p>\n<pre><code class=\"language-bash\"># redis-cli \u53d8\u6210 .\/redis-cli\ncat testdata.txt | .\/redis-cli --pipe<\/code><\/pre>\n<p>\u5982\u679c\u9700\u8981\u6307\u5b9a\u5176\u4ed6\u53c2\u6570\uff0c\u53ef\u4ee5\u5982\u4e0b\u64cd\u4f5c\uff1a<\/p>\n<ul>\n<li>\u6307\u5b9a\u7aef\u53e3\uff1a-p 6379<\/li>\n<li>\u6307\u5b9a\u8fdc\u7a0b\u4e3b\u673a\uff1a-h 192.168.1.1<\/li>\n<li>\u9700\u8981\u5bc6\u7801\u8ba4\u8bc1\uff1a-a redisPasword<\/li>\n<\/ul>\n<pre><code class=\"language-bash\"># Redis\u5bfc\u5165\u6570\u636e\u5b8c\u6574\u547d\u4ee4\uff1a\n\ncat testdata.txt | .\/redis-cli -h 192.168.1.1 -p 6379 -a redisPasword --pipe<\/code><\/pre>\n<h3>Redis\u96c6\u7fa4\u6a21\u5f0f\u5bfc\u5165\u5927\u91cf\u6570\u636e<\/h3>\n<p>\u4ee5\u4e0a\u6570\u636e\u5bfc\u5165\u65b9\u5f0f\u9488\u5bf9\u7684\u662f\u975e\u96c6\u7fa4\u6a21\u5f0f\uff0c\u90a3\u4e48\u96c6\u7fa4\u6a21\u5f0f\u53c8\u8be5\u5982\u4f55\u5bfc\u5165\u6570\u636e\u5462\uff1f<\/p>\n<pre><code class=\"language-bash\">cat testdata.txt | redis-cli -c --pipe<\/code><\/pre>\n<p>\u5982\u4e0a\u6240\u793a\uff0c\u4f7f\u7528<code>-c<\/code>\u5373\u53ef\u542f\u52a8\u96c6\u7fa4\u6a21\u5f0f\uff0c\u4f46\u662f\u7531\u4e8e\u96c6\u7fa4\u6a21\u5f0f\u5b58\u5728\u591a\u4e2a\u8282\u70b9\uff0c\u6b64\u5904\u6781\u6709\u53ef\u80fd\u4f1a\u51fa\u73b0\u6570\u636e\u5904\u7406\u5931\u8d25\u7684\u573a\u666f\u3002<\/p>\n<p>Redis\u96c6\u7fa4\u6a21\u5f0f\u670916384\u4e2ahash\u69fd\uff08hash slots\uff09\uff0c\u5047\u8bbe\u96c6\u7fa4\u67093\u4e2a\u8282\u70b9\uff0cnode1\u5206\u914d 0~5460\u7684\u69fd\u4f4d\uff0cnode2\u5206\u914d 5461~10922\u7684\u69fd\u4f4d\uff0cnode3\u5206\u914d 10923~16383\u7684\u69fd\u4f4d\u3002\u96c6\u7fa4\u4e2d\u7684\u6bcf\u4e2a\u4e3b\u8282\u70b9\u53ea\u4f1a\u64cd\u4f5c\u5bf9\u5e94\u7684hash\u69fd\uff0c\u6839\u636e<code>CRC16(key) mod 16384<\/code>\u8ba1\u7b97\u51fa\u6bcf\u4e2akey\u5bf9\u5e94\u7684\u69fd\u4f4d\uff0c\u7136\u540e\u5230\u69fd\u4f4d\u5bf9\u5e94\u7684Redis\u8282\u70b9\u6267\u884c\u64cd\u4f5c\u5373\u53ef\u3002<\/p>\n<pre><code class=\"language-bash\">HASH_SLOT = CRC16(key) mod 16384<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u96c6\u7fa4\u6a21\u5f0f\u4e0b\u8282\u70b9\u53ef\u80fd\u52a8\u6001\u589e\u52a0\u6216\u5220\u9664\uff0c\u6240\u4ee5\u6267\u884c\u4ee5\u4e0a\u547d\u4ee4\u65f6\u9700\u786e\u4fdd\u96c6\u7fa4\u8282\u70b9\u7684\u7a33\u5b9a\u6027\uff0c\u540c\u65f6\u505a\u597d\u7ed3\u679c\u68c0\u67e5\u3002<\/p>\n<h2>Redis\u751f\u4ea7\u73af\u5883\u5b89\u5168\u9ad8\u6548\u5bfc\u51fa\u5927\u91cf\u6570\u636e<\/h2>\n<h3>Redis\u5bfc\u5165\u5bfc\u51fa\u6240\u6709\u6570\u636e<\/h3>\n<p>\u8fd9\u79cd\u573a\u666f\u4e0b\uff0c\u53ef\u4f7f\u7528Ruby\u5f00\u6e90\u5de5\u5177<code>redis-dump<\/code>\u5bfc\u51fa\uff0c\u5b98\u7f51\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/delano\/redis-dump\">https:\/\/github.com\/delano\/redis-dump<\/a><\/p>\n<pre><code class=\"language-bash\"># redis-dump\u4f7f\u7528\u793a\u4f8b\n\n$ redis-dump -u 127.0.0.1:6371 &gt; db_full.json\n$ redis-dump -u 127.0.0.1:6371 -d 15 &gt; db_db15.json\n\n$ &lt; db_full.json redis-load\n$ &lt; db_db15.json redis-load -d 15\n# OR\n$ cat db_full | redis-load\n$ cat db_db15.json | redis-load -d 15\n\n# \u5e26\u5bc6\u7801\u64cd\u4f5c\n$ redis-dump -u :password@host:port -d 0 &gt; db_full.json\n$ cat db_full.json | redis-load -u :password@host:port -d 0<\/code><\/pre>\n<h3>Redis\u5bfc\u51fa\u6307\u5b9a\u524d\u7f00\uff08\u6307\u5b9a\u901a\u914d\u7b26\uff09\u6570\u636e<\/h3>\n<p>\u5b89\u5168\u9ad8\u6548\u5bfc\u51fa\u5927\u91cf\u6570\u636e\uff0c\u751f\u4ea7\u73af\u5883\u591a\u662f\u9700\u8981\u5bfc\u51fa\u201c\u6307\u5b9a\u901a\u914d\u7b26\u201d\u6570\u636e\uff0c\u7528\u4e8e\u6570\u636e\u6216\u8005\u4e1a\u52a1\u5206\u6790\uff0c\u96be\u70b9\u662f\u3010\u5b89\u5168\u9ad8\u6548\u5bfc\u51fa\u5927\u91cf\u6307\u5b9a\u901a\u914d\u7b26\u6570\u636e\u3011\uff0c\u6838\u5fc3\u5728\u201c\u6307\u5b9a\u901a\u914d\u7b26\u201d\u3002\u9762\u5bf9\u6570\u636e\u91cf\u8f83\u5927\u7684\u751f\u4ea7\u73af\u5883\uff0c\u7531\u4e8eRedis\u662f\u5355\u7ebf\u7a0b\u7684\uff0c\u6240\u4ee5\u4e0d\u80fd\u4f7f\u7528\u963b\u585e\u6027\u7684\u64cd\u4f5c\u6307\u4ee4\u3002<\/p>\n<p>\u5b8c\u6574\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n<pre><code class=\"language-bash\">.\/redis-cli -h 192.168.1.1 -p 6379 -a password --raw --scan --pattern &#039;\u81ea\u5b9a\u4e49pattern&#039; &gt; out.txt<\/code><\/pre>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f\uff1a\u8fd9\u91cc\u4e0d\u80fd\u4f7f\u7528<code>keys<\/code>\u6307\u4ee4\uff0c\u56e0\u4e3a\u6b64\u547d\u4ee4\u662f\u963b\u585e\u5f0f\u7684\u3002\u7f51\u4e0a\u6709\u5f88\u591a\u6587\u7ae0\u5199\u7684\u662f<code>keys<\/code>\u6307\u4ee4\uff0c\u5207\u5fcc\u614e\u7528\uff0c\u4e0d\u7136\u4e00\u4e0d\u5c0f\u5fc3\u5c31\u771f\u7684\u662f\u4ece\u5220\u5e93\u5230\u8dd1\u8def\u4e86\u3002<\/p>\n<h3>redis-cli\u547d\u4ee4\u2013raw\u53c2\u6570\u4f5c\u7528<\/h3>\n<ul>\n<li>\u8f93\u51fa\u6570\u636e\u662f\u539f\u59cb\u6570\u636e\uff0c\u4e0d\u5305\u542b\u7c7b\u578b<\/li>\n<li>\u8f93\u51fa\u6570\u636e\u7684\u4e2d\u6587\u6b63\u5e38\u663e\u793a\uff0c\u663e\u793a\u5185\u5bb9\u4e0d\u662f\u7f16\u7801\u540e\u7684\u5185\u5bb9<\/li>\n<\/ul>\n<p><code>redis-cli<\/code>\u68c0\u6d4b\u5230\u6807\u51c6\u8f93\u51fa\u662ftty\uff08\u7ec8\u7aef\uff09\u65f6\uff0c\u8fd4\u56de\u7ed3\u679c\u4f1a\u52a0\u7c7b\u578b\uff0c\u6bd4\u5982\uff08integer\uff09\uff1b<br \/>\n\u6807\u51c6\u8f93\u51fa\u4e0d\u662ftty\uff0c\u4f8b\u5982\uff0c\u6570\u636e\u88ab\u91cd\u5b9a\u5411\u5230\u7ba1\u9053\u6216\u8005\u6587\u4ef6\u65f6\uff0c\u4f1a\u81ea\u52a8\u9ed8\u8ba4\u5f00\u542f<code>\u2013raw<\/code>\u9009\u9879\uff0c\u4fbf\u4e0d\u4f1a\u589e\u52a0\u7c7b\u578b\u4fe1\u606f\u3002\u5b98\u65b9\u8bf4\u660e\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/redis.io\/topics\/rediscli\uff0c\u67e5\u770b\">https:\/\/redis.io\/topics\/rediscli\uff0c\u67e5\u770b<\/a><code>Command line usage<\/code>\u6a21\u5757\u3002<\/p>\n<pre><code class=\"language-bash\"># \u6807\u51c6\u8f93\u51fa\u662ftty\uff08\u7ec8\u7aef\uff09\uff0c\u6ce8\u610f\u7ed3\u679c\u6709\u4e2a(integer)\uff1a\n$ redis-cli incr mycounter\n(integer) 7\n\n# \u6807\u51c6\u8f93\u51fa\u4e0d\u662ftty\uff08\u91cd\u5b9a\u5411\u5230\u4e86\u6587\u4ef6\uff09\uff1a\n$ redis-cli incr mycounter &gt; \/tmp\/output.txt\n$ cat \/tmp\/output.txt\n8\n\n# \u52a0\u5165--raw\u53c2\u6570\uff0c\u7ed3\u679c\u6ca1\u6709(integer)\n$ redis-cli --raw incr mycounter\n9<\/code><\/pre>\n<h2>Redis\u751f\u4ea7\u73af\u5883\u5b89\u5168\u9ad8\u6548\u5220\u9664\u6570\u636e<\/h2>\n<h3>Redis\u5220\u9664\u5df2\u77e5\u7684\u6307\u5b9akey<\/h3>\n<p>\u770b\u4e86\u5982\u4f55\u5feb\u901f\u5bfc\u5165\u5927\u91cf\u6570\u636e\uff0c\u5176\u5b9e\u901a\u8fc7\u5176\u539f\u7406\u6211\u4eec\u4e0d\u96be\u53d1\u73b0\uff0c\u672c\u8d28\u4e0a\u662f\u6267\u884c\u4e86Redis\u534f\u8bae\u683c\u5f0f\u7684\u6587\u672c\uff0c\u90a3\u4e48\u5f53\u6211\u4eec\u80fd\u63d0\u524d\u6784\u9020\u597d\u5f85\u5220\u9664\u6570\u636e\u7684\u811a\u672c\u65f6\uff0c\u4e5f\u540c\u6837\u53ef\u4ee5\u4f7f\u7528 <code>\u2013pipe<\/code>\u5b8c\u6210\u5927\u91cf\u6570\u636e\u7684\u9ad8\u6548\u5220\u9664<\/p>\n<pre><code class=\"language-bash\">cat deletedata.txt | redis-cli -c --pipe<\/code><\/pre>\n<pre><code class=\"language-bash\"># deletedata.txt \u6570\u636e\u793a\u4f8b\uff1a\n\ndel key-0\ndel key-1\ndel key-2\ndel key-3\ndel key-4\ndel key-5\ndel key-6\ndel key-7\ndel key-8\ndel key-9\n...<\/code><\/pre>\n<h3>\u5220\u9664\u6307\u5b9a\u524d\u7f00\uff08\u6307\u5b9a\u901a\u914d\u7b26\uff09\u6570\u636e<\/h3>\n<p>\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-bash\">.\/redis-cli -h 127.0.0.1 -p 6379 -a password --scan --pattern &#039;key-*&#039; | xargs .\/redis-cli -h 127.0.0.1 -p 6379 -a password del {}<\/code><\/pre>\n<p>\u8f93\u51fa\u7ed3\u679c\u5f62\u5982\uff1a<\/p>\n<pre><code class=\"language-bash\">Warning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\nWarning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\n(integer) 12322\nWarning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\n(integer) 12326<\/code><\/pre>\n<p>\u547d\u4ee4\u6838\u5fc3\u662f\uff1a<\/p>\n<ul>\n<li><code>\u2013scan --pattern &#039;key-*&#039;<\/code>\uff1a\u5229\u7528\u901a\u914d\u7b26\u5339\u914d\u6307\u5b9akey<\/li>\n<li><code>| xargs<\/code>\uff1a\u7528\u4e8e\u4f20\u9012\u53c2\u6570<\/li>\n<li><code>del {}<\/code>\uff1a\u63a5\u6536key\u5e76\u5220\u9664<\/li>\n<\/ul>\n<p>Linux xargs \u547d\u4ee4\uff1a<\/p>\n<p>xargs\uff08\u82f1\u6587\u5168\u62fc\uff1aeXtended ARGuments\uff09\u662f\u7ed9\u547d\u4ee4\u4f20\u9012\u53c2\u6570\u7684\u4e00\u4e2a\u8fc7\u6ee4\u5668\uff0c\u4e5f\u662f\u7ec4\u5408\u591a\u4e2a\u547d\u4ee4\u7684\u4e00\u4e2a\u5de5\u5177\u3002<\/p>\n<p>xargs \u53ef\u4ee5\u5c06\u7ba1\u9053\u6216\u6807\u51c6\u8f93\u5165\uff08stdin\uff09\u6570\u636e\u8f6c\u6362\u6210\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u4e5f\u80fd\u591f\u4ece\u6587\u4ef6\u7684\u8f93\u51fa\u4e2d\u8bfb\u53d6\u6570\u636e\u3002xargs \u4e5f\u53ef\u4ee5\u5c06\u5355\u884c\u6216\u591a\u884c\u6587\u672c\u8f93\u5165\u8f6c\u6362\u4e3a\u5176\u4ed6\u683c\u5f0f\uff0c\u4f8b\u5982\u591a\u884c\u53d8\u5355\u884c\uff0c\u5355\u884c\u53d8\u591a\u884c\u3002<\/p>\n<p>xargs \u9ed8\u8ba4\u7684\u547d\u4ee4\u662f echo\uff0c\u8fd9\u610f\u5473\u7740\u901a\u8fc7\u7ba1\u9053\u4f20\u9012\u7ed9 xargs \u7684\u8f93\u5165\u5c06\u4f1a\u5305\u542b\u6362\u884c\u548c\u7a7a\u767d\uff0c\u4e0d\u8fc7\u901a\u8fc7 xargs \u7684\u5904\u7406\uff0c\u6362\u884c\u548c\u7a7a\u767d\u5c06\u88ab\u7a7a\u683c\u53d6\u4ee3\u3002<\/p>\n<p>xargs \u662f\u4e00\u4e2a\u5f3a\u6709\u529b\u7684\u547d\u4ee4\uff0c\u5b83\u80fd\u591f\u6355\u83b7\u4e00\u4e2a\u547d\u4ee4\u7684\u8f93\u51fa\uff0c\u7136\u540e\u4f20\u9012\u7ed9\u53e6\u5916\u4e00\u4e2a\u547d\u4ee4\u3002<\/p>\n<p>\u7531\u4e8e\u5f88\u591a\u547d\u4ee4\u4e0d\u652f\u6301<code>|<\/code>\u7ba1\u9053\u6765\u4f20\u9012\u53c2\u6570\uff0c\u6240\u4ee5\u5c31\u6709\u4e86 xargs \u547d\u4ee4\u3002xargs \u4e00\u822c\u662f\u548c\u7ba1\u9053\u4e00\u8d77\u4f7f\u7528\uff0c\u547d\u4ee4\u683c\u5f0f\uff1a<\/p>\n<pre><code>somecommand | xargs -item command<\/code><\/pre>\n<h2>\u5b9e\u7528\u5c0f\u6280\u5de7<\/h2>\n<h3>Redis\u7edf\u8ba1\u6307\u5b9a\u901a\u914d\u7b26key\u7684\u6570\u91cf<\/h3>\n<p>\u524d\u9762\u6211\u4eec\u6559\u4f1a\u5927\u5bb6\u5728\u751f\u4ea7\u73af\u5883\u5bfc\u51fa\u6216\u8005\u5220\u9664\u6570\u636e\uff0c\u90a3\u6211\u4eec\u5982\u4f55\u9a8c\u8bc1\u6570\u636e\u91cf\u662f\u5426\u6b63\u786e\u5462\uff1f<\/p>\n<p>\u501f\u52a9<code> | wc -l<\/code>\u5373\u53ef\uff1a<\/p>\n<pre><code># \u547d\u4ee4\u7684\u6838\u5fc3\u662f\u201c | wc -l\u201d\n\n>.\/redis-cli -h 127.0.0.1 -p 6379 -a password --scan --pattern &#039;id:*&#039; | wc -l\n66666<\/code><\/pre>\n<h3>\u514d\u8f93\u5bc6\u7801\u8fde\u63a5Redis\u811a\u672c<\/h3>\n<p>\u5728\u751f\u4ea7\u73af\u5883\u6bcf\u6b21\u64cd\u4f5c\u90fd\u8f93\u5165\u5bc6\u7801\u80af\u5b9a\u662f\u975e\u5e38\u4e0d\u5b89\u5168\u3001\u975e\u5e38low\u7684\u64cd\u4f5c\uff0c\u90a3\u4e48\u6211\u4eec\u6709\u4ec0\u4e48\u65b9\u5f0f\u53ef\u4ee5\u4e0d\u7528\u8f93\u5165\u5bc6\u7801\u5c31\u8fde\u63a5Redis\u5417\u3002<\/p>\n<p>\u5c06\u4ee5\u4e0b\u5185\u5bb9\u4fdd\u5b58\u4e8e\u811a\u672c<code>openredis.sh<\/code>\u4e2d\uff0c\u4f7f\u7528<code>chmod u+x openredis.sh<\/code>\u6388\u4e88\u811a\u672c\u53ef\u6267\u884c\u6743\u9650\u3002\u6b64\u5904\u7684\u514d\u8f93\u5bc6\u7801\u5b9e\u9645\u4e0a\u662f\u5c06\u5bc6\u7801\u4fdd\u5b58\u5230\u811a\u672c\u4e2d\uff0c\u6240\u4ee5\u8bf7\u6ce8\u610f\u6b64\u811a\u672c\u7684\u5b89\u5168\u6027\u3002<\/p>\n<pre><code class=\"language-bash\"># \u8fde\u63a5Redis\u811a\u672c\uff0c\u5982\u6709\u5bc6\u7801\uff0c\u8bf7\u5c06\u811a\u672c\u4e2d\u7684&#039;password&#039;\u6362\u6210\u5b9e\u9645\u5bc6\u7801\n# \u7b2c\u4e00\u4e2a\u53c2\u6570\u662f\u7aef\u53e3\u53f7\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u5f85\u6267\u884c\u547d\u4ee4\n# \u5982\u679c\u9700\u8981\u6307\u5b9a\u4e3b\u673a\uff0c\u5219\u52a0\u5165 -h \u5373\u53ef\n\nPort=$1\nCMD=$2\n\/usr\/local\/bin\/redis-cli -p $Port -a password $CMD<\/code><\/pre>\n<p>\u4f7f\u7528\u65b9\u5f0f\uff1a<\/p>\n<pre><code class=\"language-bash\"># \u4f7f\u7528 openredis.sh \u67e5\u770bClients\u8fde\u63a5\u4fe1\u606f\n\n[redis@xxx redis]# .\/openredis.sh 6379 &#039;info  Clients&#039;\nWarning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\n# Clients\nconnected_clients:1\nclient_recent_max_input_buffer:51\nclient_recent_max_output_buffer:0\nblocked_clients:0<\/code><\/pre>\n<pre><code class=\"language-bash\"># \u4f7f\u7528 openredis.sh \u5b58\u5165\u53ca\u67e5\u8be2\u6570\u636e\n\n[redis@redis]# .\/openredis.sh 6379 &#039;set key1 v1&#039;\nWarning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\nOK\n[redis@redis]# .\/openredis.sh 6379 &#039;get key1&#039;\nWarning: Using a password with &#039;-a&#039; or &#039;-u&#039; option on the command line interface may not be safe.\n&quot;v1&quot;<\/code><\/pre>\n<pre><code class=\"language-bash\"># \u4f7f\u7528 openredis.sh \u7edf\u8ba1\u6570\u636e\n# \u6ce8\u610f\u5305\u88f9\u6307\u4ee4\u7684\u662f\u5355\u5f15\u53f7\uff0c&#039;--scan --pattern &#039;k*&#039;&#039;\n\n[redis@redis]# .\/openredis.sh 6379 &#039;--scan --pattern &#039;id:*&#039;&#039; | wc -l\n66666<\/code><\/pre>\n<pre><code class=\"language-bash\"># \u4f7f\u7528 openredis.sh \u5bfc\u5165\u6570\u636e\n# testdata.txt \u5b58\u653e\u7684\u662f \u5927\u91cf&#039;set key-0 value0&#039;\u6570\u636e\n\ncat testdata.txt | .\/openredis.sh 6379 --pipe<\/code><\/pre>\n<pre><code class=\"language-bash\"># \u4f7f\u7528 openredis.sh \u5bfc\u51fa\u6570\u636e\n\n[redis@redis]# .\/openredis.sh 6379 &#039;--scan --pattern &#039;id:*&#039;&#039; &gt; out.txt\n66666<\/code><\/pre>\n<h3>\u601d\u8003\uff1aLinux\u53ef\u4ee5\u8bbe\u7f6e\u811a\u672c\u53ef\u6267\u884c\u4f46\u4e0d\u53ef\u8bfb\u5417<\/h3>\n<p>\u201c\u514d\u8f93\u5bc6\u7801\u8fde\u63a5Redis\u811a\u672c\u201d\u6211\u4eec\u63d0\u5230\uff0c\u5bc6\u7801\u4fdd\u5b58\u4e8e\u811a\u672c<code>openredis.sh<\/code>\u4e2d\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u5c06\u672c<code>openredis.sh<\/code>\u6743\u9650\u8bbe\u7f6e\u4e3a\u201c\u53ef\u6267\u884c\u4f46\u4e0d\u53ef\u8bfb\u201d\u5417\uff0c\u4ee5\u6b64\u6765\u4fdd\u8bc1\u811a\u672c\u4e2d\u79c1\u5bc6\u4fe1\u606f\u7684\u5b89\u5168\u3002<\/p>\n<pre><code class=\"language-bash\"># \u8bbe\u7f6e\u6743\u9650\u4e3a\uff1a\u6240\u6709\u8005\u53ef\u8bfb\u53ef\u5199\u53ef\u6267\u884c\uff1b\u5176\u4ed6\u7528\u6237\u4ec5\u53ef\u6267\u884c\uff1b\n\nchmod 711 openredis.sh<\/code><\/pre>\n<pre><code class=\"language-bash\"># redis\u7528\u6237\u4ec5\u6709\u53ef\u6267\u884c\u6743\u9650\n\n[redis@redis]$ ll openredis.sh \n-rwx--x--x 1 root root 186 Nov  8 22:20 openredis.sh\n\n[redis@redis]$ cat openredis.sh \ncat: openredis.sh: Permission denied\n\n[redis@redis]$ .\/openredis.sh 6379 &#039;--scan --pattern &#039;id:*&#039;&#039; | wc -l\nbash: .\/openredis.sh: Permission denied<\/code><\/pre>\n<p>\u4ece\u4e0a\u9762\u7684\u6267\u884c\u60c5\u51b5\u770b\uff0c\u5f53\u811a\u672c\u8bbe\u7f6e\u4e3a\u201c\u53ef\u6267\u884c\u4f46\u4e0d\u53ef\u8bfb\u201d\u65f6\uff0c\u8be5\u811a\u672c\u662f\u65e0\u6cd5\u6267\u884c\u7684\uff0c\u56e0\u4e3a\u201c\u89e3\u91ca\u5668\u8fd8\u9700\u8981\u8bfb\u53d6\u811a\u672c\u201d<\/p>\n<p><strong>\u77e5\u8bc6\u5ef6\u4f38<\/strong>\uff1a<\/p>\n<p>\u5982\u679c\u6743\u9650\u8bbe\u7f6e\u4e3a\u201c\u53ef\u6267\u884c\u4f46\u4e0d\u53ef\u8bfb\u201d\u7684\u5bf9\u8c61\u4e0d\u662f\u811a\u672c\uff0c\u800c\u662f\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u6b64\u65f6\u8be5\u4e8c\u8fdb\u5236\u6587\u4ef6\u662f\u53ef\u6267\u884c\u7684\u3002<\/p>\n<h1>\u5c06JDK\u7684bin\u76ee\u5f55\u4e0b\u7684java\u6587\u4ef6\u8bbe\u7f6e\u6743\u9650\u4e3a\u4ec5\u53ef\u6267\u884c\uff0c\u5b9e\u9645\u53d1\u73b0\u662f\u53ef\u6267\u884c\u7684\uff1b<\/h1>\n<pre><code class=\"language-bash\">[admin@xxx bin]$ ll java\n---x--x--x 1 10 143 7734 Dec 13  2016 java\n[admin@xxx bin]$ java -version\njava version &quot;1.8.0_121&quot;\nJava(TM) SE Runtime Environment (build 1.8.0_121-b13)\nJava HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)<\/code><\/pre>\n<blockquote>\n<p>\u8f6c\u8f7d\u81f3\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/zxiaofan.blog.csdn.net\/article\/details\/109567862\">https:\/\/zxiaofan.blog.csdn.net\/article\/details\/109567862<\/a><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8ff0 \u672c\u6587\u5c06\u6a21\u62df\u751f\u4ea7\u73af\u5883\uff0c\u6784\u9020\u5927\u91cf\u6d4b\u8bd5\u6570\u636e\uff0c\u5e76\u5b8c\u6210\u9ad8\u6548\u5b89\u5168\u7684\u6570\u636e\u5bfc\u5165\u3001\u6570\u636e\u5bfc\u51fa\u3001\u6570\u636e\u5220\u9664\u3002 \u4f17\u6240\u5468\u77e5\uff0cRedi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-2080","post","type-post","status-publish","format-standard","hentry","category-redis"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/2080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=2080"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/2080\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=2080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=2080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=2080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}