Task: Use Redis to rate-limit your low-code API

n8n workflow JSON:
{"nodes":[{"name":"Airtable","type":"n8n-nodes-base.airtable","position":[1650,300],"parameters":{"table":"Pokemon","operation":"list","additionalOptions":{}},"credentials":{"airtableApi":"Airtable Credentials @n8n"},"typeVersion":1},{"name":"Redis","type":"n8n-nodes-base.redis","position":[600,600],"parameters":{"key":"={{$json[\"apiKey\"]}}","ttl":3600,"expire":true,"operation":"incr"},"credentials":{"redis":"Redis Cloud Credentials"},"typeVersion":1},{"name":"Redis1","type":"n8n-nodes-base.redis","position":[1200,450],"parameters":{"key":"={{$json[\"apiKey\"]}}","operation":"incr"},"credentials":{"redis":"Redis Cloud Credentials"},"typeVersion":1},{"name":"Set1","type":"n8n-nodes-base.set","position":[1600,550],"parameters":{"values":{"string":[{"name":"message","value":"You exceeded your limit"}]},"options":{},"keepOnlySet":true},"typeVersion":1},{"name":"Webhook1","type":"n8n-nodes-base.webhook","position":[200,600],"webhookId":"a3167ed7-98d2-422c-bfe2-e3ba599d19f1","parameters":{"path":"a3167ed7-98d2-422c-bfe2-e3ba599d19f1","options":{},"responseMode":"lastNode","authentication":"headerAuth"},"credentials":{"httpHeaderAuth":"Credential Example"},"typeVersion":1},{"name":"Function","type":"n8n-nodes-base.function","position":[1900,300],"parameters":{"functionCode":" const limit = `Limit consumed: `+ $node['Redis1'].json[$node[\"Set2\"].json[\"apiKey\"]];\n return [\n  {\n    json: {\n      message:limit,\n      body: items.map(item => {\n        const name= item.json.fields.name\n        const url= item.json.fields.url\n        return {name,url}\n      })\n    }\n  }\n]\n"},"typeVersion":1},{"name":"Set","type":"n8n-nodes-base.set","position":[400,600],"parameters":{"values":{"string":[{"name":"apiKey","value":"={{$json[\"headers\"][\"x-api-key\"] +'-'+ new Date().getHours() +'-'+ new Date().getMinutes()}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1},{"name":"Set2","type":"n8n-nodes-base.set","position":[1000,450],"parameters":{"values":{"string":[{"name":"apiKey","value":"={{$node['Webhook1'].json[\"headers\"][\"x-api-key\"] +'-'+ new Date().getHours()}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1},{"name":"Set3","type":"n8n-nodes-base.set","position":[1000,700],"parameters":{"values":{"string":[{"name":"message","value":"You exceeded your limit"}]},"options":{},"keepOnlySet":true},"typeVersion":1},{"name":"Per hour","type":"n8n-nodes-base.if","position":[1400,450],"parameters":{"conditions":{"number":[{"value1":"={{$json[$node[\"Set2\"].json[\"apiKey\"]]}}","value2":60}],"string":[]}},"typeVersion":1},{"name":"Per minute","type":"n8n-nodes-base.if","position":[800,600],"parameters":{"conditions":{"number":[{"value1":"={{$json[$node[\"Set\"].json[\"apiKey\"]]}}","value2":10,"operation":"smallerEqual"}]}},"typeVersion":1}],"connections":{"Set":{"main":[[{"node":"Redis","type":"main","index":0}]]},"Set2":{"main":[[{"node":"Redis1","type":"main","index":0}]]},"Redis":{"main":[[{"node":"Per minute","type":"main","index":0}]]},"Redis1":{"main":[[{"node":"Per hour","type":"main","index":0}]]},"Airtable":{"main":[[{"node":"Function","type":"main","index":0}]]},"Per hour":{"main":[[{"node":"Airtable","type":"main","index":0}],[{"node":"Set1","type":"main","index":0}]]},"Webhook1":{"main":[[{"node":"Set","type":"main","index":0}]]},"Per minute":{"main":[[{"node":"Set2","type":"main","index":0}],[{"node":"Set3","type":"main","index":0}]]}}}