{"id":730,"date":"2025-02-26T11:01:16","date_gmt":"2025-02-26T03:01:16","guid":{"rendered":"https:\/\/www.huangkeqin.cn\/?p=730"},"modified":"2025-04-03T15:58:38","modified_gmt":"2025-04-03T07:58:38","slug":"lua%e8%84%9a%e6%9c%ac%e5%9c%a8java%e5%bc%80%e5%8f%91%e4%b8%ad%e7%9a%84%e5%ba%94%e7%94%a8-%e8%a7%a3%e5%86%b3redis%e5%8e%9f%e5%ad%90%e6%80%a7%e9%97%ae%e9%a2%98","status":"publish","type":"post","link":"https:\/\/www.huangkeqin.cn\/index.php\/2025\/02\/26\/lua%e8%84%9a%e6%9c%ac%e5%9c%a8java%e5%bc%80%e5%8f%91%e4%b8%ad%e7%9a%84%e5%ba%94%e7%94%a8-%e8%a7%a3%e5%86%b3redis%e5%8e%9f%e5%ad%90%e6%80%a7%e9%97%ae%e9%a2%98\/","title":{"rendered":"Lua\u811a\u672c\u5728Java\u5f00\u53d1\u4e2d\u7684\u5e94\u7528\u2014\u2014\u89e3\u51b3Redis\u539f\u5b50\u6027\u95ee\u9898"},"content":{"rendered":"\n<div class=\"wp-block-group has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"wp-block-paragraph\">Lua \u811a\u672c\u53ef\u4ee5<strong>\u786e\u4fdd\u5728 Redis \u4e2d\u539f\u5b50\u5730\u5b58\u50a8 Hash \u6570\u636e\uff0c\u5e76\u540c\u65f6\u8bbe\u7f6e Key \u7684\u8fc7\u671f\u65f6\u95f4<\/strong>\uff0c\u9632\u6b62 Redis <strong>\u5728\u4e24\u6b65\u64cd\u4f5c\u4e4b\u95f4\u53d1\u751f\u5b95\u673a<\/strong>\uff0c\u4ece\u800c\u5bfc\u81f4\u7f13\u5b58\u6570\u636e\u672a\u80fd\u6b63\u786e\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. \u4f20\u7edf\u65b9\u5f0f\u7684\u95ee\u9898<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5047\u8bbe\u6211\u4eec\u76f4\u63a5\u7528 Java \u4ee3\u7801\u6267\u884c HMSET \u548c EXPIREAT\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stringRedisTemplate.opsForHash().putAll(couponTemplateCacheKey, actualCacheTargetMap);\nstringRedisTemplate.expireAt(couponTemplateCacheKey, couponTemplateDO.getValidEndTime());\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u53ef\u80fd\u4f1a\u51fa\u73b0<strong>\u6781\u7aef\u60c5\u51b5<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HMSET \u6267\u884c\u5b8c\uff0c\u6570\u636e\u6210\u529f\u5b58\u5165 Redis\u3002<\/li>\n\n\n\n<li><strong>\u4f46\u5728\u6267\u884c EXPIREAT \u4e4b\u524d\uff0cRedis \u5b95\u673a\u4e86<\/strong>\uff0c\u5bfc\u81f4\u8fd9\u4e2a Key <strong>\u4e0d\u4f1a\u8fc7\u671f<\/strong>\uff0c\u5f62\u6210<strong>\u810f\u6570\u636e<\/strong>\uff08\u6570\u636e\u6c38\u8fdc\u7559\u5728 Redis\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. \u89e3\u51b3\u65b9\u6848\uff1a\u4f7f\u7528 Lua \u811a\u672c<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lua \u811a\u672c<\/strong>\u5728 Redis \u4e2d\u662f<strong>\u539f\u5b50\u6267\u884c\u7684<\/strong>\uff0cRedis <strong>\u4e0d\u4f1a\u5728\u6267\u884c\u811a\u672c\u7684\u8fc7\u7a0b\u4e2d\u88ab\u5176\u4ed6\u547d\u4ee4\u6253\u65ad<\/strong>\uff0c\u6240\u4ee5\u53ef\u4ee5\u4fdd\u8bc1 HMSET \u548c EXPIREAT \u8981\u4e48 <strong>\u5168\u90e8\u6210\u529f<\/strong>\uff0c\u8981\u4e48 <strong>\u5168\u90e8\u5931\u8d25<\/strong>\uff0c\u4ece\u800c\u907f\u514d\u5b95\u673a\u5bfc\u81f4\u6570\u636e\u6c38\u4e45\u5b58\u50a8\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Lua \u811a\u672c<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>redis.call('HMSET', KEYS&#91;1], unpack(ARGV, 1, #ARGV - 1)) \nredis.call('EXPIREAT', KEYS&#91;1], ARGV&#91;#ARGV])\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u89e3\u91ca<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>redis.call(&#8216;HMSET&#8217;, KEYS[1], unpack(ARGV, 1, #ARGV &#8211; 1))<\/strong>\n<ul class=\"wp-block-list\">\n<li>HMSET \u7528\u4e8e\u5b58\u50a8 Hash \u6570\u636e\u3002<\/li>\n\n\n\n<li>KEYS[1] \u662f Redis \u7684 Key\uff08\u8fd9\u91cc\u662f couponTemplateCacheKey\uff09\u3002<\/li>\n\n\n\n<li>unpack(ARGV, 1, #ARGV &#8211; 1) \u4ee3\u8868 ARGV \u4e2d\u7684<strong>\u524d N-1 \u4e2a\u53c2\u6570<\/strong>\uff0c\u7528\u4e8e HMSET\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>redis.call(&#8216;EXPIREAT&#8217;, KEYS[1], ARGV[#ARGV])<\/strong>\n<ul class=\"wp-block-list\">\n<li>EXPIREAT \u8bbe\u7f6e Key \u7684\u8fc7\u671f\u65f6\u95f4\uff0c\u786e\u4fdd Key <strong>\u5728\u6307\u5b9a\u7684 Unix \u65f6\u95f4\u6233\u81ea\u52a8\u5220\u9664<\/strong>\u3002<\/li>\n\n\n\n<li>ARGV[#ARGV] \u83b7\u53d6 ARGV \u7684\u6700\u540e\u4e00\u4e2a\u53c2\u6570\uff0c\u5373<strong>\u8fc7\u671f\u65f6\u95f4\uff08Unix \u65f6\u95f4\u6233\uff0c\u79d2\u7ea7\u522b\uff09<\/strong>\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Java \u4ee3\u7801\u89e3\u6790<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.1 \u5b9a\u4e49 Lua \u811a\u672c<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>String luaScript = \"redis.call('HMSET', KEYS&#91;1], unpack(ARGV, 1, #ARGV - 1)) \" +\n        \"redis.call('EXPIREAT', KEYS&#91;1], ARGV&#91;#ARGV])\";\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u6bb5 Lua \u4ee3\u7801\u4f1a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4e00\u6b65\u5b8c\u6210<\/strong>\u5b58\u50a8\u6570\u636e\uff08HMSET\uff09\u3002<\/li>\n\n\n\n<li><strong>\u7d27\u63a5\u7740<\/strong>\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\uff08EXPIREAT\uff09\uff0c\u786e\u4fdd\u6570\u636e\u4e0d\u4f1a\u610f\u5916\u6c38\u4e45\u5b58\u7559\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.2 \u51c6\u5907 Redis Key<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;String&gt; keys = Collections.singletonList(couponTemplateCacheKey);\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>keys \u4ee3\u8868 Redis \u7684 Key\uff08\u5373 couponTemplateCacheKey\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.3 \u6784\u9020 Lua \u811a\u672c\u7684\u53c2\u6570<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>List&lt;String&gt; args = new ArrayList&lt;&gt;(actualCacheTargetMap.size() * 2 + 1);\nactualCacheTargetMap.forEach((key, value) -&gt; {\n    args.add(key);\n    args.add(value);\n});\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>actualCacheTargetMap \u662f\u9700\u8981\u5b58\u5165 Redis \u7684 Hash \u6570\u636e\uff08<strong>\u591a\u4e2a\u5b57\u6bb5\u548c\u503c<\/strong>\uff09\u3002<\/li>\n\n\n\n<li>\u8fd9\u91cc\u628a actualCacheTargetMap \u8f6c\u6362\u4e3a <strong>\u4e00\u7ef4\u6570\u7ec4\u5f62\u5f0f<\/strong>\uff0c\u7528\u4e8e\u4f20\u5165 Lua \u7684 ARGV\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.4 \u6dfb\u52a0 Key \u7684\u8fc7\u671f\u65f6\u95f4<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>args.add(String.valueOf(couponTemplateDO.getValidEndTime().getTime() \/ 1000));\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>couponTemplateDO.getValidEndTime().getTime() \u4ee5 <strong>\u6beb\u79d2\u7ea7<\/strong> \u8fd4\u56de\u65f6\u95f4\u3002<\/li>\n\n\n\n<li>\/ 1000 \u8f6c\u6362\u4e3a <strong>\u79d2\u7ea7 Unix \u65f6\u95f4\u6233<\/strong>\uff0c\u7b26\u5408 EXPIREAT \u7684\u8981\u6c42\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.5 \u6267\u884c Lua \u811a\u672c<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>stringRedisTemplate.execute(\n        new DefaultRedisScript&lt;&gt;(luaScript, Long.class),\n        keys,\n        args.toArray()\n);\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>DefaultRedisScript&lt;>(luaScript, Long.class)<\/strong>\uff1a\u521b\u5efa\u4e00\u4e2a <strong>Redis \u811a\u672c\u5bf9\u8c61<\/strong>\uff0c\u8fd4\u56de\u503c\u662f Long \u7c7b\u578b\u3002<\/li>\n\n\n\n<li><strong>keys<\/strong>\uff1a\u4f20\u5165 Redis Key\u3002<\/li>\n\n\n\n<li><strong>args.toArray()<\/strong>\uff1a\u4f20\u5165 <strong>Hash \u5b57\u6bb5\u548c\u503c + \u8fc7\u671f\u65f6\u95f4<\/strong> \u4f5c\u4e3a ARGV \u53c2\u6570\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. \u603b\u7ed3<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u65b9\u6848<\/th><th>\u53ef\u80fd\u95ee\u9898<\/th><th>\u662f\u5426\u539f\u5b50\u6267\u884c<\/th><\/tr><\/thead><tbody><tr><td><strong>\u666e\u901a Java \u4ee3\u7801<\/strong><\/td><td>HMSET \u6267\u884c\u540e\uff0cEXPIREAT \u53ef\u80fd\u56e0 Redis \u5b95\u673a\u672a\u6267\u884c\uff0c\u5bfc\u81f4\u7f13\u5b58\u6570\u636e\u4e0d\u4f1a\u81ea\u52a8\u8fc7\u671f<\/td><td>\u274c \u4e0d\u662f\u539f\u5b50\u64cd\u4f5c<\/td><\/tr><tr><td><strong>Lua \u811a\u672c<\/strong><\/td><td>HMSET \u548c EXPIREAT \u5728 Redis \u5185\u90e8\u539f\u5b50\u6267\u884c\uff0c\u4e0d\u4f1a\u88ab\u4e2d\u65ad\uff0c\u4fdd\u8bc1 Key <strong>\u4e00\u5b9a\u6709\u8fc7\u671f\u65f6\u95f4<\/strong><\/td><td>\u2705 100% \u539f\u5b50\u64cd\u4f5c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. \u9002\u7528\u573a\u666f<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 <strong>\u5206\u5e03\u5f0f\u7f13\u5b58<\/strong>\uff1a\u9632\u6b62\u7f13\u5b58\u6570\u636e\u56e0\u4e3a Redis \u5b95\u673a\u800c\u6c38\u4e45\u5b58\u50a8\u3002<br>\u2705 <strong>\u79d2\u6740 \/ \u9650\u6d41<\/strong>\uff1a\u4fdd\u8bc1 Redis \u7684\u9650\u6d41\u6570\u636e\u4e00\u5b9a\u4f1a\u81ea\u52a8\u8fc7\u671f\u3002<br>\u2705 <strong>\u9ad8\u5e76\u53d1\u573a\u666f<\/strong>\uff1a\u51cf\u5c11 Redis \u7f51\u7edc\u5f00\u9500\uff0c\u63d0\u9ad8\u6267\u884c\u6548\u7387\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Redis <strong>\u9700\u8981\u540c\u65f6\u5b58\u50a8\u6570\u636e\u5e76\u4fdd\u8bc1\u81ea\u52a8\u8fc7\u671f<\/strong> \u7684\u60c5\u51b5\u4e0b\uff0c<strong>Lua \u811a\u672c\u662f\u6700\u5b89\u5168\u7684\u65b9\u6848\uff01<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 \u5728<strong>Java \u5b9a\u4e49 Lua \u811a\u672c\uff0c\u53ef\u4ee5\u662fxxx.lua\u6587\u4ef6\uff0c\u4e5f\u53ef\u662f\u5199\u6210\u5b57\u7b26\u4e32\uff0c\u5e76\u5c06\u5b83\u53d1\u9001\u7ed9 Redis \u670d\u52a1\u5668<\/strong>\uff0c\u771f\u6b63\u7684 \u662f <strong>\u5728 Redis \u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\u7684<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u6837\u505a\u7684\u597d\u5904\u662f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u51cf\u5c11 Java \u4e0e Redis \u4e4b\u95f4\u7684\u7f51\u7edc\u901a\u4fe1<\/strong>\uff08\u4e00\u6b21\u8bf7\u6c42\u6267\u884c\u591a\u4e2a\u547d\u4ee4\uff09\u3002<\/li>\n\n\n\n<li><strong>\u4fdd\u8bc1\u591a\u4e2a Redis \u547d\u4ee4\u7684\u539f\u5b50\u6027<\/strong>\uff0c\u907f\u514d\u5e76\u53d1\u95ee\u9898\u3002<\/li>\n\n\n\n<li><strong>\u63d0\u5347\u6027\u80fd<\/strong>\uff0c\u907f\u514d\u591a\u6b21\u8bf7\u6c42\u5e26\u6765\u7684\u5f00\u9500\u3002<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Java \u4ee3\u7801\u53ea\u662f\u628a Lua \u811a\u672c\u4f5c\u4e3a\u5b57\u7b26\u4e32\u4f20\u9012\u7ed9 Redis<\/strong> String luaScript = &#8220;redis.call(&#8216;SET&#8217;, KEYS[1], ARGV[1])&#8221;; \u8fd9\u91cc redis.call \u8fd8<strong>\u6ca1\u6709\u6267\u884c<\/strong>\uff0c\u53ea\u662f\u4e00\u4e2a<strong>\u5b57\u7b26\u4e32<\/strong>\u3002<\/li>\n\n\n\n<li><strong>Java \u901a\u8fc7 Redis \u5ba2\u6237\u7aef\uff08\u5982 Spring Data Redis\uff09\u628a\u8fd9\u4e2a Lua \u811a\u672c\u53d1\u9001\u7ed9 Redis<\/strong> stringRedisTemplate.execute( new DefaultRedisScript&lt;>(luaScript, String.class), Collections.singletonList(&#8220;name&#8221;), &#8220;huangkeqin&#8221; ); \u8fd9\u91cc Java <strong>\u53ea\u662f\u628a Lua \u4ee3\u7801\u4ea4\u7ed9 Redis \u670d\u52a1\u5668<\/strong>\uff0c\u6267\u884c\u7531 Redis \u8d1f\u8d23\u3002<\/li>\n\n\n\n<li><strong>Redis \u670d\u52a1\u5668\u63a5\u6536\u5230 Lua \u4ee3\u7801\u540e\uff0c\u5728\u5185\u90e8\u6267\u884c redis.call<\/strong> redis.call(&#8216;SET&#8217;, &#8216;name&#8217;, &#8216;huangkeqin&#8217;) \u8fd9\u4e2a\u547d\u4ee4<strong>\u662f\u5728 Redis \u670d\u52a1\u5668\u5185\u90e8\u6267\u884c\u7684<\/strong>\uff0c\u4e0d\u4f1a\u7ecf\u8fc7 Java \u7aef\u7684\u5904\u7406\uff0c\u4e5f\u4e0d\u4f1a\u88ab\u5176\u4ed6\u547d\u4ee4\u6253\u65ad\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\ude80 Java + Lua + Redis = \u9ad8\u6027\u80fd\u65b9\u6848<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java <strong>\u53ea\u662f\u4e00\u4e2a\u53d1\u9001 Lua \u811a\u672c\u7684\u5ba2\u6237\u7aef<\/strong>\uff0c\u4e0d\u6267\u884c Redis \u547d\u4ee4\u3002<\/li>\n\n\n\n<li>Redis <strong>\u771f\u6b63\u6267\u884c Lua \u811a\u672c<\/strong>\uff0c\u5e76\u5728\u670d\u52a1\u5668\u5185\u90e8\u5b8c\u6210\u6240\u6709\u64cd\u4f5c\u3002<\/li>\n\n\n\n<li>redis.call <strong>\u5fc5\u987b\u5728 Redis \u670d\u52a1\u5668\u5185\u90e8\u6267\u884c<\/strong>\uff0c\u5b83\u7684\u4f5c\u7528\u662f\u6267\u884c Redis \u547d\u4ee4\uff0c\u5e76\u8fd4\u56de\u7ed3\u679c\u7ed9 Java\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lua \u811a\u672c\u53ef\u4ee5\u786e\u4fdd\u5728 Redis \u4e2d\u539f\u5b50\u5730\u5b58\u50a8 Hash \u6570\u636e\uff0c\u5e76\u540c\u65f6\u8bbe\u7f6e Key \u7684\u8fc7\u671f\u65f6\u95f4\uff0c\u9632\u6b62 Red [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-730","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/posts\/730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/comments?post=730"}],"version-history":[{"count":7,"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/posts\/730\/revisions"}],"predecessor-version":[{"id":1066,"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/posts\/730\/revisions\/1066"}],"wp:attachment":[{"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/media?parent=730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/categories?post=730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.huangkeqin.cn\/index.php\/wp-json\/wp\/v2\/tags?post=730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}