@yroshcha/node-red-contrib-redis-full 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +2 -2
- package/examples/redis-basics.json +169 -0
- package/examples/redis-stream-operations.json +216 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## 2.0.1 — 2026-09-07
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added importable examples for every public palette node: Redis basics, Streams consumption, and Streams operations. This satisfies the Flow Library scorecard rule that every non-config node appears in an example flow.
|
|
10
|
+
|
|
5
11
|
## 2.0.0 — 2026-09-07
|
|
6
12
|
|
|
7
13
|
### Breaking changes
|
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ For a local archive, use `npm install /path/to/yroshcha-node-red-contrib-redis-f
|
|
|
45
45
|
|
|
46
46
|
## Release status
|
|
47
47
|
|
|
48
|
-
**`2.0.
|
|
48
|
+
**`2.0.1` is the current stable release.** See [CHANGELOG.md](CHANGELOG.md) for release notes and compatibility information.
|
|
49
49
|
|
|
50
50
|
## Production profile
|
|
51
51
|
|
|
@@ -124,7 +124,7 @@ Run `redis consumer gc` from an input message, typically a scheduled Inject node
|
|
|
124
124
|
|
|
125
125
|
## Example flow
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
After installing the palette, open **Import → Examples**. The package provides short, self-contained flows for Redis basics, Redis Streams consumption, and Redis Streams operations. They use a local Redis configuration and `example:*` keys so you can inspect and adapt them safely.
|
|
128
128
|
|
|
129
129
|
```
|
|
130
130
|
[yroshcha-redis-config] ← shared configuration for all nodes below
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "redis-basics-example-tab",
|
|
4
|
+
"type": "tab",
|
|
5
|
+
"label": "Redis basics",
|
|
6
|
+
"disabled": false,
|
|
7
|
+
"info": "Short, independent examples for commands, transactions, scanning, and Pub/Sub. Set the config node to a Redis server before deploying."
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "redis-basics-example-note",
|
|
11
|
+
"type": "comment",
|
|
12
|
+
"z": "redis-basics-example-tab",
|
|
13
|
+
"name": "Redis basics: command, MULTI/EXEC, SCAN, and Pub/Sub",
|
|
14
|
+
"info": "Each branch is independent. Click its Inject node after configuring Redis. The subscription starts when the flow is deployed and writes received messages to Debug.",
|
|
15
|
+
"x": 340,
|
|
16
|
+
"y": 60,
|
|
17
|
+
"wires": []
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "redis-basics-example-config",
|
|
21
|
+
"type": "yroshcha-redis-config",
|
|
22
|
+
"name": "Local Redis",
|
|
23
|
+
"host": "127.0.0.1",
|
|
24
|
+
"port": "6379",
|
|
25
|
+
"db": "0",
|
|
26
|
+
"username": "",
|
|
27
|
+
"tls": false,
|
|
28
|
+
"cluster": false,
|
|
29
|
+
"connectTimeout": "10000",
|
|
30
|
+
"commandTimeout": "30000",
|
|
31
|
+
"retryMaxDelay": "30000"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "redis-basics-ping-inject",
|
|
35
|
+
"type": "inject",
|
|
36
|
+
"z": "redis-basics-example-tab",
|
|
37
|
+
"name": "Run PING",
|
|
38
|
+
"props": [{ "p": "payload" }],
|
|
39
|
+
"payload": "",
|
|
40
|
+
"payloadType": "date",
|
|
41
|
+
"x": 130,
|
|
42
|
+
"y": 140,
|
|
43
|
+
"wires": [["redis-basics-ping"]]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "redis-basics-ping",
|
|
47
|
+
"type": "yroshcha-redis-command",
|
|
48
|
+
"z": "redis-basics-example-tab",
|
|
49
|
+
"name": "PING",
|
|
50
|
+
"server": "redis-basics-example-config",
|
|
51
|
+
"command": "PING",
|
|
52
|
+
"allowMsgCommand": false,
|
|
53
|
+
"block": false,
|
|
54
|
+
"x": 320,
|
|
55
|
+
"y": 140,
|
|
56
|
+
"wires": [["redis-basics-ping-debug"]]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "redis-basics-ping-debug",
|
|
60
|
+
"type": "debug",
|
|
61
|
+
"z": "redis-basics-example-tab",
|
|
62
|
+
"name": "PING result",
|
|
63
|
+
"active": true,
|
|
64
|
+
"tosidebar": true,
|
|
65
|
+
"complete": "payload",
|
|
66
|
+
"targetType": "msg",
|
|
67
|
+
"x": 500,
|
|
68
|
+
"y": 140,
|
|
69
|
+
"wires": []
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "redis-basics-multi-inject",
|
|
73
|
+
"type": "inject",
|
|
74
|
+
"z": "redis-basics-example-tab",
|
|
75
|
+
"name": "Run transaction",
|
|
76
|
+
"props": [{ "p": "commands", "v": "[[\"set\",\"example:counter\",\"0\"],[\"incr\",\"example:counter\"]]", "vt": "json" }],
|
|
77
|
+
"x": 140,
|
|
78
|
+
"y": 200,
|
|
79
|
+
"wires": [["redis-basics-multi"]]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "redis-basics-multi",
|
|
83
|
+
"type": "yroshcha-redis-multi",
|
|
84
|
+
"z": "redis-basics-example-tab",
|
|
85
|
+
"name": "MULTI / EXEC",
|
|
86
|
+
"server": "redis-basics-example-config",
|
|
87
|
+
"x": 330,
|
|
88
|
+
"y": 200,
|
|
89
|
+
"wires": [["redis-basics-multi-debug"]]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "redis-basics-multi-debug",
|
|
93
|
+
"type": "debug",
|
|
94
|
+
"z": "redis-basics-example-tab",
|
|
95
|
+
"name": "Transaction result",
|
|
96
|
+
"active": true,
|
|
97
|
+
"tosidebar": true,
|
|
98
|
+
"complete": "payload",
|
|
99
|
+
"targetType": "msg",
|
|
100
|
+
"x": 520,
|
|
101
|
+
"y": 200,
|
|
102
|
+
"wires": []
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "redis-basics-scan-inject",
|
|
106
|
+
"type": "inject",
|
|
107
|
+
"z": "redis-basics-example-tab",
|
|
108
|
+
"name": "Scan keys",
|
|
109
|
+
"props": [{ "p": "payload" }],
|
|
110
|
+
"payload": "",
|
|
111
|
+
"payloadType": "date",
|
|
112
|
+
"x": 130,
|
|
113
|
+
"y": 260,
|
|
114
|
+
"wires": [["redis-basics-scan"]]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "redis-basics-scan",
|
|
118
|
+
"type": "yroshcha-redis-scan",
|
|
119
|
+
"z": "redis-basics-example-tab",
|
|
120
|
+
"name": "SCAN up to 100 keys",
|
|
121
|
+
"server": "redis-basics-example-config",
|
|
122
|
+
"scanType": "SCAN",
|
|
123
|
+
"count": "100",
|
|
124
|
+
"maxResults": "100",
|
|
125
|
+
"x": 345,
|
|
126
|
+
"y": 260,
|
|
127
|
+
"wires": [["redis-basics-scan-debug"]]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "redis-basics-scan-debug",
|
|
131
|
+
"type": "debug",
|
|
132
|
+
"z": "redis-basics-example-tab",
|
|
133
|
+
"name": "Keys",
|
|
134
|
+
"active": true,
|
|
135
|
+
"tosidebar": true,
|
|
136
|
+
"complete": "payload",
|
|
137
|
+
"targetType": "msg",
|
|
138
|
+
"x": 510,
|
|
139
|
+
"y": 260,
|
|
140
|
+
"wires": []
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "redis-basics-subscribe",
|
|
144
|
+
"type": "yroshcha-redis-subscribe",
|
|
145
|
+
"z": "redis-basics-example-tab",
|
|
146
|
+
"name": "Subscribe example:notifications",
|
|
147
|
+
"server": "redis-basics-example-config",
|
|
148
|
+
"mode": "subscribe",
|
|
149
|
+
"channels": "example:notifications",
|
|
150
|
+
"topic": "",
|
|
151
|
+
"timeout": "0",
|
|
152
|
+
"x": 240,
|
|
153
|
+
"y": 340,
|
|
154
|
+
"wires": [["redis-basics-subscribe-debug"]]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": "redis-basics-subscribe-debug",
|
|
158
|
+
"type": "debug",
|
|
159
|
+
"z": "redis-basics-example-tab",
|
|
160
|
+
"name": "Received notification",
|
|
161
|
+
"active": true,
|
|
162
|
+
"tosidebar": true,
|
|
163
|
+
"complete": "true",
|
|
164
|
+
"targetType": "full",
|
|
165
|
+
"x": 515,
|
|
166
|
+
"y": 340,
|
|
167
|
+
"wires": []
|
|
168
|
+
}
|
|
169
|
+
]
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "redis-stream-ops-example-tab",
|
|
4
|
+
"type": "tab",
|
|
5
|
+
"label": "Redis Streams operations",
|
|
6
|
+
"disabled": false,
|
|
7
|
+
"info": "On-demand operational flows for a Redis Streams consumer group. Configure the stream and group names before using any Inject node."
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "redis-stream-ops-example-note",
|
|
11
|
+
"type": "comment",
|
|
12
|
+
"z": "redis-stream-ops-example-tab",
|
|
13
|
+
"name": "Redis Streams operations: metrics, recovery, consumer cleanup, and control",
|
|
14
|
+
"info": "Set the Redis config and example:events/example-workers values to match an existing stream and consumer group. These nodes run only when their Inject node is clicked. The HTTP API remains disabled until explicitly enabled in its edit dialog.",
|
|
15
|
+
"x": 390,
|
|
16
|
+
"y": 60,
|
|
17
|
+
"wires": []
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "redis-stream-ops-example-config",
|
|
21
|
+
"type": "yroshcha-redis-config",
|
|
22
|
+
"name": "Local Redis",
|
|
23
|
+
"host": "127.0.0.1",
|
|
24
|
+
"port": "6379",
|
|
25
|
+
"db": "0",
|
|
26
|
+
"username": "",
|
|
27
|
+
"tls": false,
|
|
28
|
+
"cluster": false,
|
|
29
|
+
"connectTimeout": "10000",
|
|
30
|
+
"commandTimeout": "30000",
|
|
31
|
+
"retryMaxDelay": "30000"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "redis-stream-ops-metrics-inject",
|
|
35
|
+
"type": "inject",
|
|
36
|
+
"z": "redis-stream-ops-example-tab",
|
|
37
|
+
"name": "Collect metrics",
|
|
38
|
+
"props": [{ "p": "payload" }],
|
|
39
|
+
"payload": "",
|
|
40
|
+
"payloadType": "date",
|
|
41
|
+
"x": 125,
|
|
42
|
+
"y": 140,
|
|
43
|
+
"wires": [["redis-stream-ops-metrics"]]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "redis-stream-ops-metrics",
|
|
47
|
+
"type": "yroshcha-redis-stream-metrics",
|
|
48
|
+
"z": "redis-stream-ops-example-tab",
|
|
49
|
+
"name": "Metrics for example-workers",
|
|
50
|
+
"server": "redis-stream-ops-example-config",
|
|
51
|
+
"streamKey": "example:events",
|
|
52
|
+
"group": "example-workers",
|
|
53
|
+
"deadLetterStream": "",
|
|
54
|
+
"x": 350,
|
|
55
|
+
"y": 140,
|
|
56
|
+
"wires": [["redis-stream-ops-metrics-debug"]]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "redis-stream-ops-metrics-debug",
|
|
60
|
+
"type": "debug",
|
|
61
|
+
"z": "redis-stream-ops-example-tab",
|
|
62
|
+
"name": "Metrics",
|
|
63
|
+
"active": true,
|
|
64
|
+
"tosidebar": true,
|
|
65
|
+
"complete": "payload",
|
|
66
|
+
"targetType": "msg",
|
|
67
|
+
"x": 560,
|
|
68
|
+
"y": 140,
|
|
69
|
+
"wires": []
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "redis-stream-ops-claim-inject",
|
|
73
|
+
"type": "inject",
|
|
74
|
+
"z": "redis-stream-ops-example-tab",
|
|
75
|
+
"name": "Recover idle pending entries",
|
|
76
|
+
"props": [{ "p": "payload" }],
|
|
77
|
+
"payload": "",
|
|
78
|
+
"payloadType": "date",
|
|
79
|
+
"x": 165,
|
|
80
|
+
"y": 200,
|
|
81
|
+
"wires": [["redis-stream-ops-claim"]]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "redis-stream-ops-claim",
|
|
85
|
+
"type": "yroshcha-redis-stream-claim",
|
|
86
|
+
"z": "redis-stream-ops-example-tab",
|
|
87
|
+
"name": "Claim entries idle for 60s",
|
|
88
|
+
"server": "redis-stream-ops-example-config",
|
|
89
|
+
"streamKey": "example:events",
|
|
90
|
+
"group": "example-workers",
|
|
91
|
+
"consumer": "recovery-worker",
|
|
92
|
+
"minIdleMs": "60000",
|
|
93
|
+
"count": "100",
|
|
94
|
+
"maxMessages": "1000",
|
|
95
|
+
"x": 410,
|
|
96
|
+
"y": 200,
|
|
97
|
+
"wires": [["redis-stream-ops-claim-debug"]]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "redis-stream-ops-claim-debug",
|
|
101
|
+
"type": "debug",
|
|
102
|
+
"z": "redis-stream-ops-example-tab",
|
|
103
|
+
"name": "Claimed entries",
|
|
104
|
+
"active": true,
|
|
105
|
+
"tosidebar": true,
|
|
106
|
+
"complete": "payload",
|
|
107
|
+
"targetType": "msg",
|
|
108
|
+
"x": 625,
|
|
109
|
+
"y": 200,
|
|
110
|
+
"wires": []
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "redis-stream-ops-gc-inject",
|
|
114
|
+
"type": "inject",
|
|
115
|
+
"z": "redis-stream-ops-example-tab",
|
|
116
|
+
"name": "Remove idle consumers",
|
|
117
|
+
"props": [{ "p": "payload" }],
|
|
118
|
+
"payload": "",
|
|
119
|
+
"payloadType": "date",
|
|
120
|
+
"x": 145,
|
|
121
|
+
"y": 260,
|
|
122
|
+
"wires": [["redis-stream-ops-gc"]]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "redis-stream-ops-gc",
|
|
126
|
+
"type": "yroshcha-redis-stream-gc",
|
|
127
|
+
"z": "redis-stream-ops-example-tab",
|
|
128
|
+
"name": "Clean consumers idle for 10 min",
|
|
129
|
+
"server": "redis-stream-ops-example-config",
|
|
130
|
+
"streamKey": "example:events",
|
|
131
|
+
"group": "example-workers",
|
|
132
|
+
"minIdleMs": "600000",
|
|
133
|
+
"x": 405,
|
|
134
|
+
"y": 260,
|
|
135
|
+
"wires": [["redis-stream-ops-gc-debug"]]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "redis-stream-ops-gc-debug",
|
|
139
|
+
"type": "debug",
|
|
140
|
+
"z": "redis-stream-ops-example-tab",
|
|
141
|
+
"name": "Cleanup result",
|
|
142
|
+
"active": true,
|
|
143
|
+
"tosidebar": true,
|
|
144
|
+
"complete": "payload",
|
|
145
|
+
"targetType": "msg",
|
|
146
|
+
"x": 625,
|
|
147
|
+
"y": 260,
|
|
148
|
+
"wires": []
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "redis-stream-ops-pause-inject",
|
|
152
|
+
"type": "inject",
|
|
153
|
+
"z": "redis-stream-ops-example-tab",
|
|
154
|
+
"name": "Pause local consumers",
|
|
155
|
+
"props": [{ "p": "action", "v": "pause", "vt": "str" }],
|
|
156
|
+
"x": 145,
|
|
157
|
+
"y": 340,
|
|
158
|
+
"wires": [["redis-stream-ops-control"]]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "redis-stream-ops-resume-inject",
|
|
162
|
+
"type": "inject",
|
|
163
|
+
"z": "redis-stream-ops-example-tab",
|
|
164
|
+
"name": "Resume local consumers",
|
|
165
|
+
"props": [{ "p": "action", "v": "resume", "vt": "str" }],
|
|
166
|
+
"x": 145,
|
|
167
|
+
"y": 390,
|
|
168
|
+
"wires": [["redis-stream-ops-control"]]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "redis-stream-ops-control",
|
|
172
|
+
"type": "yroshcha-redis-stream-control",
|
|
173
|
+
"z": "redis-stream-ops-example-tab",
|
|
174
|
+
"name": "Control local xreadgroup nodes",
|
|
175
|
+
"x": 405,
|
|
176
|
+
"y": 365,
|
|
177
|
+
"wires": [["redis-stream-ops-control-debug"]]
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "redis-stream-ops-control-debug",
|
|
181
|
+
"type": "debug",
|
|
182
|
+
"z": "redis-stream-ops-example-tab",
|
|
183
|
+
"name": "Control result",
|
|
184
|
+
"active": true,
|
|
185
|
+
"tosidebar": true,
|
|
186
|
+
"complete": "payload",
|
|
187
|
+
"targetType": "msg",
|
|
188
|
+
"x": 645,
|
|
189
|
+
"y": 365,
|
|
190
|
+
"wires": []
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"id": "redis-stream-ops-api",
|
|
194
|
+
"type": "yroshcha-redis-stream-api",
|
|
195
|
+
"z": "redis-stream-ops-example-tab",
|
|
196
|
+
"name": "Optional Streams HTTP API (disabled)",
|
|
197
|
+
"enabled": false,
|
|
198
|
+
"requireToken": false,
|
|
199
|
+
"x": 265,
|
|
200
|
+
"y": 460,
|
|
201
|
+
"wires": [["redis-stream-ops-api-debug"]]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"id": "redis-stream-ops-api-debug",
|
|
205
|
+
"type": "debug",
|
|
206
|
+
"z": "redis-stream-ops-example-tab",
|
|
207
|
+
"name": "HTTP API result",
|
|
208
|
+
"active": true,
|
|
209
|
+
"tosidebar": true,
|
|
210
|
+
"complete": "payload",
|
|
211
|
+
"targetType": "msg",
|
|
212
|
+
"x": 540,
|
|
213
|
+
"y": 460,
|
|
214
|
+
"wires": []
|
|
215
|
+
}
|
|
216
|
+
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yroshcha/node-red-contrib-redis-full",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Production-oriented Redis palette for Node-RED: generic commands, Pub/Sub, scans, transactions, and Redis Streams consumer groups.",
|
|
5
5
|
"keywords": ["node-red", "redis", "redis-streams", "pubsub", "xadd", "xreadgroup", "ioredis"],
|
|
6
6
|
"license": "MIT",
|