{"id":1172,"date":"2025-05-22T18:14:50","date_gmt":"2025-05-22T10:14:50","guid":{"rendered":"https:\/\/eve2333.top\/?p=1172"},"modified":"2025-06-16T13:14:20","modified_gmt":"2025-06-16T05:14:20","slug":"saas%e7%9f%ad%e9%93%be%e6%8e%a5%e7%b3%bb%e7%bb%9f-%e6%96%b0%e6%89%8b%e4%bb%8e%e9%9b%b6%e5%ad%a6%e4%b9%a0-3","status":"publish","type":"post","link":"https:\/\/eve2333.top\/?p=1172","title":{"rendered":"SaaS\u77ed\u94fe\u63a5\u7cfb\u7edf-\u65b0\u624b\u4ece\u96f6\u5b66\u4e60 3"},"content":{"rendered":"\n<p>\u200b<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6d77\u91cf\u7528\u6237\u5982\u4f55\u5206\u5e93\u5206\u8868<\/h3>\n\n\n\n<p>\u5176\u5b9e\u662f\u5206\u4e3a3\u79cd\u7684\uff1a\u5206\u5e93\uff0c\u5206\u8868\uff0c\u5206\u5e93\u5206\u8868\uff1b<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"PS7jl\">\u4e3a\u4ec0\u4e48\u8981\u5206\u5e93\u5206\u8868\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6570\u636e\u91cf\u5e9e\u5927\u3002<\/li>\n\n\n\n<li>\u67e5\u8be2\u6027\u80fd\u7f13\u6162\uff0c\u4e4b\u524d\u53ef\u80fd\u662f 20ms\uff0c\u540e\u7eed\u968f\u7740\u6570\u636e\u91cf\u7684\u589e\u957f\uff0c\u67e5\u8be2\u65f6\u95f4\u5448\u6307\u6570\u589e\u957f\u3002<\/li>\n\n\n\n<li>\u6570\u636e\u5e93\u8fde\u63a5\u4e0d\u591f\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Up58G\">\u4ec0\u4e48\u662f\u5206\u5e93\u5206\u8868\uff1f<\/h3>\n\n\n\n<p id=\"u17aef05f\">\u5206\u5e93\u548c\u5206\u8868\u6709\u4e24\u79cd\u6a21\u5f0f\uff0c\u5782\u76f4\u548c\u6c34\u5e73\u3002<\/p>\n\n\n\n<p id=\"u46c3df5b\">\u5206\u5e93\u4e24\u79cd\u6a21\u5f0f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5782\u76f4\u5206\u5e93\uff1a\u7535\u5546\u6570\u636e\u5e93\u62c6\u5206\u4e3a\u7528\u6237\u3001\u8ba2\u5355\u3001\u5546\u54c1\u3001\u4ea4\u6613\u7b49\u6570\u636e\u5e93\u3002<\/li>\n<\/ul>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"370\" src=\"https:\/\/i-blog.csdnimg.cn\/img_convert\/7b989e8d0753bf14a4ee82de8411503f.png\" width=\"668\">\u200b<img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/17e015b1-dc97-487f-8a31-3d63a9750a6e\" width=\"15\">\u7f16\u8f91<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6c34\u5e73\u5206\u5e93\uff1a\u7528\u6237\u6570\u636e\u5e93\uff0c\u62c6\u5206\u4e3a\u591a\u4e2a\uff0c\u6bd4\u5982User_DB_0 - x\u3002<\/li>\n<\/ul>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"433\" src=\"https:\/\/i-blog.csdnimg.cn\/img_convert\/8c01fa14e325752160efdac151899f79.png\" width=\"666\">\u200b<img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/36f01aaa-2e59-4b13-8f49-fb6e5eb507da\" width=\"15\">\u7f16\u8f91<\/p>\n\n\n\n<p id=\"ue55d265a\">\u5206\u8868\u4e24\u79cd\u6a21\u5f0f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5782\u76f4\u5206\u8868\uff1a\u5c06\u6570\u636e\u5e93\u8868\u6309\u7167\u4e1a\u52a1\u7ef4\u5ea6\u8fdb\u884c\u62c6\u5206\uff0c\u5c06\u4e0d\u5e38\u7528\u7684\u4fe1\u606f\u653e\u5230\u4e00\u4e2a\u6269\u5c55\u8868\u3002<\/li>\n<\/ul>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"368\" src=\"https:\/\/i-blog.csdnimg.cn\/img_convert\/eb0c6ce9fcf99e9c90703638d2897669.png\" width=\"668\">\u200b<img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/b1328057-60cc-4da7-89e5-519d4dc921ba\" width=\"15\">\u7f16\u8f91<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6c34\u5e73\u5206\u8868\uff1a\u5c06\u7528\u6237\u8868\u6c34\u5e73\u62c6\u5206\uff0c\u5c55\u73b0\u5f62\u5f0f\u5c31\u662f User_Table_0 - x\u3002<\/li>\n<\/ul>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"514\" src=\"https:\/\/i-blog.csdnimg.cn\/img_convert\/b830a682f02e0788d17044e19eedf2ee.png\" width=\"669\">\u200b<img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/6d25ca45-4130-4065-9a02-9f4c839b482f\" width=\"15\">\u7f16\u8f91<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c12rx\">\u4ec0\u4e48\u573a\u666f\u4e0b\u5206\u5e93\u5206\u8868\uff1f<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"tk4er\">1. \u4ec0\u4e48\u573a\u666f\u4e0b\u5206\u8868\uff1f<\/h4>\n\n\n\n<p id=\"ud2c79ce4\">\u6570\u636e\u91cf\u8fc7\u5927\u6216\u8005\u6570\u636e\u5e93\u8868\u5bf9\u5e94\u7684\u78c1\u76d8\u6587\u4ef6\u8fc7\u5927\u3002\uff08\u6bd4\u5982\u5b57\u6bb5\u8fc7\u591a\uff0ctext\u6587\u4ef6\u5360\u6bd4\u8f83\u5927\u8fd9\u79cd\u7c7b\u578b\u7684\u6570\u636e\uff0c\u603b\u7684\u6765\u8bf4\u5c31\u662f\u6570\u636e\u91cf\u8f83\u5927\u7684\u60c5\u51b5\u4e0b\uff09\u65e5\u5e38\u4e1a\u52a1\u4e2d\u9700\u8981\u5bf9\u78c1\u76d8\u8fdb\u884c\u6bcf\u5929\u5907\u4efd\uff0c\u78c1\u76d8\u6587\u4ef6\u8fc7\u5927\u5f71\u54cd\u5907\u4efd\u901f\u5ea6\uff1a\u6570\u636e\u91cf\u8fc7\u5927\uff0c\u7d22\u5f15B+\u6811\u7684\u5c42\u7ea7\u53d8\u9ad8\uff0c\u4f1a\u5bfc\u81f4IO\u589e\u52a0\u3001\u6570\u636e\u67e5\u627e\u53d8\u6162\u3002<br>\u78c1\u76d8\u6587\u4ef6\u8fc7\u5927\u4e0d\u5229\u4e8e\u5907\u4efd\uff0c\u4e14\u9047\u5230\u635f\u4f24\u65f6\u5bf9\u6062\u590d\u8fc7\u7a0b\u4ea7\u751f\u5f71\u54cd\u3002<\/p>\n\n\n\n<p>\u8fd8\u6709\u4e00\u4e2a\u56e0\u7d20\u662f\u4e1a\u52a1\u7684\u589e\u957f\u91cf\u4ee5\u53ca\u5386\u53f2\u6570\u91cf\uff0c\u4f60\u5f53\u524d\u6709\u4e00\u4e2a4\uff0c000\u4e07\u5de6\u53f3\u7684\u4e00\u5f20\u8868\uff0c\u4f46\u662f\u4ed6\u6bcf\u4e2a\u6708\u8fd8\u6309\u7167500\u4e07\u751a\u81f31\uff0c000\u4e07\u7684\u8fd9\u79cd\u6570\u636e\u589e\u957f\u91cf\uff0c\u56e0\u4e3a\u4ed6\u9000\u65e9\u4f1a\u4e0a\u4ebf<\/p>\n\n\n\n<p id=\"u6d09513b\">Q\uff1a\u591a\u5c11\u6570\u636e\u5206\u8868\uff1f\u5b9e\u9645\u4e0a\u5f88\u96be\u56de\u7b54\uff0c\u4f60\u53ef\u4ee5\u8bf41000w\uff0c2000w\uff0c\u4f46\u662f\u8fd9\u6d89\u53ca\u5230\u4f60\u4e00\u4e2a\u8868\u5b57\u6bb5\u7684\u4e00\u4e2a\u5173\u7cfb\uff0c\u4f60\u770b\u5047\u5982\u8bf4\u6211\u4eec\u8fd9\u91cc\u9762\u5c31\u8fd9\u51e0\u4e2a\u5b57\u6bb5id\uff0cusername\uff0cpassword\uff0cphone\uff0ccreatetime\uff0cupdatetime\u8fd8\u6709flag\uff0c5000w\u90fd\u4e0d\u8981\u5206\u8868\uff1a<\/p>\n\n\n\n<p id=\"ua7a30a97\">\u8981\u6839\u636e\u8868\u5b57\u6bb5\u6570\u91cf\u3001\u8868\u4e2d\u6570\u636e\u6570\u91cf\u4ee5\u53ca\u662f\u5426\u5b58\u5728\u5927\u91cftext\u5b57\u6bb5\u6765\u7efc\u5408\u8003\u8651\uff0c\u53d6\u51b3\u4e8e\u5b57\u6bb5\u7684\u6570\u91cf\u3002\u5927\u7684\u5b57\u6bb5\uff08\u4f8b\u5982\u4e2a\u4eba\u7b80\u4ecb\u8fd9\u79cd\uff09\u4e0d\u80fd\u653e\u5230\u7528\u6237\u4e3b\u8868\u3002\u8fd8\u9700\u8981\u8003\u8651\u5230\u6570\u91cf\u7684\u81ea\u589e\uff0c\u53ef\u80fd\u8981\u5206\u8868\uff0c<br>\u5206\u8868\u4e0d\u5149\u8ddf\u6570\u636e\u91cf\u6709\u5173\u8fd8\u6d89\u53ca\u5230\u8868\u5b57\u6bb5\u6570\u91cf\u3001\u5b57\u6bb5\u957f\u5ea6\u3001\u8868\u4e2d\u6d89\u53ca\u591a\u5c11text\u7c7b\u578b\u5b57\u6bb5\u3002\u4e00\u822c\u5782\u76f4\u5206\u8868\u65f6\uff0c\u4e3b\u8868\u4e2d\u4e0d\u5141\u8bb8\u6709\u5927\u7684text\u7c7b\u578b\u5b57\u6bb5\uff0c\u8981\u653e\u5230\u6269\u5c55\u8868\u4e2d\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"UG8mm\">2. \u4ec0\u4e48\u60c5\u51b5\u4e0b\u5206\u5e93\uff1f<\/h4>\n\n\n\n<p id=\"u9b212e12\">\u8fde\u63a5\u4e0d\u591f\u7528\u3002<\/p>\n\n\n\n<p id=\"u4ce43aa6\">MySQL Server \u5047\u8bbe\u652f\u6301 4000 \u4e2a\u6570\u636e\u5e93\u8fde\u63a5\u3002\u4e00\u4e2a\u670d\u52a1\u8fde\u63a5\u6c60\u6700\u5927 10 \u4e2a\uff0c\u5047\u8bbe\u6709 40 \u4e2a\u8282\u70b9\u3002\u5df2\u7ecf\u5360\u7528\u4e86 400 \u4e2a\u6570\u636e\u5e93\u8fde\u63a5\u3002<\/p>\n\n\n\n<p id=\"ue09ffc56\">\u7c7b\u4f3c\u4e8e\u8fd9\u79cd\u670d\u52a1\uff0c\u670910\u4e2a\uff0c\u90a3\u4f60\u8fd9\u4e2a MySQL Server \u8fde\u63a5\u5c31\u4e0d\u591f\u4e86\u3002<\/p>\n\n\n\n<p id=\"u117c86c0\"><strong>\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4e0d\u4e00\u5b9a\u76f4\u63a5\u5206\u5e93\u3002\u53ef\u4ee5\u505a\u4e00\u4e0b\u8bfb\u5199\u5206\u79bb\uff0c\u5728\u7269\u7406\u4e0a\u4e5f\u662f\u628a\u4e00\u4e2a\u5e93\u53d8\u6210\u4e86\u591a\u4e2a\u5e93\uff0c\u4f46\u662f\u4e0d\u6d89\u53ca\u4e1a\u52a1\u4e0a\u7684\u62c6\u5206\uff0c\u4e3b\u8981\u505a\u4e3b\u4ece\u540c\u6b65\u5e76\u914d\u4e2a\u591a\u6570\u636e\u6e90\u5373\u53ef\u3002<br>\u4e00\u822c\u60c5\u51b5\u8bfb\u5199\u5206\u79bb\u5c31\u591f\u7528\u4e86\uff0c\u4f46\u662f\u4e3b\u4ece\u540c\u6b65\u5b58\u5728\u4e00\u5b9a\u7684\u5ef6\u8fdf\uff0c\u4e0d\u80fd\u6ee1\u8db3\u8981\u6c42\u5f88\u9ad8\u7684\u4e1a\u52a1\u573a\u666f\u3002<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"CkIq1\">3. \u53c8\u5206\u5e93\u53c8\u5206\u8868\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u5e76\u53d1\u5199\u5165\u6216\u67e5\u8be2\u573a\u666f\u3002\u67e5\u8be2\u4e00\u822c\u4f7f\u7528\u7f13\u5b58\uff0c\u5206\u5e93\u5206\u8868\u4e3b\u8981\u9762\u5bf9\u9ad8\u5e76\u53d1\u5199\u5165\u3002<\/li>\n\n\n\n<li>\u6570\u636e\u91cf\u5de8\u5927\u573a\u666f\u3002\u5c31\u662f\u968f\u7740\u6211\u4eec\u7684\u6570\u636e\u91cf\u7684\u4e00\u4e2a\u589e\u52a0\uff0c\u5355\u4e00\u7684\u6570\u636e\u5e93\u7684\u5b58\u50a8\u548c\u67e5\u8be2\u6027\u80fd\u53ef\u80fd\u4f1a\u9010\u6e10\u7684\u4e0b\u964d\uff1b\u6211\u4eec\u9996\u5148\u80af\u5b9a\u8981\u7ed3\u5408\u7d22\u5f15\uff0c\u5176\u6b21\u6309\u7167\u4e00\u5b9a\u7684\u89c4\u5219\u5c06\u6570\u636e\u5e93\u62c6\u5206\u5230\u591a\u4e2a\u8868\u4e2d\uff0c\u6216\u8005\u8bf4\u4f60\u5c31\u76f4\u63a5\u53bb\u5782\u76f4\u62c6\u5206\u628a\u4e00\u4e2a\u6570\u636e\u5e93\u8868\u7136\u540e\u62c6\u6210\u591a\u4e2a\u8fd9\u79cd\u8868\uff0c\u7136\u540e\u518d\u6309\u7167\u6211\u4eec\u90a3\u4e2a\u6c34\u5e73\u7684\u90a3\u79cd\u65b9\u5f0f\uff0c\u7136\u540e\u7ed9\u5b83\u518d\u62c6\u6210\u591a\u4e2a\u8fd9\u79cd\u6c34\u5e73\u5206\u7247\u8868<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BGkJZ\">\u6570\u636e\u5e93\u5206\u5e93\u5206\u8868\u6846\u67b6 ShardingSphere<\/h3>\n\n\n\n<p id=\"uab7c2281\">Sharding-JDBC\u3002<a href=\"https:\/\/shardingsphere.apache.org\/document\/current\/cn\/overview\/#shardingsphere-jdbc-%E7%8B%AC%E7%AB%8B%E9%83%A8%E7%BD%B2\" target=\"_blank\"  rel=\"nofollow\" >\u6982\u89c8 :: ShardingSphere\u5b98\u7f51<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Mn7eG\">\u5206\u7247\u952e<\/h3>\n\n\n\n<p id=\"u235c0967\">\u7528\u4e8e\u5c06\u6570\u636e\u5e93\uff08\u8868\uff09\u6c34\u5e73\u62c6\u5206\u7684\u6570\u636e\u5e93\u5b57\u6bb5\u3002<\/p>\n\n\n\n<p id=\"ubafed47e\">\u5206\u5e93\u5206\u8868\u4e2d\u7684\u5206\u7247\u952e\uff08Sharding Key\uff09\u662f\u4e00\u4e2a\u5173\u952e\u51b3\u7b56\uff0c\u5b83\u76f4\u63a5\u5f71\u54cd\u4e86\u5206\u5e93\u5206\u8868\u7684\u6027\u80fd\u548c\u53ef\u6269\u5c55\u6027\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u9009\u62e9\u5206\u7247\u952e\u7684\u5173\u952e\u56e0\u7d20\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8bbf\u95ee\u9891\u7387\uff1a\u9009\u62e9\u5206\u7247\u952e\u5e94\u8003\u8651\u6570\u636e\u7684\u8bbf\u95ee\u9891\u7387\u3002\u5c06\u7ecf\u5e38\u8bbf\u95ee\u7684\u6570\u636e\u653e\u5728\u540c\u4e00\u4e2a\u5206\u7247\u4e0a\uff0c\u53ef\u4ee5\u63d0\u9ad8\u67e5\u8be2\u6027\u80fd\u548c\u964d\u4f4e\u8de8\u5206\u7247\u67e5\u8be2\u7684\u5f00\u9500\u3002<\/li>\n\n\n\n<li>\u6570\u636e\u5747\u5300\u6027\uff1a\u5206\u7247\u952e\u5e94\u8be5\u4fdd\u8bc1\u6570\u636e\u7684\u5747\u5300\u5206\u5e03\u5728\u5404\u4e2a\u5206\u7247\u4e0a\uff0c\u907f\u514d\u51fa\u73b0\u70ed\u70b9\u6570\u636e\u96c6\u4e2d\u5728\u67d0\u4e2a\u5206\u7247\u4e0a\u7684\u60c5\u51b5\u3002\uff08\u6570\u636e\u5747\u5300\uff1a\u5047\u5982\u5206\u621016\u5f20\u8868\uff0c\u63d2\u516516\u6761\u6570\u636e\uff0c\u90a3\u4e48\u8fd916\u4e2a\u6570\u636e\uff0c\u5747\u5300\u5206\u5e03\u5728\u5404\u4e2a\u5206\u7247\u4e0a\uff09<\/li>\n\n\n\n<li>\u6570\u636e\u4e0d\u53ef\u53d8\uff1a\u4e00\u65e6\u9009\u62e9\u4e86\u5206\u7247\u952e\uff0c\u5b83\u5e94\u8be5\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u4e0d\u80fd\u968f\u7740\u4e1a\u52a1\u7684\u53d8\u5316\u800c\u9891\u7e41\u4fee\u6539\u3002<\/li>\n<\/ol>\n\n\n\n<p id=\"u6d3a9bb2\">\u7528\u6237\u540d\u548c\u7528\u6237ID\u9009\u54ea\u4e2a\u4f5c\u4e3a\u5206\u7247\u952e\uff1f<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7528\u6237\u540d\u3002\u7528\u6237\u540d\u53ef\u4ee5\u767b\u5f55\u3002\uff08\u5206\u8868\u540e\uff0c\u5982\u679csql\u8bed\u53e5\u4e0d\u4f20\u5206\u7247\u4ef6\uff0c\u6570\u636e\u5e93\u4f1a\u7528union all\u7684\u5f62\u5f0f\u67e5\u6240\u6709\u7684\u8868\uff0c\u9020\u6210\u975e\u5e38\u5927\u7684\u6027\u80fd\u6df1\u6e0a\u3002\uff09\u00a0<strong>\u5728\u7528\u6237\u767b\u5f55\u64cd\u4f5c\u4e2d\uff0c\u7cfb\u7edf\u9891\u7e41\u5730\u901a\u8fc7\u7528\u6237\u540d\u6765\u67e5\u8be2\u7528\u6237\u4fe1\u606f\uff0c\u90a3\u4e48\u4f7f\u7528\u7528\u6237\u540d\u4f5c\u4e3a\u5206\u7247\u952e\u53ef\u4ee5\u76f4\u63a5\u8def\u7531\u5230\u5305\u542b\u8be5\u7528\u6237\u540d\u6570\u636e\u7684\u7279\u5b9a\u8282\u70b9\uff0c\u8fd9\u6837\u53ef\u4ee5\u51cf\u5c11\u67e5\u8be2\u65f6\u8de8\u8282\u70b9\u7684\u901a\u4fe1\uff0c\u63d0\u9ad8\u67e5\u8be2\u6548\u7387<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vDS6k\">\u5f15\u5165 ShardingSphere-JDBC\u5230\u9879\u76ee<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"B3Zgi\">1. \u5f15\u5165\u4f9d\u8d56<\/h4>\n\n\n\n<pre id=\"yBLey\" class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.shardingsphere&lt;\/groupId&gt;\n    &lt;artifactId&gt;shardingsphere-jdbc-core&lt;\/artifactId&gt;\n    &lt;version&gt;5.3.2&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/dd3c7dd9-90ea-4f7e-a8f1-5cd2366aef64\" width=\"15\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"IHpmN\">2. \u5b9a\u4e49\u5206\u7247\u89c4\u5219<\/h4>\n\n\n\n<pre id=\"g0svN\" class=\"wp-block-code\"><code>spring:\n  datasource:\n  \t# ShardingSphere \u5bf9 Driver \u81ea\u5b9a\u4e49\uff0c\u5b9e\u73b0\u5206\u5e93\u5206\u8868\u7b49\u9690\u85cf\u903b\u8f91\n    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver\n    # ShardingSphere \u914d\u7f6e\u6587\u4ef6\u8def\u5f84\n    url: jdbc:shardingsphere:classpath:shardingsphere-config.yaml<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/56324fd5-39be-4750-a9d6-0f0f38e80ac5\" width=\"15\"><\/p>\n\n\n\n<p id=\"ud74bc39c\">shardingsphere-config.yaml<\/p>\n\n\n\n<pre id=\"mdRq1\" class=\"wp-block-code\"><code># \u6570\u636e\u6e90\u96c6\u5408\ndataSources:\n  ds_0:\n    dataSourceClassName: com.zaxxer.hikari.HikariDataSource\n    driverClassName: com.mysql.cj.jdbc.Driver\n    jdbcUrl: jdbc:mysql:\/\/127.0.0.1:3306\/link?useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;allowMultiQueries=true&amp;serverTimezone=Asia\/Shanghai\n    username: root\n    password: root\n\nrules:\n  - !SHARDING\n    tables:\n      t_user:\n        # \u771f\u5b9e\u6570\u636e\u8282\u70b9\uff0c\u6bd4\u5982\u6570\u636e\u5e93\u6e90\u4ee5\u53ca\u6570\u636e\u5e93\u5728\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\u7684\n        actualDataNodes: ds_0.t_user_${0..15}\n        # \u5206\u8868\u7b56\u7565\n        tableStrategy:\n          # \u7528\u4e8e\u5355\u5206\u7247\u952e\u7684\u6807\u51c6\u5206\u7247\u573a\u666f\n          standard:\n            # \u5206\u7247\u952e\n            shardingColumn: username\n            # \u5206\u7247\u7b97\u6cd5\uff0c\u5bf9\u5e94 rules&#91;0].shardingAlgorithms\n            shardingAlgorithmName: user_table_hash_mod\n    # \u5206\u7247\u7b97\u6cd5\n    shardingAlgorithms:\n      # \u6570\u636e\u8868\u5206\u7247\u7b97\u6cd5\n      user_table_hash_mod:\n        # \u6839\u636e\u5206\u7247\u952e Hash \u5206\u7247\n        type: HASH_MOD\n        # \u5206\u7247\u6570\u91cf\n        props:\n          sharding-count: 16\n# \u5c55\u73b0\u903b\u8f91 SQL &amp; \u771f\u5b9e SQL\nprops:\n  sql-show: true<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/a959b538-8100-40ed-ab51-94a4c3a213a4\" width=\"15\"><\/p>\n\n\n\n<p>\u7b2c23\u884c\u8868\u793a\u54c8\u5e0c\u53d6\u6a21\u7b97\u6cd5\uff0c\u6839\u636eusername\u5206\u7247\u952e\uff0c\u7b97\u51fa\u54c8\u5e0c\u503c\uff0c\u5c06\u8be5\u54c8\u5e0c\u503c\u5bf916(\u5206\u8868\u7684\u5927\u5c0f)\u53d6\u6a21\u3002\u8fd9\u4e2a\u503c\uff0c\u5c31\u662f\u5bf9\u5e94\u5b58\u50a8\u7684\u6570\u636e\u5e93\u4e0b\u6807t_user_i&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"BYRsi\">ShardingSphere \u6570\u636e\u5206\u7247\u6838\u5fc3\u6982\u5ff5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"vWwfU\">1. \u903b\u8f91\u8868<\/h4>\n\n\n\n<p id=\"u7464181f\">\u76f8\u540c\u7ed3\u6784\u7684\u6c34\u5e73\u62c6\u5206\u6570\u636e\u5e93\uff08\u8868\uff09\u7684\u903b\u8f91\u540d\u79f0\uff0c\u662f SQL \u4e2d\u8868\u7684\u903b\u8f91\u6807\u8bc6\u3002\u903b\u8f91\u8868\u662ft_user\uff0c\u6570\u636e\u5e93\u4e2d\u4e0d\u662f\u771f\u5b9e\u5b58\u5728\u7684\u3002\u771f\u5b9e\u8868\uff0ct_user_0\u5230t_user_15\uff0c\u662f\u6570\u636e\u5e93\u771f\u5b9e\u5b58\u5728\u7684<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"ukLhj\">2. \u771f\u5b9e\u8868<\/h4>\n\n\n\n<p id=\"u9ff4e8cb\">\u5728\u6c34\u5e73\u62c6\u5206\u7684\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\u7684\u7269\u7406\u8868\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b9e\u64cd\u5206\u8868<\/h3>\n\n\n\n<p>\u5206\u5e93\u4f5c\u4e3a\u62d3\u5c55\u8bb2\uff0c\u4e0d\u4f1a\u5728\u8fd9\u4e2a\u6211\u4eec\u7684\u4e3b\u6d41\u7a0b\u91cc\u9762\uff0c\u56e0\u4e3a\u6709\u975e\u5e38\u591a\u7684\u8fd9\u79cd\u524d\u7f6e\u77e5\u8bc6\uff1b\u6211\u4eec\u76ee\u524d\u4e3b\u8981\u7684\u5c31\u662f\u5148\u641e\u6e05\u695a\u5206\u8868\uff0c\u5728test.java\u4e2d\u65b0\u5efacom.nageoffer.shortlink.admin.test\u5305\uff0c\u65b0\u5efa\u5982\u4e0bjava\u6587\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.nageoffer.shortlink.admin.test;\n\n\/**\n *  \u505a\u4e00\u4e2a\u5206\u7247\u7684\u5904\u7406\uff0c\u6211\u4eec\u5148\u5206\u5341\u516d\u4e2a\u7247\u554a\n *\/\npublic class UserTableShardingTest {\n\n    public static final String SQL = \"CREATE TABLE `t_user_%d` (\\n\" +\n            \"  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\\n\" +\n            \"  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\\n\" +\n            \"  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\\n\" +\n            \"  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\\n\" +\n            \"  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\\n\" +\n            \"  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\\n\" +\n            \"  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\\n\" +\n            \"  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\\n\" +\n            \"  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\\n\" +\n            \"  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\\n\" +\n            \"  PRIMARY KEY (`id`),\\n\" +\n            \"  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\\n\" +\n            \") ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\";\n\n    public static void main(String&#91;] args) {\n        for (int i = 0; i &lt; 16; i++) {\n            System.out.printf((SQL) + \"%n\", i);\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/94d81b87-b60e-4e0b-a2f7-bcfd4ffbf638\" width=\"15\"><\/p>\n\n\n\n<p>\u5c06\u8fd0\u884c\u51fa\u6765\u7684\u8bdd\u5230navicat\u4e2d\u8fd0\u884c\uff08\u65b0\u5efa\u8fd9\u4e2asql\u6587\u4ef6\uff0c\u5c06\u539f\u6765\u7684t_user\u5220\u9664\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE `t_user_0` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_1` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_2` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_3` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_4` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_5` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_6` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_7` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_8` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_9` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_10` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_11` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_12` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_13` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_14` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\nCREATE TABLE `t_user_15` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(256) DEFAULT NULL COMMENT '\u7528\u6237\u540d',\n  `password` varchar(512) DEFAULT NULL COMMENT '\u5bc6\u7801',\n  `real_name` varchar(256) DEFAULT NULL COMMENT '\u771f\u5b9e\u59d3\u540d',\n  `phone` varchar(128) DEFAULT NULL COMMENT '\u624b\u673a\u53f7',\n  `mail` varchar(512) DEFAULT NULL COMMENT '\u90ae\u7bb1',\n  `deletion_time` bigint(20) DEFAULT NULL COMMENT '\u6ce8\u9500\u65f6\u95f4\u6233',\n  `create_time` datetime DEFAULT NULL COMMENT '\u521b\u5efa\u65f6\u95f4',\n  `update_time` datetime DEFAULT NULL COMMENT '\u4fee\u6539\u65f6\u95f4',\n  `del_flag` tinyint(1) DEFAULT NULL COMMENT '\u5220\u9664\u6807\u8bc6 0\uff1a\u672a\u5220\u9664 1\uff1a\u5df2\u5220\u9664',\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `idx_unique_username` (`username`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1715030926162935810 DEFAULT CHARSET=utf8mb4;\n<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/7ce74399-012d-44d3-a9fe-f8975a8a3156\" width=\"15\"><\/p>\n\n\n\n<p>\u5c31\u662f\u6211\u4eec\u4e4b\u524d\u4f60\u6bd4\u5982\u8bf4\u4f60\u505a\u4efb\u4f55\u64cd\u4f5c\u90fd\u662f\u5728t_user\u8868\u4e0a\uff0c\u4f46\u662f\u73b0\u5728\u6211\u4eec\u7684\u8868\u5206\u6210\u4e860-15\u4e00\u517116\u4e2a\u8868\u90a3\u8fd9\u4e2a\u65f6\u5019\u5047\u5982\u8bf4\u589e\u4ea7\u6539\u67e5\uff0c\u600e\u4e48\u628a\u6570\u636e\u5c31\u662f\u5728\u6b63\u786e\u7684\u6570\u636e\u8282\u70b9\u4e0a\u53bb\u6267\u884c\u5462\uff1f<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Mn7eG\">\u5206\u7247\u952e<\/h3>\n\n\n\n<p id=\"u235c0967\">\u7528\u4e8e\u5c06\u6570\u636e\u5e93\uff08\u8868\uff09\u6c34\u5e73\u62c6\u5206\u7684\u6570\u636e\u5e93\u5b57\u6bb5\u3002<br>\u5047\u5982\u662ft_user\u91cc\u9762\u6709\u4e00\u4e2a \u54c8\u5e0c\u7b97\u6cd5\u6765\u770b\u5c5e\u4e8e\u54ea\u4e2a<\/p>\n\n\n\n<p id=\"ubafed47e\">\u5206\u5e93\u5206\u8868\u4e2d\u7684\u5206\u7247\u952e\uff08Sharding Key\uff09\u662f\u4e00\u4e2a\u5173\u952e\u51b3\u7b56\uff0c\u5b83\u76f4\u63a5\u5f71\u54cd\u4e86\u5206\u5e93\u5206\u8868\u7684\u6027\u80fd\u548c\u53ef\u6269\u5c55\u6027\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u9009\u62e9\u5206\u7247\u952e\u7684\u5173\u952e\u56e0\u7d20\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8bbf\u95ee\u9891\u7387\uff1a\u9009\u62e9\u5206\u7247\u952e\u5e94\u8003\u8651\u6570\u636e\u7684\u8bbf\u95ee\u9891\u7387\u3002\u5c06\u7ecf\u5e38\u8bbf\u95ee\u7684\u6570\u636e\u653e\u5728\u540c\u4e00\u4e2a\u5206\u7247\u4e0a\uff0c\u53ef\u4ee5\u63d0\u9ad8\u67e5\u8be2\u6027\u80fd\u548c\u964d\u4f4e\u8de8\u5206\u7247\u67e5\u8be2\u7684\u5f00\u9500\u3002<\/li>\n\n\n\n<li>\u6570\u636e\u5747\u5300\u6027\uff1a\u5206\u7247\u952e\u5e94\u8be5\u4fdd\u8bc1\u6570\u636e\u7684\u5747\u5300\u5206\u5e03\u5728\u5404\u4e2a\u5206\u7247\u4e0a\uff0c\u907f\u514d\u51fa\u73b0\u70ed\u70b9\u6570\u636e\u96c6\u4e2d\u5728\u67d0\u4e2a\u5206\u7247\u4e0a\u7684\u60c5\u51b5\u3002\uff08\u6700\u3002\u7406\u60f3\u7684\u60c5\u51b5\u662f\u63d2\u516516\u6761\u8bb0\u5f55\uff0c\u5e94\u8be50-15\u6bcf\u4e2a\u8868\u91cc\u9762\u6709\u4e00\u6761\u8bb0\u5f55\uff0c\u6bd4\u598216\u4e07\u7684\u8868\u4e2d\u670912w\u5728tuser0\u4e0b\u9762\uff0c\u4f60\u90a3\u4e48\u5c31\u662f\u70ed\u70b9\u95ee\u9898\uff0c\u8fdd\u80cc\u4e86\u5206\u5e93\u5206\u8868\u7684\u521d\u8877\uff09<\/li>\n\n\n\n<li>\u6570\u636e\u4e0d\u53ef\u53d8\uff1a\u4e00\u65e6\u9009\u62e9\u4e86\u5206\u7247\u952e\uff0c\u5b83\u5e94\u8be5\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u4e0d\u80fd\u968f\u7740\u4e1a\u52a1\u7684\u53d8\u5316\u800c\u9891\u7e41\u4fee\u6539\u3002<\/li>\n<\/ol>\n\n\n\n<p id=\"u6d3a9bb2\">\u7528\u6237\u540d\u548c\u7528\u6237ID\u9009\u54ea\u4e2a\u4f5c\u4e3a\u5206\u7247\u952e\uff1f<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7528\u6237\u540d\u3002\u7528\u6237\u540d\u53ef\u4ee5\u767b\u5f55\u3002<\/li>\n<\/ul>\n\n\n\n<p>&nbsp;\u5f53\u4f60\u7528\u6211\u4e0d\u77e5\u9053\u7528\u6237ID\u662f\u4ec0\u4e48\uff0c\u6211\u53ea\u4f20\u4f1a\u7ed9\u4f60\u4e00\u4e2a\u7528\u6237\u540d\uff0c\u5c31\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6570\u636e\u5728\u54ea\u4e2a\u8868\u91cc\u9762\u4e86\u5417\uff1f\u5982\u679c\u8bf4\u4f60\u90a3\u4e2a\u4f60\u4f60\u5206\u8868\u4e4b\u540e\uff0c\u5982\u679c\u8fd9\u4e2a\u8bed\u5305\u4e0a\u9762\u4e0d\u4f20\u5206\u7247\u952e\uff0c\u4ed6\u4f1a\u67e5\u4f60\u6240\u6709\u7684\u8868\uff0c\u6027\u80fd\u4e0a\u6709\u95ee\u9898<\/p>\n\n\n\n<p id=\"vDS6k\">\u5f15\u5165 ShardingSphere-JDBC\u5230\u9879\u76ee<\/p>\n\n\n\n<p id=\"B3Zgi\">1. \u5f15\u5165\u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.shardingsphere&lt;\/groupId&gt;\n    &lt;artifactId&gt;shardingsphere-jdbc-core&lt;\/artifactId&gt;\n    &lt;version&gt;5.3.2&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/e68dd83b-b924-4b23-a1d9-0341b100c1da\" width=\"15\"><\/p>\n\n\n\n<p>5.\u51e0\u4ee5\u540e\u5b9e\u73b0\u4e86\u4ed6\u901a\u8fc7driver\u5c42\u9762\u53bb\u505a\u4e86\u4e00\u7cfb\u5217\u7684\u64cd\u4f5c\uff0c\u4e0d\u518d\u5b8c\u5168\u7684\u4f9d\u8d56JBDC\uff1b\u4e0d\u592a\u597d\u7684\u4e00\u70b9 \u662f\u9700\u8981\u989d\u5916\u7684\u6587\u4ef6\u5b58\u50a8\u914d\u7f6e\u6587\u4ef6\uff0c\u5728resources\u4e0b\u65b0\u5efashardingsphere-config.yaml<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u6570\u636e\u6e90\u96c6\u5408\ndataSources:\n  ds_0:\n    dataSourceClassName: com.zaxxer.hikari.HikariDataSource\n    driverClassName: com.mysql.cj.jdbc.Driver\n    jdbcUrl: jdbc:mysql:\/\/127.0.0.1:3306\/link?useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;allowMultiQueries=true&amp;serverTimezone=Asia\/Shanghai\n    username: root\n    password: root\n\nrules:\n  - !SHARDING\n    tables:\n      t_user:\n        # \u771f\u5b9e\u6570\u636e\u8282\u70b9\uff0c\u6bd4\u5982\u6570\u636e\u5e93\u6e90\u4ee5\u53ca\u6570\u636e\u5e93\u5728\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\u7684\n        actualDataNodes: ds_0.t_user_${0..15}\n        # \u5206\u8868\u7b56\u7565\n        tableStrategy:\n          # \u7528\u4e8e\u5355\u5206\u7247\u952e\u7684\u6807\u51c6\u5206\u7247\u573a\u666f\n          standard:\n            # \u5206\u7247\u952e\n            shardingColumn: username\n            # \u5206\u7247\u7b97\u6cd5\uff0c\u5bf9\u5e94 rules[0].shardingAlgorithms\n            shardingAlgorithmName: user_table_hash_mod\n    # \u5206\u7247\u7b97\u6cd5\n    shardingAlgorithms:\n      # \u6570\u636e\u8868\u5206\u7247\u7b97\u6cd5\n      user_table_hash_mod:\n        # \u6839\u636e\u5206\u7247\u952e Hash \u5206\u7247\n        type: HASH_MOD\n        # \u5206\u7247\u6570\u91cf\n        props:\n          sharding-count: 16\n# \u5c55\u73b0\u903b\u8f91 SQL &amp; \u771f\u5b9e SQL\nprops:\n  sql-show: true<\/pre>\n\n\n\n<p>\u539f\u6765\u7684application.yaml\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">server:\n  port: 8002\n\nspring:\n  datasource:\n    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver\n    url: jdbc:shardingsphere:classpath:shardingsphere-config.yaml\n  data:\n    redis:\n      host: 192.168.111.130\n      password: 123321\n      port: 6379<\/pre>\n\n\n\n<p>&nbsp;ShardingSphereDriver\uff0c\u4e0d\u518d\u662fjdbc.Driver\uff0c\u7136\u540e\u8fd9\u4e2a\u6587\u4ef6\u91cc\u9762\u5c31\u662f\u6211\u4eec\u53bb\u505a\u5206\u5e03\u5206\u8868\u7684\u4e00\u7cfb\u5217\u7684\u6838\u5fc3\u7684\u914d\u7f6e\uff0c\u9996\u5148\u7b2c\u4e00\u6570\u636e\u6e90\u7684\u8bdd\u5c31\u662f\u4f60\u7684\uff0c\u6bd4\u5982\u8bf4mysql\u6570\u636e\u5e93\u5bf9\u5427\uff0c\u6211\u4eec\u8fd9\u91cc\u8fd8\u662f\u7528\u8fd9\u79cdhikari.HikariDataSource\uff0c\u4e0b\u9762\u914d\u4e00\u4e9b\u94fe\u63a5\uff0c\u548crules\u89c4\u5219\u3002\u6bd4\u5982\u8bf4T_user\u4e5f\u53ef\u4ee5\u6709T_\u5176\u4ed6\u7684\u5bf9\u4e0d\u5bf9\uff1f\u7136\u540e\u63a5\u4e0b\u6765\u662f\u771f\u5b9e\u7684\u6570\u636e\u8282\u70b9\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u9700\u8981\u8ddf\u5927\u5bb6\u8bb2\u4e00\u4e0b\u4ec0\u4e48\u662f\u771f\u5b9e\u7684\u8868\u548c\u903b\u8f91\u8868\u3002\u903b\u8f91\u8868\u662f\u4ec0\u4e48\u610f\u601d\uff1f\u903b\u8f91\u8868\u662fsql\u5f53\u4e2d\u7684\u8868\u6807\u8bc6\u3002\u5206\u5230\u4e86T_userXX\u5c31\u662f\u505a\u8fd9\u79cd\u5206\u8868\u5904\u7406\uff0c\u4f46\u662f\u6211\u4eec\u7684\u4ee3\u7801\u91cc\u9762\u5c31\u662f\u6211\u4eec\u4e0d\u7528\u6539\u6211\u4eec\u7684\u4efb\u4f55\u4e00\u884c\uff0c\u4ee3\u7801\u5c31\u76f8\u5f53\u4e8e\u62bd\u8c61\u4e86\u4e00\u5c42\u903b\u8f91\u8868\u7684\u6982\u5ff5<\/p>\n\n\n\n<p id=\"vWwfU\">1. \u903b\u8f91\u8868<\/p>\n\n\n\n<p id=\"u7464181f\">\u76f8\u540c\u7ed3\u6784\u7684\u6c34\u5e73\u62c6\u5206\u6570\u636e\u5e93\uff08\u8868\uff09\u7684\u903b\u8f91\u540d\u79f0\uff0c\u662f SQL \u4e2d\u8868\u7684\u903b\u8f91\u6807\u8bc6\u3002<\/p>\n\n\n\n<p id=\"ukLhj\">2. \u771f\u5b9e\u8868<\/p>\n\n\n\n<p id=\"u9ff4e8cb\">\u5728\u6c34\u5e73\u62c6\u5206\u7684\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\u7684\u7269\u7406\u8868\u3002<\/p>\n\n\n\n<p>&nbsp;\u73b0\u5728t_user\u5c31\u662f\u903b\u8f91\u8868\uff0c\u5b83\u76f8\u5f53\u4e8e\u662f\u865a\u62df\u4f5c\u4e1a.\u73b0\u5728T-user\u5c31\u662f\u903b\u8f91\u8868\uff0c\u5b83\u76f8\u5f53\u4e8e\u662f\u865a\u62df\u5b58\u5728\u7684\uff0c\u5b83\u901a\u8fc7\u8fd9\u4e2a\u903b\u8f91\u8868\u53bb\u8ddf\u6211\u4eec\u6570\u636e\u5e93\u91cc\u9762\u7684\u8fd9\u4e9b\u771f\u5b9e\u7684\u7269\u7406\u8868\u505a\u6210\u4e86\u4e00\u5c42\u6620\u5c04\uff0c\u7136\u540e\u771f\u5b9e\u8868\u5c31\u662f\u6211\u4eec\u771f\u5b9e\u5b58\u5728\u6570\u636e\u5e93\u4e2d\u7684\u7269\u7406\u8868\uff0c\u6211\u4eec\u7684 T-user 0~15\uff0c\u770b\u6211\u4eec\u7684\u771f\u5b9e\u8282\u70b9\uff0c\u8fd9\u4e2a\u662f\u6211\u4eec\u7684\u6570\u636e\u6e90\u540d\u79f0\uff0cds_0\uff0c\u7136\u540eds_0.t_user_${0..15}\uff0c\u8fd9\u662f\u4e00\u4e2a\u5185\u7f6e\u7684\u8868\u8fbe\u5f0f\uff0c\u5c31\u4ee3\u8868\u7740012345\u4e00\u76f4\u523015\uff0c\u7136\u540e\u5206\u8868\u7b56\u7565\u7684\u8bdd\u8fd9\u91cc\u7528\u7684\u662f\u5355\u5206\u7247\u952e\uff0c\u56e0\u4e3a\u5206\u5e93\u5206\u8868\u662f\u53ef\u4ee5\u7528\u5355\u5206\u7247\u952e\u548c\u591a\u5206\u7247\u952e\u7684\uff0c\u6211\u4eec\u8fd9\u91cc\u76f4\u63a5\u5c31\u7528username\u5355\u5206\u7247\u952e\u5c31\u597d\u4e86\u3002\u7136\u540e\u6211\u4eec\u8fd9\u91cc\u9762\u5206\u914d\u7b97\u6cd5\uff0c\u5bf9\u5e94\u6211\u4eecsharding\u7684\u7b97\u6cd5\u7684\u4e00\u4e2a\u8282\u70b9,\u4e0b\u9762\u7684\u7b2c\u4e00\u4e2auser_table_hash_mod\u4ec0\u4e48\u610f\u601d\uff1f<\/p>\n\n\n\n<p>\u5047\u5982\u6211\u4eec\u7528\u6237\u540d\u79f0\u5206\u7247\uff0c\u6bd4\u5982\u8bf4\u4e00\u4e2aselect *\uff0c\u7136\u540efrom T-user where username=mading\uff0c\u4ed6\u4f1a\u628a\u9a6c\u4e01\u8fd9\u4e2a\u503c\u7ed9\u62ff\u51fa\u6765\u53bb\u8fdb\u884chash\u83b7\u53d6\u5230\u4ed6\u7684hashcode\uff0c\u7136\u540e\u6839\u636ehashcode\u7684\u8fdb\u884c\u53d6\u6a21\uff0c\u5c31\u662f%16\uff0c\u4e4b\u540e\u4ed6\u5c31\u4f1a\u53bb\u8fd9\u4e2a\u8868\u91cc\u9762\u53bb\u627e\uff0c\u4ee5\u53ca\u628a\u6570\u636e\u65b0\u589e\u7684\u8868\u3002\u6bd4\u5982\u8bf4\u6bd4\u5982\u8bf4123\uff0c\u7136\u540e%\u4e2a16\uff0c\u56e0\u4e3a\u6211\u4eec16\u5b83\u8fd9\u91cc\u9762%\u51fa\u6765\u7684\u5c31\u662f\u4e0b\u6807\uff0c\u4e0b\u6807\u5c31\u5bf9\u5e94\u6211\u4eec\u6570\u636e\u5e93\u8868\u91cc\u9762\u7684\u540e\u7f00\uff0c\u5927\u5bb6\u660e\u767d\u4e86\u5427\uff1f\u5f88\u5bb9\u6613\u7406\u89e3\u54c8\u5e0c\u53d6\u6a21\u7b97\u6cd5\u662f\u6bd4\u8f83\u597d\u7684\u3002\u7136\u540e\u6211\u4eec\u6570\u636e\u5e93\uff0c\u7136\u540e\u6211\u4eecsharding\u91cc\u9762\u652f\u6301\u975e\u5e38\u591a\u7684\u8fd9\u79cd\u5206\u8868\u7b97\u6cd5\uff0c\u8fd9\u91cc\u5927\u5bb6\u53bb\u4e86\u89e3\u4e00\u4e0b\u5c31\u597d\u4e86\u3002\u6839\u636e\u81ea\u5df1\u7684\u5b9e\u9645\u60c5\u51b5\u53ef\u4ee5\u53bb\u7075\u6d3b\u7684\u53bb\u4f7f\u7528\u3002\u518d\u7136\u540e\u6307\u5b9a\u6211\u4eec\u7684\u5206\u7247\u7b97\u6cd5\u7684\u4e00\u4e2atype\uff0chashmod\u76f8\u5f53\u4e8e\u662f\u6211\u4eec\u7684\u57fa\u4e8e\u770b\u5230\u6ca1\u6709\u54c8\u5e0c\u83ab\u7684\u914d\u7f6e\u7684\u4e00\u4e2a\u7b97\u6cd5\u540d\u79f0\uff0c\u7136\u540e\u6211\u4eec\u914d\u7f6e\u4e00\u4e0b\u6211\u4eec\u7684\u6c99\u4e01count\u300216. \u597d\u5427\uff1f\u7136\u540e\u8fd9\u8fb9\u7684\u8bdd\u662f\u76f8\u5f53\u4e8e\u4ed6\u6c99\u4e01\u968f\u4fbf\u5b83\u7684\u5e95\u5c42\u505a\u4e86\u4e9b\u4ec0\u4e48\u4e8b\u60c5\uff0c\u4f46\u662f\u5b83\u5e95\u5c42&nbsp;props: sql-show: true<\/p>\n\n\n\n<p>SELECT *FORM t_user where username = 'mading'<br>SELECT *FORM t_user_0 where username = 'mading'<\/p>\n\n\n\n<p>\u903b\u8f91sql\u662f\u5728\u4ee3\u7801\u5c42\u9762\u6267\u884c\u7684<\/p>\n\n\n\n<p>\u5982\u679c\u6211\u4eec\u505a\u4e86\u591a\u4e2a\u6570\u636e\u6e90\uff0c\u8981\u5728shardingsphere-config.yaml\u7ee7\u7eed\u521b\u5efa\uff0c \u6bd4\u5982ds-1<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u6570\u636e\u6e90\u96c6\u5408\ndataSources:\n  ds_0:\n    dataSourceClassName: com.zaxxer.hikari.HikariDataSource\n    driverClassName: com.mysql.cj.jdbc.Driver\n    jdbcUrl: jdbc:mysql:\/\/127.0.0.1:3306\/link?useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;allowMultiQueries=true&amp;serverTimezone=Asia\/Shanghai\n    username: root\n    password: root\n  ds_1:\n    dataSourceClassName: com.zaxxer.hikari.HikariDataSource\n    driverClassName: com.mysql.cj.jdbc.Driver\n    jdbcUrl: jdbc:mysql:\/\/127.0.0.1:3306\/link?useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;allowMultiQueries=true&amp;serverTimezone=Asia\/Shanghai\n    username: root\n    password: root<\/pre>\n\n\n\n<p>\u4e0b\u9762\u4e5f\u5206\u5e93\u7684\u7b97\u6cd5\u5373\u53ef<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u4f46\u662f\u8fd9\u6837\u4e0d\u662f\u610f\u5473\u7740\u7528\u6237\u540d\u4e0d\u80fd\u4fee\u6539\u5417\uff0c\u8fd9\u5728\u529f\u80fd\u4e0a\u662f\u4e0d\u662f\u663e\u5f97\u4e0d\u5408\u7406\uff1f&nbsp;<\/p>\n\n\n\n<p>\u56e0\u6b64\u73b0\u5728\u662fuid\u4e86\uff0c<strong>\u5728\u6570\u636e\u5e93\u8bbe\u8ba1\u4e4b\u521d\u5f15\u5165 UID\uff08Unique Identifier\uff09\u4f5c\u4e3a\u5206\u7247\u952e <\/strong>\u662f\u89e3\u51b3\u201c\u7528\u6237\u540d\u4e0d\u53ef\u53d8\u201d\u95ee\u9898\u7684\u5408\u7406\u65b9\u6848\u3002\u8fd9\u79cd\u8bbe\u8ba1\u5c06<strong>\u5206\u7247\u952e\u7684\u7a33\u5b9a\u6027 <\/strong>\u4e0e<strong>\u4e1a\u52a1\u5b57\u6bb5\u7684\u7075\u6d3b\u6027 <\/strong>\u5206\u79bb\uff0c\u65e2\u80fd\u6ee1\u8db3\u5206\u5e93\u5206\u8868\u7684\u6280\u672f\u9700\u6c42\uff0c\u53c8\u80fd\u652f\u6301\u4e1a\u52a1\u4e0a\u7528\u6237\u540d\u7684\u4fee\u6539\u3002<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">\u654f\u611f\u6570\u636e\u52a0\u5bc6\u5b58\u50a8<\/h3>\n\n\n\n<p>\u7528\u73b0\u6709\u7684\u6846\u67b6\u5b8c\u6210\u52a0\u5bc6\uff0c\u4e0d\u53ea\u662f\u901a\u8fc7\u968f\u4fbf\u505a\u4e86\uff0c\u76f4\u63a5\u5728S\u7684\u7259\u5957\u91cc\u9762\u53bb\u5c31\u884c\u4e86\uff0c\u7136\u540e\u5b83\u7684\u89c4\u5219\u7684\u8bdd\u5b83\u662f\u5206\u4e3a\u591a\u79cd\uff0c\u4e00\u79cd\u662f\u5206\u914d\u89c4\u5219\uff0c\u8fd8\u6709\u52a0\u5bc6\u89c4\u5219\uff0c\u52a0\u5bc6\u89c4\u5219\u7684\u8bdd\u8ddf\u5206\u914d\u89c4\u5219\u57fa\u672c\u4e0a\u5c31\u662f\u5dee\u4e0d\u591a\uff0c\u6bd4\u5982\u8bf4tables\u4e0b\u9762\u6709\u6211\u4eec\u7684\u7528\u6237\u8868\uff0c\u7136\u540e\u7528\u6237\u8868\u4e0b\u9762\u6709\u4f60\u8981\u52a0\u5bc6\u7684\u5b57\u6bb5\uff0c\u6bd4\u5982\u8bf4\u6211\u4eec\u7684phone<\/p>\n\n\n\n<p>\u5982\u679c\u8bf4\u518d\u53bb\u6570\u636e\u5e93\u91cc\u9762\u53bb\u5b58\u50a8\u7684\u8bdd\uff0c\u5b83\u5176\u5b9e\u624b\u673a\u53f7\u548c\u90ae\u7bb1\u5176\u5b9e\u5c31\u662f\u5bc6\u6587\u7684\u4e00\u4e2a\u72b6\u6001\u3002\u7136\u540e\u5b83\u8fd9\u91cc\u9762\u6709\u4e00\u4e2a\u5b57\u6bb5\u662f\u5426\u6309\u7167\u5bc6\u6587\u5b57\u6bb5\u67e5\u8be2\u3002\u4f60\u65e2\u7136\u8bf4\u662f\u5bc6\u6587\u5b58\u50a8\u5bf9\u5427\uff1f\u6211\u4eec\u6709\u5f88\u591a\u7684\u52a0\u5bc6\u65b9\u5f0f\uff0c\u6bd4\u5982\u8bf4\u50cf\u4e00\u4e9b\u56fd\u5185\u7684\u90a3\u79cd\u7b97\u6cd5\u5bf9\u5427\uff1f\u8fd8\u6709\u4e00\u4e9b Aes\u548c\u90a3\u79cd\u5176\u4ed6\u7684\uff0c\u6211\u4eec\u8fd9\u91cc\u9762\u5c31\u6709\u52a0\u5bc6\u7b97\u6cd5\u7684\u8bdd\uff0c\u6211\u4eec\u5c31\u5b9a\u4e49\u4e00\u4e2a\u516c\u5171\u7684\u52a0\u5bc6\u5c31\u884c\u4e86\u3002\u7136\u540e\u8fd9\u91cc\u9762\u6211\u4eec\u7528\u4e00\u4e2aaes\u7684\u8bdd\u662f\u4e00\u79cd\u53ef\u9006\u7684\u8fd9\u79cd\u52a0\u5bc6\u7b97\u6cd5\u7c7b\u578b\uff0c\u4ec0\u4e48\u53eb\u53ef\u9006\u7684\uff1f\u5c31\u76f8\u5f53\u4e8e\u4f60\u7528\u4e00\u4e2a\u4f60\u628a\u5b83\u52a0\u5bc6\u540e\uff0c\u4f60\u8fd8\u80fd\u518d\u8fd8\u539f\u6210\u539f\u6765\u7684\u6570\u636e\uff0c\u8fd9\u662f\u6211\u4eec\u60f3\u8981\u7684\uff0c\u56e0\u4e3a\u4f60\u60f3\u6211\u4eec\u628a\u6570\u636e\u52a0\u5bc6\u4e4b\u540e\u5b58\u5230\u6570\u636e\u5e93\u91cc\u9762\uff0c\u6211\u4eec\u80af\u5b9a\u8fd8\u662f\u8981\u7528\u7684\uff0c\u8981\u7528\u7684\u8bdd\u80af\u5b9a\u5f97\u518d\u7ed9\u5b83\u89e3\u5bc6\u5bf9\u4e0d\u5bf9\uff1f\u52a0\u89e3\u5bc6\u7684\u8fc7\u7a0b\u5f53\u4e2d\u662f\u9700\u8981\u4e00\u4e2a\u53eb\u505a\u5bc6\u94a5\u7684\u4e1c\u897f\u6765\u5904\u7406\u7684\uff0c\u5bc6\u94a5\u662f\u4e0d\u80fd\u4e22\u7684\uff0c\u4e00\u65e6\u4e22\u7684\u8bdd\uff0c\u4eba\u5bb6\u628a\u4f60\u7684\u5e93\u62d6\u8d70\uff0c\u4f46\u662f\u4eba\u5bb6\u77e5\u9053\u4e86\u4f60\u7684\u5bc6\u94a5\u4e00\u5b9a\u80fd\u7ed9\u4f60\u89e3\u5bc6\u51fa\u6765\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># \u6570\u636e\u6e90\u96c6\u5408\ndataSources:\n  ds_0:\n    dataSourceClassName: com.zaxxer.hikari.HikariDataSource\n    driverClassName: com.mysql.cj.jdbc.Driver\n    jdbcUrl: jdbc:mysql:\/\/127.0.0.1:3306\/link?useUnicode=true&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;allowMultiQueries=true&amp;serverTimezone=Asia\/Shanghai\n    username: root\n    password: root\n\nrules:\n  - !SHARDING\n    tables:\n      # \u771f\u5b9e\u6570\u636e\u8282\u70b9\uff0c\u6bd4\u5982\u6570\u636e\u5e93\u6e90\u4ee5\u53ca\u6570\u636e\u5e93\u5728\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\u7684\n      t_user:\n        # \u5206\u8868\u7b56\u7565\n        actualDataNodes: ds_0.t_user_${0..15}\n        tableStrategy:\n          # \u7528\u4e8e\u5355\u5206\u7247\u952e\u7684\u6807\u51c6\u5206\u7247\u573a\u666f\n          standard:\n            # \u5206\u7247\u952e\n            shardingColumn: username\n            # \u5206\u7247\u7b97\u6cd5\uff0c\u5bf9\u5e94 rules[0].shardingAlgorithms\n            shardingAlgorithmName: user_table_hash_mod\n    # \u5206\u7247\u7b97\u6cd5\n    shardingAlgorithms:\n      # \u6570\u636e\u8868\u5206\u7247\u7b97\u6cd5\n      user_table_hash_mod:\n        # \u6839\u636e\u5206\u7247\u952e Hash \u5206\u7247\n        type: HASH_MOD\n        # \u5206\u7247\u6570\u91cf\n        props:\n          sharding-count: 16\n\n  - !ENCRYPT\n    # \u52a0\u5bc6\u8868\u96c6\u5408\uff08\u9876\u5c42\uff09\n    tables:\n      # \u7528\u6237\u8868\n      t_user:\n        # \u7528\u6237\u8868\u4e2d\u54ea\u4e9b\u5b57\u6bb5\u9700\u8981\u8fdb\u884c\u52a0\u5bc6\n        columns:\n          # \u624b\u673a\u53f7\u5b57\u6bb5\uff0c\u903b\u8f91\u5b57\u6bb5\uff0c\u4e0d\u4e00\u5b9a\u662f\u5728\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\n          phone:\n            # \u624b\u673a\u53f7\u5b57\u6bb5\u5b58\u50a8\u7684\u5bc6\u6587\u5b57\u6bb5\uff0c\u8fd9\u4e2a\u662f\u6570\u636e\u5e93\u4e2d\u771f\u5b9e\u5b58\u5728\u7684\u5b57\u6bb5\n            cipherColumn: phone\n            encryptorName: common_encryptor\n          mail:\n            cipherColumn: mail\n            encryptorName: common_encryptor\n        # \u662f\u5426\u6309\u7167\u5bc6\u6587\u5b57\u6bb5\u67e5\u8be2\n        queryWithCipherColumn: true\n\n    # \u52a0\u5bc6\u7b97\u6cd5\u5b9a\u4e49\uff08\u9876\u5c42\uff09\n    encryptors:\n      common_encryptor:\n        # \u52a0\u5bc6\u7b97\u6cd5\u7c7b\u578b\n        type: AES\n        props:\n          # AES \u52a0\u5bc6\u5bc6\u94a5\n          aes-key-value: d6oadClrrb9A3GWo\n\nprops:\n  sql-show: true<\/pre>\n\n\n\n<p>\u52a0\u5bc6\u539f\u7406\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"428\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/ca46135fa6ed4937a8a59d20cdff8fc1.png\" width=\"678\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/6e954065-ef42-4047-ae29-fb97973988d2\" width=\"15\">\u200b\u7f16\u8f91<\/p>\n\n\n\n<p>OK\uff0c\u6211\u4eec\u5148\u4ee5\u529f\u80fd\u4e3a\u5bfc\u5411\u6765\u6f14\u793a\u4e00\u4e0b\uff0c\u770b\u770b\u884c\u4e0d\u884c\u3002\u9996\u5148\u6211\u4eec\u5148\u628a\u8fd9\u6761\u8bb0\u5f55\u5220\u6389\u3002\u8fd9\u4e2a\u529f\u80fd\u662f\u5173\u4e8e<strong>\u52a0\u5bc6 <\/strong>\u548c<strong>\u5206\u7247 <\/strong>\u7684\uff0c\u5176\u5b9e\u5b83\u4eec\u7684\u5b9e\u73b0\u539f\u7406\u662f\u7c7b\u4f3c\u7684\u3002<\/p>\n\n\n\n<p>ShardingSphere \u662f\u5728\u5e95\u5c42\u5bf9\u4f60\u7684 SQL \u8fdb\u884c\u4e86\u4e00\u5c42\u89e3\u6790\u3002\u5982\u679c\u5b83\u5224\u65ad\u51fa\u4f60\u914d\u7f6e\u4e86\u52a0\u5bc6\u89c4\u5219\uff0c\u5e76\u4e14\u5f53\u524d\u6267\u884c\u7684 SQL \u6d89\u53ca\u5230\u52a0\u5bc6\u8868\uff0c\u540c\u65f6\u8bed\u53e5\u4e2d\u5305\u542b\u9700\u8981\u52a0\u5bc6\u7684\u5b57\u6bb5\uff0c\u90a3\u4e48 ShardingSphere \u5c31\u4f1a\u5bf9\u4f60\u8fd9\u6761 SQL \u8fdb\u884c\u6539\u5199\u3002<\/p>\n\n\n\n<p>\u90a3\u5b83\u662f\u600e\u4e48\u6539\u5199\u7684\u5462\uff1f\u6bd4\u5982\u8bf4\u4f60\u539f\u6765\u7684\u5b57\u6bb5\u53eb <code>a<\/code>\uff0c\u5b83\u53ef\u80fd\u4f1a\u6620\u5c04\u6210\u53e6\u4e00\u4e2a\u5b57\u6bb5 <code>b<\/code>\uff0c\u7136\u540e\u6839\u636e\u4f60\u914d\u7f6e\u7684\u52a0\u5bc6\u7b97\u6cd5\uff0c\u628a\u5bf9\u5e94\u7684\u503c\u8fdb\u884c\u52a0\u5bc6\u5904\u7406\u3002\u6bd4\u5982\u5728\u63d2\u5165\u6570\u636e\u65f6\u81ea\u52a8\u52a0\u5bc6\uff0c\u5728\u67e5\u8be2\u6570\u636e\u65f6\u81ea\u52a8\u89e3\u5bc6\uff0c\u6700\u7ec8\u843d\u5230\u6570\u636e\u5e93\u91cc\u7684\u5c31\u662f\u52a0\u5bc6\u540e\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u6765\u8bd5\u4e00\u4e0b\uff0c\u770b\u80fd\u4e0d\u80fd\u8bfb\u53d6\u5230\u6570\u636e\uff0c\u4ee5\u53ca\u8bfb\u51fa\u6765\u7684\u6570\u636e\u662f\u5426\u53ef\u7528\u3002\u73b0\u5728\u63d0\u793a\u201c\u7528\u6237\u8bb0\u5f55\u4e0d\u5b58\u5728\u201d\u3002\u6211\u4eec\u8fd9\u91cc\u53ea\u914d\u7f6e\u4e86\u4e00\u4e2a\u654f\u611f\u5b57\u6bb5\uff0c\u662f\u4e0d\u662f\u8fd8\u5e94\u8be5\u6709\u4e00\u4e2a\u4e0d\u654f\u611f\u5b57\u6bb5\uff1f\u5927\u5bb6\u6ce8\u610f\uff0c\u8fd9\u79cd\u60c5\u51b5\u53ea\u6709\u5728\u771f\u5b9e\u7684\u4f01\u4e1a\u573a\u666f\u4e2d\u624d\u4f1a\u51fa\u73b0\u5b57\u6bb5\u4e3a\u975e\u654f\u611f\u7684\u60c5\u51b5\u3002<\/p>\n\n\n\n<p>\u8fd9\u662f\u56e0\u4e3a\u5728\u6211\u4eec\u5f53\u524d\u7684\u6d4b\u8bd5\u73af\u5883\u4e2d\uff0c\u6570\u636e\u5e93\u8868\u662f\u4ece\u96f6\u5f00\u59cb\u6784\u5efa\u7684\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u542f\u7528\u52a0\u5bc6\u3002\u4f46\u5728\u67d0\u4e9b\u5b9e\u9645\u4e1a\u52a1\u573a\u666f\u4e2d\uff0c\u53ef\u80fd\u5df2\u7ecf\u5b58\u5728\u4e86\u4e00\u4e9b\u6570\u636e\u3002\u8fd9\u65f6\u5019\u5982\u679c\u4f60\u60f3\u65e0\u7f1d\u5730\u5f15\u5165\u52a0\u5bc6\u673a\u5236\uff0c\u5c31\u9700\u8981\u505a\u4e00\u4e9b\u989d\u5916\u7684\u5904\u7406\u3002<\/p>\n\n\n\n<p>\u4e3e\u4e2a\u4f8b\u5b50\uff1a\u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u4e00\u5f20\u7528\u6237\u8868\uff0c\u91cc\u9762\u6709\u624b\u673a\u53f7\u5b57\u6bb5\u3002\u5982\u679c\u6211\u4eec\u60f3\u5728\u4e0d\u5f71\u54cd\u73b0\u6709\u7cfb\u7edf\u7684\u60c5\u51b5\u4e0b\u9010\u6b65\u4e0a\u7ebf\u52a0\u5bc6\u529f\u80fd\uff0c\u53ef\u4ee5\u8fd9\u6837\u505a\uff1a<\/p>\n\n\n\n<p>\u6211\u4eec\u5728\u6570\u636e\u5e93\u8868\u91cc\u65b0\u589e\u4e00\u4e2a\u7528\u4e8e\u5b58\u50a8\u52a0\u5bc6\u540e\u624b\u673a\u53f7\u7684\u5b57\u6bb5\uff0c\u8fd9\u6837\u6570\u636e\u5e93\u4e2d\u5c31\u4f1a\u540c\u65f6\u5b58\u5728\u4e24\u4e2a\u624b\u673a\u53f7\u5b57\u6bb5\u2014\u2014\u4e00\u4e2a\u662f\u660e\u6587\u5b57\u6bb5\uff0c\u4e00\u4e2a\u662f\u5bc6\u6587\u5b57\u6bb5\u3002<\/p>\n\n\n\n<p>\u5728\u521d\u59cb\u9636\u6bb5\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u8be5\u5b57\u6bb5\u7684\u52a0\u5bc6\u72b6\u6001\u8bbe\u7f6e\u4e3a <code>false<\/code>\uff0c\u4e5f\u5c31\u662f\u4e0d\u542f\u7528\u52a0\u5bc6\uff0c\u8fd9\u6837\u7cfb\u7edf\u4ecd\u7136\u6309\u7167\u660e\u6587\u5b57\u6bb5\u6765\u64cd\u4f5c\u3002\u4e4b\u540e\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u8fc1\u79fb\u4efb\u52a1\uff0c\u628a\u660e\u6587\u5b57\u6bb5\u7684\u6570\u636e\u6e05\u6d17\u5230\u65b0\u7684\u5bc6\u6587\u5b57\u6bb5\u4e2d\u3002<\/p>\n\n\n\n<p>\u5f53\u6570\u636e\u6e05\u6d17\u5b8c\u6210\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e2a\u5b57\u6bb5\u7684\u52a0\u5bc6\u72b6\u6001\u6539\u4e3a <code>true<\/code>\uff0c\u8fd9\u65f6 ShardingSphere \u5c31\u4f1a\u81ea\u52a8\u53bb\u64cd\u4f5c\u5bc6\u6587\u5b57\u6bb5\u3002\u7b49\u7cfb\u7edf\u8fd0\u884c\u7a33\u5b9a\u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u518d\u5c06\u660e\u6587\u5b57\u6bb5\u5220\u9664\u5373\u53ef\u3002<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u6d41\u7a0b\u662f\u5728\u4f01\u4e1a\u7ea7\u9879\u76ee\u4e2d\u975e\u5e38\u5e38\u89c1\u7684\u4e00\u79cd\u52a0\u5bc6\u5347\u7ea7\u65b9\u6848\u3002\u800c\u6211\u4eec\u8fd9\u4e2a\u9879\u76ee\uff0c\u5927\u5bb6\u53ea\u8981\u7406\u89e3\u5230\u8fd9\u4e00\u6b65\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n\n\n\n<p>\u53e6\u5916\u53ef\u4ee5\u770b\u5230\uff0c\u8fd9\u91cc\u7684\u5b57\u6bb5\u4e5f\u53eb\u505a<strong>\u903b\u8f91\u5b57\u6bb5 <\/strong>\uff0c\u7c7b\u4f3c\u4e8e\u5206\u7247\u952e\u7684\u6982\u5ff5\u3002\u5b83\u53ea\u662f\u4e00\u4e2a\u903b\u8f91\u4e0a\u7684\u540d\u79f0\uff0c\u771f\u6b63\u6267\u884c\u7684\u65f6\u5019\u4f1a\u88ab\u66ff\u6362\u4e3a\u7269\u7406\u5b57\u6bb5\u3002<\/p>\n\n\n\n<p>\u6211\u518d\u4e3e\u4e2a\u4f8b\u5b50\u8bf4\u660e\u4e00\u4e0b\u3002\u6bd4\u5982\u6211\u4eec\u8fd9\u8fb9\u914d\u7f6e\u4e86\u4e00\u4e2a\u903b\u8f91\u503c\u662f <code>123<\/code>\uff0c\u4f46\u5b9e\u9645\u5728\u6570\u636e\u5e93\u4e2d\u5b58\u50a8\u7684\u662f <code>-123<\/code>\u3002\u6211\u4eec\u91cd\u542f\u4e00\u4e0b\u670d\u52a1\uff0c\u518d\u6267\u884c\u67e5\u8be2\uff0c\u53d1\u73b0\u6ca1\u6709\u95ee\u9898\u3002\u4e3a\u4ec0\u4e48\uff1f\u56e0\u4e3a ShardingSphere \u5728\u5e95\u5c42\u5e2e\u4f60\u5b8c\u6210\u4e86 SQL \u7684\u6539\u5199\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u6765\u770b\u4e00\u4e0b\u903b\u8f91\u8868\u7ed3\u6784\uff0c\u53d1\u73b0\u67e5\u8be2\u7684\u662f\u903b\u8f91\u5b57\u6bb5\uff0c\u4f46\u5b9e\u9645\u6267\u884c\u7684\u65f6\u5019\u5df2\u7ecf\u53d8\u6210\u4e86 <code>-123<\/code>\uff0c\u4e5f\u5c31\u662f\u8bf4\u5b83\u5728\u4e2d\u95f4\u505a\u4e86\u4e00\u5c42\u8f6c\u6362\u3002\u5927\u5bb6\u660e\u767d\u4e86\u5417\uff1f<img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"529\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/f783a0812fc748b5a37668bb4da48fe4.png\" width=\"680\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/0d1467a2-a67a-424c-8115-1722adbf9164\" width=\"15\">\u200b\u7f16\u8f91<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"73\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/265c0f26f00a42ccbd617c00a792d81e.png\" width=\"650\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/40eb8fb3-fa18-417e-b769-01ca16c55789\" width=\"15\">\u200b\u7f16\u8f91<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7528\u6237\u4e2a\u4eba\u4fe1\u606f\u4fee\u6539\u529f\u80fd<\/h3>\n\n\n\n<p>\u5728dto\u4e0b\u7684req\u65b0\u5efa<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.nageoffer.shortlink.admin.dto.req;\n\nimport lombok.Data;\n\n\/**\n * \u7528\u6237\u6ce8\u518c\u8bf7\u6c42\u53c2\u6570\n * \n *\/\n@Data\npublic class UserUpdateReqDTO {\n    \/**\n     * \u7528\u6237\u540d\n     *\/\n    private String username;\n\n    \/**\n     * \u5bc6\u7801\n     *\/\n    private String password;\n\n    \/**\n     * \u771f\u5b9e\u59d3\u540d\n     *\/\n    private String realName;\n\n    \/**\n     * \u624b\u673a\u53f7\n     *\/\n    private String phone;\n\n    \/**\n     * \u90ae\u7bb1\n     *\/\n    private String mail;\n}\n<\/pre>\n\n\n\n<p>controller\u5c42service\u5c42impl\u5c42\u4f9d\u6b21\u65b0\u5efa<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@PutMapping(\"\/api\/short-link\/v1\/user\")\npublic Result&lt;Void&gt; update(@RequestBody UserUpdateReqDTO requestParam){\n    userService.update(requestParam);\n    return Results.success();\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void update(UserUpdateReqDTO requestParam);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">@Override\npublic void update(UserUpdateReqDTO requestParam){\n\/\/TODO \u9a8c\u8bc1\u5f53\u524d\u7528\u6237\u540d\u662f\u5426\u4e3a\u767b\u5f55\u7528\u6237\n\/\/  \u6211\u4eec\u8bf7\u6c42\u5230\u8fd9\u91cc\u80af\u5b9a\u662f\u6709\u767b\u5f55\u51ed\u8bc1token\u7684\uff0c\u8fd9\u91cc\u662f\u4f9d\u8d56\u7f51\u5173\u7684\uff0c\u56e0\u6b64\u540e\u9762\u518d\u5199\n    LambdaQueryWrapper&lt;UserDO&gt; updateWrapper = Wrappers.lambdaQuery(UserDO.class)\n            .eq(UserDO::getUsername, requestParam.getUsername());\n    baseMapper.update(BeanUtil.toBean(requestParam, UserDO.class), updateWrapper);\n}<\/pre>\n\n\n\n<p>MyMetaObjectHandler\u91cc\u9762\u5bf9\u4fee\u6539\u65e5\u671f\u7684\u4fee\u6539&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Override\npublic void updateFill(MetaObject metaObject) {\n    strictInsertFill(metaObject, \"updateTime\", Date::new, Date.class);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u7528\u6237\u7cfb\u7edf\u767b\u5f55\u529f\u80fd<\/h3>\n\n\n\n<p>\u5728req\u4e2d\u65b0\u5efaUserLoginReqDTO<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.nageoffer.shortlink.admin.dto.req;\n\nimport lombok.Data;\n\n@Data\npublic class UserLoginReqDTO {\n    \/**\n     * \u7528\u6237\u540d\n     *\/\n    private String username;\n    \/**\n     * \u5bc6\u7801\n     *\/\n    private String password;\n}\n<\/pre>\n\n\n\n<p>\u5728resq\u4e2d\u65b0\u5efaUserLoginRespDTO<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.nageoffer.shortlink.admin.dto.resq;\nimport lombok.Data;\n@Data\npublic class UserLoginRespDTO {\n    \/**\n     * \u7528\u6237token\n     *\/\n    private String token;\n}\n<\/pre>\n\n\n\n<p>&nbsp;\u5728pom\u4e2d\u5f15\u5165alibaba\u7684fastjson2<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;dependency&gt;\n    &lt;groupId&gt;com.alibaba.fastjson2&lt;\/groupId&gt;\n    &lt;artifactId&gt;fastjson2&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/pre>\n\n\n\n<p>\u5728service\uff0ccintroller\u548cimpl\u4e2d<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/**\n * \u7528\u6237\u767b\u5f55\n * @param requestParam \u7528\u6237\u767b\u5f55\u8bf7\u6c42\u53c2\u6570\n * @return \u7528\u6237\u767b\u5f55\u8fd4\u56de\u53c2\u6570\n *\/\nUserLoginRespDTO login(UserLoginReqDTO requestParam);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">@PostMapping(\"\/api\/short-link\/v1\/user\/login\")\npublic Result&lt;UserLoginRespDTO&gt; login(@RequestBody UserLoginReqDTO requestParam) {\n    UserLoginRespDTO result= userService.login(requestParam);\n    return Results.success(result);\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">@Override\npublic UserLoginRespDTO login(UserLoginReqDTO requestParam)\n{\n    LambdaQueryWrapper&lt;UserDO&gt; queryWrapper = Wrappers.lambdaQuery(UserDO.class)\n            .eq(UserDO::getUsername, requestParam.getUsername())\n            .eq(UserDO::getPassword, requestParam.getPassword())\n            .eq(UserDO::getDelFlag, 0);\n    UserDO userDO = baseMapper.selectOne(queryWrapper);\n    if (userDO == null) {\n        throw new ClientException(\"\u7528\u6237\u4e0d\u5b58\u5728\");\n    }\n    String uuid = UUID.randomUUID().toString();\n    stringRedisTemplate.opsForValue().set(uuid, JSON.toJSONString(userDO), 30L, TimeUnit.MINUTES);\n    return new UserLoginRespDTO(uuid);\n}<\/pre>\n\n\n\n<p>&nbsp;\u4f7f\u7528\u5bf9\u5e94\u7684token\u5c31\u80fd\u83b7\u53d6\u90a3\u4e2a\u7528\u6237\u7684\u8bbf\u95ee\uff0c<img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"1006\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/e2e62b20ae444541be32cdcd33926361.png\" width=\"1366\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/1ee0d79f-8335-4412-9ee7-7713b1ae314d\" width=\"15\">\u200b\u7f16\u8f91<img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"334\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/816ab0477800430d901f2978d93438b2.png\" width=\"672\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/df7804bb-9295-4a18-87c4-23e3a2d2aea5\" width=\"15\">\u200b\u7f16\u8f91<\/p>\n\n\n\n<p>\u76f8\u5e94\u7684\uff0c\u8f93\u5165\u9519\u8bef\u5c31\u4f1a\u83b7\u5f97\u5bf9\u5e94\u7684\u9519\u8bef\u7801\uff0c&nbsp;\uff08\u4f60\u60f3\u5077\u61d2\u5c31\u76f4\u63a5\u6709\u73b0\u6210\u7684\u6784\u9020\uff0c\u7206\u4e00\u7ea7\u5b8f\u89c2\u7801\uff0c\u63a5\u4e0b\u6765\u770b\u770b\u662f\u5426\u5904\u4e8e\u767b\u5f55\u72b6\u6001\uff09<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Override\npublic Boolean checkLogin(String token) {\n    \/\/\u53ea\u8981\u68c0\u67e5\u4e00\u4e0btoken\u662f\u5426\u5b58\u5728\n    return stringRedisTemplate.hasKey(token);\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">    \/**\n     * \u68c0\u67e5\u7528\u6237\u662f\u5426\u767b\u5f55\n     * @param token \u7528\u6237\u767b\u5f55token\n     * @return \u7528\u6237\u662f\u5426\u767b\u5f55\u6807\u8bc6\n     *\/\n    Boolean checkLogin(String token);\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/**\n * \u68c0\u67e5\u7528\u6237\u662f\u5426\u767b\u5f55\n *\/\n@GetMapping(\"\/api\/short-link\/v1\/user\/check-login\")\npublic Result&lt;Boolean&gt; checkLogin(@RequestParam(\"token\")String token) {\n    return Results.success(userService.checkLogin(token));\n}<\/pre>\n\n\n\n<p>&nbsp;<img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"275\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/081dd7a0b47545f68a09610780e67c1c.png\" width=\"324\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/9c9b044d-2519-4cd1-a9b8-c4609a0bbf8e\" width=\"15\">\u200b\u7f16\u8f91<img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"282\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/bba554032c9c448cb06facb05d72b93e.png\" width=\"352\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/3e4fb4bf-e4de-418e-a223-f130280eaea3\" width=\"15\">\u200b\u7f16\u8f91<\/p>\n\n\n\n<p>&nbsp;\u8fd9\u91cc\u6709\u4e00\u4e2abug\uff0c\u90a3\u5c31\u662f\u53ef\u80fd\u4f1a\u91cd\u590d\u767b\u5f55\uff0c\u4f60\u91cd\u590d\u5728login\u7684\u53d1\u9001posting\uff0c\u4e0d\u505c\u7684\u653e\u56de\u4e0d\u540c\u7684token\uff1b\u56e0\u6b64\u8981\u5bf9login\u8fdb\u884c\u6539\u9020<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    @Override\n    public UserLoginRespDTO login(UserLoginReqDTO requestParam) {\n        LambdaQueryWrapper&lt;UserDO&gt; queryWrapper = Wrappers.lambdaQuery(UserDO.class)\n                .eq(UserDO::getUsername, requestParam.getUsername())\n                .eq(UserDO::getPassword, requestParam.getPassword())\n                .eq(UserDO::getDelFlag, 0);\n        UserDO userDO = baseMapper.selectOne(queryWrapper);\n        if (userDO == null) {\n            throw new ClientException(\"\u7528\u6237\u4e0d\u5b58\u5728\");\n        }\n        Boolean hasLogin = stringRedisTemplate.hasKey(\"login_\" + requestParam.getUsername());\n        if (hasLogin != null &amp;&amp; hasLogin) {\n            throw new ClientException(\"\u7528\u6237\u5df2\u767b\u5f55\");\n        }\n        \/**\n         * Hash\n         * Key: login_\u7528\u6237\u540d\n         * Value:\n         * Key: token\u6807\u8bc6\n         * Val: JSON \u5b57\u7b26\u4e32\uff08\u7528\u6237\u4fe1\u606f\uff09\n         *\/\n        \/\/ HashOperations\u4e2d\u6ca1\u6709\u53d1\u73b0\u529e\u6cd5\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\n        String uuid = UUID.randomUUID().toString();\n        stringRedisTemplate.opsForHash().put(\"login_\" + requestParam.getUsername(), \"token\", JSON.toJSONString(userDO));\n        stringRedisTemplate.expire(\"login_\" + requestParam.getUsername(), 30L, TimeUnit.MINUTES);\n        return new UserLoginRespDTO(uuid);\n    }\n\n    @Override\n    public Boolean checkLogin(String username,String token) {\n        \/\/\u53ea\u8981\u68c0\u67e5\u4e00\u4e0btoken\u662f\u5426\u5b58\u5728\n        return stringRedisTemplate.opsForHash().get(\"token_\"+username,token)!=null;\n    }<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/ed1e4211-7cfb-422d-8ebe-22e6bc2f633f\" width=\"15\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/**\n     * \u68c0\u67e5\u7528\u6237\u662f\u5426\u767b\u5f55\n     * @param username \u7528\u6237\u540d\n     * @param token \u7528\u6237\u767b\u5f55token\n     * @return \u7528\u6237\u662f\u5426\u767b\u5f55\u6807\u8bc6\n     *\/\n    Boolean checkLogin(String username,String token);<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/830ca954-78a1-4040-930f-8d188422b27a\" width=\"15\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/**\n     * \u68c0\u67e5\u7528\u6237\u662f\u5426\u767b\u5f55\n     *\/\n    @GetMapping(\"\/api\/short-link\/v1\/user\/check-login\")\n    public Result&lt;Boolean&gt; checkLogin(@RequestParam(\"username\")String username,@RequestParam(\"token\")String token) {\n        return Results.success(userService.checkLogin(username,token));\n    }<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/dcb41f47-509b-4d84-be6b-3d82dae620ff\" width=\"15\"><\/p>\n\n\n\n<p>\u767b\u5f55\u540etoken\uff1a df7aeb25-567e-4509-b1b9-daff259b8b01\uff0c\u518d\u6b21\u767b\u5f55\uff0c\u5c31\u62a5\u9519\u7528\u6237\u5df2\u767b\u5f55<img loading=\"lazy\" decoding=\"async\" alt=\"\" height=\"477\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/44dedd7a610544b6be55230a8bc0136f.png\" width=\"666\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/176aa9a7-7ada-4fa6-99dc-45ae20861658\" width=\"15\">\u200b\u7f16\u8f91<\/p>\n\n\n\n<p>&nbsp;\u8fd8\u6709\u4f60\u50cf\u82cd\u7a79\u5916\u5356\uff0c\u9ed1\u9a6c\u70b9\u8bc4\u7b49\u7684session\uff0cjwt\u4ee4\u724c\u7b49\u529f\u80fd\uff0c\u53ef\u4ee5\u968f\u610f\u4f7f\u7528\uff0c\u8fd9\u91cc\u5f88\u7c97\u7cd9\u554a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7528\u6237\u9000\u51fa\u767b\u5f55\u529f\u80fd<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">\/**\n * \u7528\u6237\u9000\u51fa\u767b\u5f55\n * @param username \u7528\u6237\u540d\n * @param token \u7528\u6237\u767b\u5f55\u7684token\n *\/\n@DeleteMapping(\"\/api\/short-link\/v1\/user\/logout\")\npublic Result&lt;Void&gt; logout(@RequestParam(\"username\")String username,@RequestParam(\"token\") String token) {\n    userService.logout(username,token);\n    return Results.success();\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">@Override\npublic void logout(String username,String token) {\n    if(checkLogin(username,token)){\n        stringRedisTemplate.delete(\"login_\" + username);\n        return;\n    }\n    throw new ClientException(\"\u7528\u6237token\u4e0d\u5b58\u5728\u6216\u7528\u6237\u672a\u767b\u5f55\");\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void logout(String username,String token);<\/pre>\n\n\n\n<p>\u200b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u200b \u6d77\u91cf\u7528\u6237\u5982\u4f55\u5206\u5e93\u5206\u8868 \u5176\u5b9e\u662f\u5206\u4e3a3\u79cd\u7684\uff1a\u5206\u5e93\uff0c\u5206\u8868\uff0c\u5206\u5e93\u5206\u8868\uff1b \u4e3a\u4ec0\u4e48\u8981\u5206\u5e93\u5206\u8868\uff1f \u4ec0\u4e48\u662f\u5206\u5e93\u5206\u8868\uff1f \u5206\u5e93\u548c\u5206\u8868\u6709\u4e24\u79cd\u6a21\u5f0f\uff0c\u5782 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[3],"tags":[16,20],"class_list":["post-1172","post","type-post","status-publish","format-standard","hentry","category-3","tag-sql","tag-20"],"_links":{"self":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1172"}],"version-history":[{"count":1,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1172\/revisions"}],"predecessor-version":[{"id":1173,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/1172\/revisions\/1173"}],"wp:attachment":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}