{"id":1995,"date":"2023-04-01T11:28:39","date_gmt":"2023-04-01T03:28:39","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1995"},"modified":"2023-04-22T07:40:12","modified_gmt":"2023-04-21T23:40:12","slug":"playing-redis-how-to-efficiently-access-massive-data-in-redis","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/04\/01\/playing-redis-how-to-efficiently-access-massive-data-in-redis\/","title":{"rendered":"\u73a9\u8f6cRedis &#8211; \u5982\u4f55\u9ad8\u6548\u8bbf\u95eeRedis\u4e2d\u7684\u6d77\u91cf\u6570\u636e"},"content":{"rendered":"<h2>\u524d\u8a00<\/h2>\n<p>Redis\u4ee5\u9ad8\u6027\u80fd\u8457\u79f0\uff0c\u4f46\u6027\u80fd\u518d\u597d\uff0c\u5728\u9762\u5bf9\u6d77\u91cf\u6570\u636e\u65f6\uff0c\u82e5\u4e0d\u6b63\u786e\u7684\u4f7f\u7528\uff0c\u4e5f\u7ec8\u5c06\u4f1a\u6709\u6027\u80fd\u74f6\u9888\uff0c\u751a\u81f3\u9020\u6210\u670d\u52a1\u5b95\u673a\u3002<\/p>\n<p>\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f60\u662f\u5426\u4f1a\u6709\u4ee5\u4e0b\u7591\u95ee\uff1f<\/p>\n<p><!-- more --><\/p>\n<ul>\n<li>\u5982\u4f55\u8bbf\u95eeRedis\u4e2d\u7684\u6d77\u91cf\u6570\u636e\uff0c\u5374\u4e0d\u5f71\u54cd\u5176\u4ed6\u8bf7\u6c42\u8bbf\u95eeRedis\uff1f<\/li>\n<li>Redis\u4e2d\u6709\u767e\u4e07\/\u5343\u4e07\u6570\u636e\uff0c\u5982\u4f55\u9ad8\u6548\u8bbf\u95ee\uff1f<\/li>\n<li>Redis\u4e2d\u6570\u636e\u91cf\u592a\u5927\uff0c\u5982\u4f55\u65e2\u4fdd\u8bc1\u5feb\u901f\u8bbf\u95ee\uff0c\u53c8\u4e0d\u81f3\u4e8e\u4f7f\u670d\u52a1\u5b95\u673a\uff1f<\/li>\n<\/ul>\n<h2>\u601d\u8003<\/h2>\n<p><strong>Q1\uff1a\u4e3a\u4ec0\u4e48Redis\u4e2d\u7684\u6570\u636e\u91cf\u5f88\u5927\u65f6\uff0c\u67d0\u4e9b\u6570\u636e\u64cd\u4f5c\u4f1a\u5bfc\u81f4Redis\u5361\u987f\uff0c\u751a\u81f3\u5b95\u673a\uff1f<\/strong><\/p>\n<p>A1\uff1aRedis\u662f\u5355\u7ebf\u7a0b\u670d\u52a1\uff0c\u6240\u6709\u6307\u4ee4\u90fd\u662f\u987a\u5e8f\u6267\u884c\uff0c\u5f53\u67d0\u4e00\u6307\u4ee4\u8017\u65f6\u5f88\u957f\u65f6\uff0c\u5c31\u4f1a\u963b\u585e\u540e\u7eed\u7684\u6307\u4ee4\u6267\u884c\u3002\u5f53\u88ab\u79ef\u538b\u7684\u6307\u4ee4\u8d8a\u6765\u8d8a\u591a\u65f6\uff0cRedis\u670d\u52a1\u5360\u7528CPU\u5c06\u4e0d\u65ad\u5347\u9ad8\uff0c\u6700\u7ec8\u5bfc\u81f4Redis\u5b9e\u4f8b\u5d29\u6e83\u751a\u81f3\u670d\u52a1\u5668\u5b95\u673a\u3002<\/p>\n<p><strong>Q2\uff1a\u5229\u7528\u4e07\u80fd\u7684keys\u547d\u4ee4\u67e5\u8be2\u4efb\u4f55\u60f3\u67e5\u7684\u6570\u636e\uff1f<\/strong><\/p>\n<p>A2\uff1a\u81ea\u5df1\u7535\u8111\u51e0\u4e07\u6761\u6570\u636e\u73a9\u73a9\u5c31\u597d\u4e86\uff0c\u7ebf\u4e0a\u4f7f\u7528keys\u547d\u4ee4\uff0cExcuse me\uff1f\u4f60\u60f3\u5377\u94fa\u76d6\u8d70\u4eba\u4e86\u5427\u3002<\/p>\n<p>\u67d0\u516c\u53f8php\u5de5\u7a0b\u5e08\u6267\u884c<code>redis keys *<\/code>\u5bfc\u81f4\u6570\u636e\u5e93\u5b95\u673a\uff01 \u6280\u672f\u90e8\u53d1\u751f2\u8d77\u672c\u5e74\u5ea6PO\u7ea7\u7279\u5927\u4e8b\u6545\uff0c\u9020\u6210\u516c\u53f8\u8d44\u91d1\u635f\u5931400\u4e07\u3002\u8fd9\u6761\u65b0\u95fb\u8bb0\u5fc6\u72b9\u65b0\uff0c\u8b66\u949f\u957f\u9e23\uff01<\/p>\n<p><strong>Q3\uff1aRedis\u4e2d\u6d77\u91cf\u6570\u636e\u7684\u6b63\u786e\u64cd\u4f5c\u65b9\u5f0f<\/strong><\/p>\n<p>A3\uff1a\u5229\u7528SCAN\u7cfb\u5217\u547d\u4ee4\uff08SCAN\u3001SSCAN\u3001HSCAN\u3001ZSCAN\uff09\u5b8c\u6210\u6570\u636e\u8fed\u4ee3\u3002<\/p>\n<h2>SCAN\u7cfb\u5217\u547d\u4ee4\u8be6\u89e3<\/h2>\n<p>SCAN\u7cfb\u5217\u547d\u4ee4\uff0c\u5e76\u4e0d\u5355\u7eaf\u6307\u4ee3SCAN\u547d\u4ee4\uff0c\u8fd8\u5305\u542b<code>SSCAN<\/code>\u3001<code>HSCAN<\/code>\u3001<code>ZSCAN<\/code>\uff0c\u6bcf\u79cd\u547d\u4ee4\u64cd\u4f5c\u5bf9\u8c61\u662f\u6709\u533a\u522b\u7684\uff0c\u4f46\u7528\u6cd5\u53ca\u529f\u80fd\u57fa\u672c\u76f8\u540c<\/p>\n<h3>SCAN\u7cfb\u5217\u547d\u4ee4\u5bf9\u6bd4\u5206\u6790<\/h3>\n<ul>\n<li><code>cursor<\/code>\uff1a\u8fed\u4ee3\u6e38\u6807<\/li>\n<li><code>MATCH<\/code>\uff1a\u6570\u636e\u5339\u914d\u6a21\u5f0f<\/li>\n<li><code>COUNT<\/code>\uff1a\u8fed\u4ee3\u8fd4\u56de\u6570\u91cf<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">\u547d\u4ee4<\/th>\n<th style=\"text-align: left;\">\u529f\u80fd<\/th>\n<th style=\"text-align: left;\">\u53c2\u6570<\/th>\n<th style=\"text-align: left;\">\u8fd4\u56de\u503c<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">SCAN<\/td>\n<td style=\"text-align: left;\">\u57fa\u4e8e\u6e38\u6807\u8fed\u4ee3DB<\/td>\n<td style=\"text-align: left;\">cursor [MATCH pattern] [COUNT count]<\/td>\n<td style=\"text-align: left;\">\u8fd4\u56de\u6570\u7ec4\uff0c\u7b2c1\u4e2a\u503c\u662f\u4e0b\u4e00\u6b21\u8fed\u4ee3\u7684\u6e38\u6807\uff08\u65e0\u7b26\u53f764bit\uff09\uff0c\u7b2c2\u4e2a\u503c\u662f\u5143\u7d20\u5217\u8868\uff08key\u5217\u8868\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">SSCAN<\/td>\n<td style=\"text-align: left;\">\u57fa\u4e8e\u6e38\u6807\u8fed\u4ee3Sets<\/td>\n<td style=\"text-align: left;\">key cursor [MATCH pattern] [COUNT count]<\/td>\n<td style=\"text-align: left;\">\u8fd4\u56de\u6570\u7ec4\uff0c\u7b2c1\u4e2a\u503c\u662f\u4e0b\u4e00\u6b21\u8fed\u4ee3\u7684\u6e38\u6807\uff08\u65e0\u7b26\u53f764bit\uff09\uff0c\u7b2c2\u4e2a\u503c\u662f\u5143\u7d20\u5217\u8868<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">HSCAN<\/td>\n<td style=\"text-align: left;\">\u57fa\u4e8e\u6e38\u6807\u8fed\u4ee3Hashes<\/td>\n<td style=\"text-align: left;\">key cursor [MATCH pattern] [COUNT count]<\/td>\n<td style=\"text-align: left;\">\u8fd4\u56de\u6570\u7ec4\uff0c\u7b2c2\u4e2a\u503c\u662ffield-value\u5217\u8868<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">ZSCAN<\/td>\n<td style=\"text-align: left;\">\u57fa\u4e8e\u6e38\u6807\u8fed\u4ee3ZSets<\/td>\n<td style=\"text-align: left;\">key cursor [MATCH pattern] [COUNT count]<\/td>\n<td style=\"text-align: left;\">\u8fd4\u56de\u6570\u7ec4\uff0c\u7b2c2\u4e2a\u503c\u662fmember-score\u5217\u8868<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>SCAN\u7cfb\u5217\u547d\u4ee4\u6ce8\u610f\u4e8b\u9879<\/h3>\n<ul>\n<li>SCAN\u7684\u53c2\u6570\u6ca1\u6709key\uff0c\u56e0\u4e3a\u5176\u8fed\u4ee3\u5bf9\u8c61\u662fDB\u5185\u6570\u636e<\/li>\n<li>\u8fd4\u56de\u503c\u90fd\u662f\u6570\u7ec4\uff0c\u7b2c\u4e00\u4e2a\u503c\u90fd\u662f\u4e0b\u4e00\u6b21\u8fed\u4ee3\u6e38\u6807<\/li>\n<li>\u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u6bcf\u6b21\u8bf7\u6c42\u90fd\u662fO(1)\uff0c\u5b8c\u6210\u6240\u6709\u8fed\u4ee3\u9700\u8981O(N)\uff0cN\u662f\u5143\u7d20\u6570\u91cf<\/li>\n<li>\u53ef\u7528\u7248\u672c\uff1aversion &gt;= 2.8.0<\/li>\n<\/ul>\n<h3>SCAN\u7cfb\u5217\u547d\u4ee4\u8be6\u89e3<\/h3>\n<h4>\u589e\u91cf\u8fed\u4ee3\uff0c\u53ef\u7528\u4e8e\u751f\u4ea7\u73af\u5883<\/h4>\n<p>\u5e76\u4e0d\u50cf<code>KEYS<\/code>\u3001<code>SMEMBERS<\/code>\u4e00\u6837\u662f\u5168\u91cf\u8fed\u4ee3\uff0c\u5bf9\u5927\u96c6\u5408\u6267\u884c\u65f6\u53ef\u80fd\u963b\u585e\u670d\u52a1\u5f88\u957f\u65f6\u95f4<\/p>\n<h4>\u4e0d\u4fdd\u8bc1\u51c6\u786e\u7ed3\u679c<\/h4>\n<p>SMEMBERS\u53ef\u4ee5\u8fd4\u56de\u6574\u4e2aset\u7684\u5143\u7d20\uff0c\u800cSCAN\u8fd9\u7c7b\u589e\u91cf\u8fed\u4ee3\u547d\u4ee4\u53ef\u80fd\u51fa\u73b0\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\u5143\u7d20\u88ab\u6539\u53d8\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u51c6\u786e\u7684\u8fd4\u56de\u7ed3\u679c<\/p>\n<h4>\u57fa\u4e8e\u6e38\u6807\u8fed\u4ee3<\/h4>\n<ul>\n<li>SCAN\u57fa\u4e8e\u6e38\u6807\u8fed\u4ee3\uff0c\u6bcf\u6b21\u8bf7\u6c42\u5c06\u8fd4\u56de\u4e0b\u4e00\u6b21\u9700\u8981\u4f7f\u7528\u7684\u6e38\u6807<\/li>\n<li>\u6e38\u6807cursor\u53ef\u4ee5\u6bd4DB\u5143\u7d20\u603b\u91cf\u5927\uff0c\u53ef\u4ee5\u4e3a\u8d1f\u6570<\/li>\n<li>\u9519\u8bef\u6e38\u6807\uff1a\u4f7f\u7528\u95f4\u65ad\uff08\u4e0d\u662f\u8fed\u4ee3\u8fd4\u56de\u7684\uff09\u3001\u8d1f\u6570\u3001\u8d85\u51fa\u8303\u56f4\u6216\u5176\u4ed6\u975e\u6cd5\u6e38\u6807\uff0c\u8fed\u4ee3\u4e0d\u4f1a\u62a5\u9519\uff0c\u53ef\u80fd\u4ea7\u751f\u672a\u5b9a\u4e49\u884c\u4e3a\uff08\u65e0\u6cd5\u4fdd\u8bc1\u51c6\u786e\u6027\uff09<\/li>\n<\/ul>\n<h4>\u8fed\u4ee3\u7ed3\u675f\u6807\u8bb0<\/h4>\n<ul>\n<li>SCAN\u8fd4\u56de\u7684\u6e38\u6807\u4e0d\u4e00\u5b9a\u9012\u589e\uff0c\u67d0\u6b21\u8fed\u4ee3\u8fd4\u56de\u7684\u5143\u7d20\u6570\u91cf\u53ef\u80fd\u4e3a0<\/li>\n<li>\u8fd4\u56de\u5143\u7d20\u5217\u8868\u4e3a\u7a7a\uff0c\u4e0d\u4ee3\u8868\u8fed\u4ee3\u7ed3\u675f<\/li>\n<li>\u4e00\u4e2a\u5b8c\u6574\u7684\u8fed\u4ee3\uff1aSCAN\u6e38\u6807\u4ece0\u5f00\u59cb\uff0c\u8fd4\u56de\u6e38\u6807\u4e3a0\u7ed3\u675f<\/li>\n<li>\u8fed\u4ee3\u72b6\u6001\u7531\u8fd4\u56de\u7684\u6e38\u6807\u63a7\u5236\u3002\u53ef\u4ee5\u5e76\u53d1\u6267\u884c\u8fed\u4ee3\uff1b\u53ef\u968f\u65f6\u7ec8\u6b62\u8fed\u4ee3<\/li>\n<\/ul>\n<h4>\u8fed\u4ee3\u5b8c\u6574\u6027<\/h4>\n<ul>\n<li>\u904d\u5386\u5f00\u59cb\u5230\u904d\u5386\u7ed3\u675f\u4e00\u76f4\u5b58\u5728\u7684\u6570\u636e\uff0c\u4e00\u5b9a\u80fd\u88ab\u8fed\u4ee3\u8fd4\u56de<\/li>\n<li>\u540c\u4e00\u4e2a\u5143\u7d20\u53ef\u80fd\u8fd4\u56de\u591a\u6b21\uff0c\u6570\u636e\u53bb\u91cd\u5e94\u7531\u5e94\u7528\u7a0b\u5e8f\u5b8c\u6210<\/li>\n<li>\u5728\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\u589e\u5220\u7684\u5143\u7d20\uff0c\u53ef\u80fd\u8fd4\u56de\uff0c\u53ef\u80fd\u4e0d\u8fd4\u56de<\/li>\n<li>\u5f53\u6570\u636e\u7c7b\u578b\u662fsets\uff08\u7531integer\u7ec4\u6210\uff09\u3001hashes\u3001sorted sets\u4e14\u96c6\u5408\u8f83\u5c0f\u65f6\uff0c\u8fed\u4ee3\u5c06\u8fd4\u56de\u6574\u4e2a\u96c6\u5408\u7684\u6570\u636e\uff0c\u4e0ecount\u65e0\u5173<\/li>\n<li>\u8fed\u4ee3\u7ed3\u675f\u4fdd\u8bc1\uff1a\u5143\u7d20\u6dfb\u52a0\u901f\u7387\u5c0f\u4e8e\u8fed\u4ee3\u901f\u7387<\/li>\n<\/ul>\n<h4>why\u6709\u65f6\u8fed\u4ee3\u76f4\u63a5\u8fd4\u56de\u6574\u4e2a\u96c6\u5408<\/h4>\n<ul>\n<li>\u5e95\u5c42\u6570\u636e\u7ed3\u6784\u662fhash\u65f6\uff0c\u5982\u679c\u6570\u636e\u91cf\u8f83\u5c0f\uff0cRedis\u6709\u5185\u5b58\u4f18\u5316\u7b56\u7565\uff0c\u4f1a\u4f7f\u7528\u7d27\u51d1\u7684\u538b\u7f29\u7f16\u7801\u3002\u6b64\u65f6SCAN\u64cd\u4f5c\u5e76\u4e0d\u662f\u8fd4\u56de\u6709\u610f\u4e49\u7684\u6e38\u6807\uff0c\u800c\u662f\u8fed\u4ee3\u6574\u4e2a\u96c6\u5408<\/li>\n<li>\u6570\u636e\u91cf\u8f83\u5c0f\uff1f\u53c2\u89c1\u5b98\u65b9memory-optimization\uff08\u5185\u5b58\u4f18\u5316\uff09\u8bf4\u660e<\/li>\n<\/ul>\n<h4>\u53c2\u6570count\u8bf4\u660e<\/h4>\n<ul>\n<li>count\u9ed8\u8ba4\u503c\u662f10<\/li>\n<li>\u6570\u636e\u96c6\u8f83\u5927\u65f6\uff0c\u5982\u679c\u6ca1\u6709\u4f7f\u7528match\uff0c\u8fd4\u56de\u5143\u7d20\u4e3acount\u6216\u6bd4count\u7565\u5927<\/li>\n<li>\u6bcf\u6b21\u8fed\u4ee3\u7684count\u53c2\u6570\u503c\u53ef\u4ee5\u4e0d\u540c\uff0c\u53ea\u8981\u4f7f\u7528\u4e0a\u6b21\u8fed\u4ee3\u8fd4\u56de\u7684\u6e38\u6807\u5373\u53ef<\/li>\n<\/ul>\n<h4>\u53c2\u6570match\u8bf4\u660e<\/h4>\n<ul>\n<li>\u548ckeys\u7684pattern\u7c7b\u4f3c<\/li>\n<li>MATCH\u64cd\u4f5c\u662f\u5728\u68c0\u7d22\u51fa\u6570\u636e\u5230\u8fd4\u56de\u5143\u7d20\u524d\u7684\u671f\u95f4\u6267\u884c\uff0c\u6240\u4ee5\u5982\u679c\u88ab\u5339\u914d\u7684\u5143\u7d20\u8f83\u5c11\uff0c\u90a3\u4e48\u53ef\u80fd\u591a\u6b21\u8fed\u4ee3\u8fd4\u56de\u7684\u5143\u7d20\u5217\u8868\u5747\u4e3a\u7a7a<\/li>\n<\/ul>\n<h2>SCAN\u7cfb\u5217\u547d\u4ee4\u793a\u4f8b<\/h2>\n<h3>SCAN\u793a\u4f8b<\/h3>\n<pre><code class=\"language-bash\">\/\/ SCAN\u8fd4\u56de\u6570\u636e\u4e3a\u7a7a\u5c31\u662f\u8fed\u4ee3\u7ed3\u675f\u4e86\u5417\n127.0.0.1:6378&gt; keys k?\n1) &quot;k1&quot;\n2) &quot;k2&quot;\n127.0.0.1:6378&gt; SCAN 0 MATCH k?\n1) &quot;88&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 88 MATCH k?\n1) &quot;34&quot;\n2) 1) &quot;k1&quot;\n127.0.0.1:6378&gt; SCAN 34 MATCH k?\n1) &quot;122&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 122 MATCH k?\n1) &quot;14&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 14 MATCH k?\n1) &quot;33&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 33 MATCH k?\n1) &quot;53&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 53 MATCH k?\n1) &quot;93&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 93 MATCH k?\n1) &quot;107&quot;\n2) 1) &quot;k2&quot;\n127.0.0.1:6378&gt; SCAN 107 MATCH k?\n1) &quot;79&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 79 MATCH k?\n1) &quot;0&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; <\/code><\/pre>\n<p>\u770b\u4e0a\u8ff0\u793a\u4f8b\uff0c\u5339\u914d<code>k?<\/code>\u7684\u6570\u636e\u5b9e\u9645\u67092\u6761<code>k1<\/code>\u3001<code>k2<\/code>\uff0c\u5728\u6574\u4e2a\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\uff0c\u591a\u6b21\u8fd4\u56de\u6570\u636e\u4e3a\u7a7a\uff0c\u4f46\u662f\u8fed\u4ee3\u672a\u66fe\u7ed3\u675f\uff08\u56e0\u4e3a<code>k1<\/code>\u3001<code>k2<\/code>\u6ca1\u6709\u5168\u90e8\u8fed\u4ee3\u8fd4\u56de\uff09\u3002<\/p>\n<p>\u6240\u4ee5\uff0c\u53ea\u6709\u5f53\u6e38\u6807\u8fd4\u56de\u4e3a0\u65f6\uff0c\u624d\u80fd\u8bf4\u660e\u8fed\u4ee3\u7ed3\u675f\u4e86\u3002<\/p>\n<h3>SSCAN\u793a\u4f8b<\/h3>\n<pre><code class=\"language-bash\">\/\/ SSCAN\u793a\u4f8b\n127.0.0.1:6378&gt; SADD sscantest sscantest:1 1 sscantest:2 2 sscantest:3 3 sscantest:4 4 sscantest:1a 1a sscantest:2a 2a sscantest:1ab 1ab sscantest:a1 a1 sscantest:aa1 aa1 \n(integer) 0\n\/\/ MATCH ?\uff1a\u65e0\u5339\u914d\u6570\u636e\n127.0.0.1:6378&gt; SSCAN sscantest 0 MATCH ? COUNT 1\n1) &quot;24&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SSCAN sscantest 24 MATCH ? COUNT 1\n1) &quot;20&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SSCAN sscantest 0 MATCH * COUNT 1\n1) &quot;24&quot;\n2) 1) &quot;sscantest:3&quot;\n   2) &quot;sscantest:2a&quot;\n127.0.0.1:6378&gt; SSCAN sscantest 24 MATCH * COUNT 1\n1) &quot;20&quot;\n2) 1) &quot;a1&quot;<\/code><\/pre>\n<h3>HSCAN\u793a\u4f8b<\/h3>\n<pre><code class=\"language-bash\">\/\/ HSCAN\u793a\u4f8b\n127.0.0.1:6378&gt; HMSET hscantest hscantest:1 1 hscantest:2 2 hscantest:3 3 hscantest:4 4 hscantest:1a 1a hscantest:2a 2a hscantest:1ab 1ab hscantest:a1 a1 hscantest:aa1 aa1 \nOK\n127.0.0.1:6378&gt; HSCAN hscantest 0 MATCH hscantest*a COUNT 20\n1) &quot;0&quot;\n2) 1) &quot;hscantest:1a&quot;\n   2) &quot;1a&quot;\n   3) &quot;hscantest:2a&quot;\n   4) &quot;2a&quot;\n127.0.0.1:6378&gt; HSCAN hscantest 0 MATCH hscantest*a COUNT 2\n1) &quot;0&quot;\n2) 1) &quot;hscantest:1a&quot;\n   2) &quot;1a&quot;\n   3) &quot;hscantest:2a&quot;\n   4) &quot;2a&quot;\n127.0.0.1:6378&gt; <\/code><\/pre>\n<p>\u4eceHSCAN\u793a\u4f8b\u53ef\u4ee5\u770b\u51fa\uff0c\u5373\u4f7fcount\u53c2\u6570\u4e3a2\uff0c\u4e5f\u8fd4\u56de\u4e86\u6240\u6709\u5339\u914d\u7684\u7ed3\u679c\u3002\u8fd9\u5c31\u662f\u5148\u524d\u63d0\u5230\u7684\uff0c\u6570\u636e\u91cf\u8f83\u5c0f\u65f6\uff0c\u76f4\u63a5\u8fd4\u56de\u6240\u6709\u6570\u636e\u3002<\/p>\n<h3>ZSCAN\u793a\u4f8b<\/h3>\n<pre><code class=\"language-bash\">\/\/ ZSCAN\u793a\u4f8b\n\/\/ \u3010\u79fb\u9664\u3011\u5e76\u5f39\u51facount\u4e2a\u5206\u6570\u6700\u5927\u7684\u5143\u7d20\uff0ccount\u9ed8\u8ba4\u4e3a1\n127.0.0.1:6378&gt; ZPOPMAX zscantest 20\n 1) &quot;sscantest:1ab&quot;\n 2) &quot;6&quot;\n 3) &quot;sscantest:2a&quot;\n 4) &quot;5&quot;\n 5) &quot;sscantest:1a&quot;\n 6) &quot;4&quot;\n 7) &quot;sscantest:3&quot;\n 8) &quot;3&quot;\n 9) &quot;zscantest:1&quot;\n10) &quot;2&quot;\n11) &quot;sscantest:2&quot;\n12) &quot;2&quot;\n13) &quot;test1&quot;\n14) &quot;1&quot;\n15) &quot;sscantest:1&quot;\n16) &quot;1&quot;\n127.0.0.1:6378&gt; ZPOPMAX zscantest 20\n(empty list or set)\n127.0.0.1:6378&gt; ZADD zscantest 1 zscantest:1 2 zscantest:2 3 zscantest:3 4 zscantest:1a 5 zscantest:2a 6 zscantest:1ab 7 zscantest:a1 8 zscantest:aa1\n(integer) 8\n\/\/ NX\uff1a\u4e0d\u5b58\u5728\u624d\u6dfb\u52a0\uff1bCH\uff1a\u8fd4\u56de\u88ab\u6539\u53d8\uff08\u542b\u65b0\u589e\uff09\u7684\u5143\u7d20\u4e2a\u6570\n127.0.0.1:6378&gt; ZADD zscantest NX CH 1 test1 2 zscantest:1\n(integer) 1\n127.0.0.1:6378&gt; ZSCAN zscantest 0 MATCH *a COUNT 5\n1) &quot;0&quot;\n2) 1) &quot;zscantest:1a&quot;\n   2) &quot;4&quot;\n   3) &quot;zscantest:2a&quot;\n   4) &quot;5&quot;\n127.0.0.1:6378&gt; <\/code><\/pre>\n<h2>\u603b\u7ed3<\/h2>\n<h3>\u770b\u770b\u9762\u8bd5\u65f6\u4f60\u80fd\u7b54\u4e0a\u51e0\u4e2a\u95ee\u9898<\/h3>\n<ul>\n<li>SCAN\u8fed\u4ee3\u53ef\u4ee5\u5e76\u53d1\u5417\uff1f<\/li>\n<li>SCAN\u8fd4\u56de\u6570\u636e\u4e3a\u7a7a\u5c31\u662f\u8fed\u4ee3\u7ed3\u675f\u4e86\u5417\uff1f<\/li>\n<li>\u5982\u679c\u9996\u6b21\u8fed\u4ee3cursor\u53c2\u6570\u4e0d\u662f0\uff0c\u80fd\u5b9e\u73b0\u5b8c\u6574\u8fed\u4ee3\u5417\uff1f<\/li>\n<li>\u53ef\u4ee5\u4e25\u683c\u63a7\u5236\u6bcf\u6b21\u8fed\u4ee3\u8fd4\u56de\u7684\u6570\u636e\u91cf\u5417\uff1f<\/li>\n<li>\u8fed\u4ee3\u8fd4\u56de\u7684\u6570\u636e\u4e00\u5b9a\u5b8c\u6574\u5417\uff1f<\/li>\n<li>\u4e3a\u4ec0\u4e48\u8fed\u4ee3\u8fd4\u56de\u7684\u5143\u7d20\u5217\u8868\u53ef\u80fd\u4e3a\u7a7a\uff1f<\/li>\n<\/ul>\n<h3>\u90e8\u5206\u95ee\u9898\u89e3\u7b54<\/h3>\n<h4>SCAN\u8fd4\u56de\u6570\u636e\u4e3a\u7a7a\u5c31\u662f\u8fed\u4ee3\u7ed3\u675f\u4e86\u5417<\/h4>\n<p>\u770b\u4e0a\u8ff0\u793a\u4f8b\uff0c\u5339\u914d<code>k?<\/code>\u7684\u6570\u636e\u5b9e\u9645\u67092\u6761<code>k1<\/code>\u3001<code>k2<\/code>\uff0c\u5728\u6574\u4e2a\u8fed\u4ee3\u8fc7\u7a0b\u4e2d\uff0c\u591a\u6b21\u8fd4\u56de\u6570\u636e\u4e3a\u7a7a\uff0c\u4f46\u662f\u8fed\u4ee3\u672a\u66fe\u7ed3\u675f\uff08\u56e0\u4e3a<code>k1<\/code>\u3001<code>k2<\/code>\u6ca1\u6709\u5168\u90e8\u8fed\u4ee3\u8fd4\u56de\uff09\u3002<\/p>\n<p>\u6240\u4ee5\uff0c\u53ea\u6709\u5f53\u6e38\u6807\u8fd4\u56de\u4e3a0\u65f6\uff0c\u624d\u80fd\u8bf4\u660e\u8fed\u4ee3\u7ed3\u675f\u4e86\u3002<\/p>\n<h4>\u5982\u679c\u9996\u6b21\u8fed\u4ee3cursor\u53c2\u6570\u4e0d\u662f0\uff0c\u80fd\u5b9e\u73b0\u5b8c\u6574\u8fed\u4ee3\u5417\uff1f<\/h4>\n<pre><code class=\"language-bash\">\/\/ \u5982\u679c\u9996\u6b21\u8fed\u4ee3cursor\u53c2\u6570\u4e0d\u662f0\uff0c\u80fd\u5b9e\u73b0\u5b8c\u6574\u8fed\u4ee3\u5417\uff1f\n127.0.0.1:6378&gt; keys k?\n1) &quot;k1&quot;\n2) &quot;k2&quot;\n127.0.0.1:6378&gt; SCAN 66 MATCH k?\n1) &quot;122&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 122 MATCH k?\n1) &quot;14&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 14 MATCH k?\n1) &quot;33&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 33 MATCH k?\n1) &quot;53&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 53 MATCH k?\n1) &quot;93&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 93 MATCH k?\n1) &quot;107&quot;\n2) 1) &quot;k2&quot;\n127.0.0.1:6378&gt; SCAN 107 MATCH k?\n1) &quot;79&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; SCAN 79 MATCH k?\n1) &quot;0&quot;\n2) (empty list or set)\n127.0.0.1:6378&gt; <\/code><\/pre>\n<p>\u770b\u4e0a\u8ff0\u793a\u4f8b\uff0c\u5339\u914d<code>k?<\/code>\u7684\u6570\u636e\u5b9e\u9645\u67092\u6761<code>k1<\/code>\u3001<code>k2<\/code>\uff0c\u5f53\u7b2c\u4e00\u6b21SCAN\u4f7f\u7528cursor\u4e3a66\uff0c\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\u7ecf\u8fc7\u591a\u6b21\u8fed\u4ee3\uff0c\u6e38\u6807\u8fd4\u56de\u4e3a0\u65f6\uff0c<code>k1<\/code>\u4e00\u76f4\u672a\u66fe\u88ab\u8fed\u4ee3\u8fd4\u56de\u3002<\/p>\n<p>\u6240\u4ee5\uff0c\u5982\u679c\u9996\u6b21\u8fed\u4ee3cursor\u53c2\u6570\u4e0d\u662f0\uff0c\u4e0d\u80fd\u5b9e\u73b0\u5b8c\u6574\u8fed\u4ee3\u3002<\/p>\n<p><strong>\u5b8c\u6574\u8fed\u4ee3\u5fc5\u987b\u662f\u6e38\u6807\u4ece0\u5f00\u59cb\uff0c\u6e38\u6807\u52300\u7ed3\u675f<\/strong>\u3002<\/p>\n<blockquote>\n<p>\u8f6c\u8f7d\u81f3\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/my.oschina.net\/zxiaofan\/blog\/3130530\">https:\/\/my.oschina.net\/zxiaofan\/blog\/3130530<\/a><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 Redis\u4ee5\u9ad8\u6027\u80fd\u8457\u79f0\uff0c\u4f46\u6027\u80fd\u518d\u597d\uff0c\u5728\u9762\u5bf9\u6d77\u91cf\u6570\u636e\u65f6\uff0c\u82e5\u4e0d\u6b63\u786e\u7684\u4f7f\u7528\uff0c\u4e5f\u7ec8\u5c06\u4f1a\u6709\u6027\u80fd\u74f6\u9888\uff0c\u751a\u81f3\u9020\u6210\u670d\u52a1\u5b95 [&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-1995","post","type-post","status-publish","format-standard","hentry","category-redis"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1995","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=1995"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1995\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}