@enjoys/context-engine 1.0.7 → 1.0.9

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.
@@ -0,0 +1,3405 @@
1
+ {
2
+ "language": "redis",
3
+ "completions": [
4
+ {
5
+ "label": "SET",
6
+ "kind": 15,
7
+ "detail": "Set key value",
8
+ "documentation": {
9
+ "value": "Set the string value of a key.\n\n```redis\nSET mykey \"hello\"\nSET mykey \"hello\" EX 60\nSET mykey \"hello\" NX\n```"
10
+ },
11
+ "insertText": "SET ${1:key} ${2:value}",
12
+ "insertTextRules": 4,
13
+ "sortText": "00_set"
14
+ },
15
+ {
16
+ "label": "SET EX",
17
+ "kind": 15,
18
+ "detail": "Set with expiry (seconds)",
19
+ "documentation": {
20
+ "value": "Set key with TTL in seconds.\n\n```redis\nSET session:abc token123 EX 3600\n```"
21
+ },
22
+ "insertText": "SET ${1:key} ${2:value} EX ${3:seconds}",
23
+ "insertTextRules": 4,
24
+ "sortText": "01_set_ex"
25
+ },
26
+ {
27
+ "label": "SET PX",
28
+ "kind": 15,
29
+ "detail": "Set with expiry (ms)",
30
+ "documentation": {
31
+ "value": "Set key with TTL in milliseconds.\n\n```redis\nSET key val PX 5000\n```"
32
+ },
33
+ "insertText": "SET ${1:key} ${2:value} PX ${3:milliseconds}",
34
+ "insertTextRules": 4,
35
+ "sortText": "02_set_px"
36
+ },
37
+ {
38
+ "label": "SET NX",
39
+ "kind": 15,
40
+ "detail": "Set if not exists",
41
+ "documentation": {
42
+ "value": "Set key only if it does not already exist.\n\n```redis\nSET lock:resource owner NX EX 30\n```"
43
+ },
44
+ "insertText": "SET ${1:key} ${2:value} NX",
45
+ "insertTextRules": 4,
46
+ "sortText": "03_set_nx"
47
+ },
48
+ {
49
+ "label": "SET XX",
50
+ "kind": 15,
51
+ "detail": "Set if exists",
52
+ "documentation": {
53
+ "value": "Set key only if it already exists.\n\n```redis\nSET mykey newval XX\n```"
54
+ },
55
+ "insertText": "SET ${1:key} ${2:value} XX",
56
+ "insertTextRules": 4,
57
+ "sortText": "04_set_xx"
58
+ },
59
+ {
60
+ "label": "SETNX",
61
+ "kind": 15,
62
+ "detail": "Set if not exists (legacy)",
63
+ "documentation": {
64
+ "value": "Set key to value if key does not exist. Returns 1 if set, 0 if not.\n\n```redis\nSETNX mykey \"Hello\"\n```"
65
+ },
66
+ "insertText": "SETNX ${1:key} ${2:value}",
67
+ "insertTextRules": 4,
68
+ "sortText": "05_setnx"
69
+ },
70
+ {
71
+ "label": "SETEX",
72
+ "kind": 15,
73
+ "detail": "Set with expiry",
74
+ "documentation": {
75
+ "value": "Set key to hold value with TTL in seconds.\n\n```redis\nSETEX session:id 3600 \"data\"\n```"
76
+ },
77
+ "insertText": "SETEX ${1:key} ${2:seconds} ${3:value}",
78
+ "insertTextRules": 4,
79
+ "sortText": "06_setex"
80
+ },
81
+ {
82
+ "label": "PSETEX",
83
+ "kind": 15,
84
+ "detail": "Set with ms expiry",
85
+ "documentation": {
86
+ "value": "Set key with TTL in milliseconds.\n\n```redis\nPSETEX mykey 100000 \"val\"\n```"
87
+ },
88
+ "insertText": "PSETEX ${1:key} ${2:milliseconds} ${3:value}",
89
+ "insertTextRules": 4,
90
+ "sortText": "07_psetex"
91
+ },
92
+ {
93
+ "label": "GET",
94
+ "kind": 15,
95
+ "detail": "Get value by key",
96
+ "documentation": {
97
+ "value": "Get the value of key. Returns nil if key does not exist.\n\n```redis\nGET mykey\n```"
98
+ },
99
+ "insertText": "GET ${1:key}",
100
+ "insertTextRules": 4,
101
+ "sortText": "08_get"
102
+ },
103
+ {
104
+ "label": "GETSET",
105
+ "kind": 15,
106
+ "detail": "Set and return old value",
107
+ "documentation": {
108
+ "value": "Atomically set key to value and return the old value.\n\n```redis\nGETSET counter 0\n```"
109
+ },
110
+ "insertText": "GETSET ${1:key} ${2:value}",
111
+ "insertTextRules": 4,
112
+ "sortText": "09_getset"
113
+ },
114
+ {
115
+ "label": "GETDEL",
116
+ "kind": 15,
117
+ "detail": "Get and delete",
118
+ "documentation": {
119
+ "value": "Get the value and delete the key atomically.\n\n```redis\nGETDEL tempkey\n```"
120
+ },
121
+ "insertText": "GETDEL ${1:key}",
122
+ "insertTextRules": 4,
123
+ "sortText": "10_getdel"
124
+ },
125
+ {
126
+ "label": "GETEX",
127
+ "kind": 15,
128
+ "detail": "Get and set expiry",
129
+ "documentation": {
130
+ "value": "Get value and optionally set expiration.\n\n```redis\nGETEX mykey EX 100\nGETEX mykey PERSIST\n```"
131
+ },
132
+ "insertText": "GETEX ${1:key} ${2|EX,PX,EXAT,PXAT,PERSIST|} ${3:value}",
133
+ "insertTextRules": 4,
134
+ "sortText": "11_getex"
135
+ },
136
+ {
137
+ "label": "MSET",
138
+ "kind": 15,
139
+ "detail": "Set multiple keys",
140
+ "documentation": {
141
+ "value": "Set multiple key-value pairs atomically.\n\n```redis\nMSET key1 \"Hello\" key2 \"World\"\n```"
142
+ },
143
+ "insertText": "MSET ${1:key1} ${2:val1} ${3:key2} ${4:val2}",
144
+ "insertTextRules": 4,
145
+ "sortText": "12_mset"
146
+ },
147
+ {
148
+ "label": "MGET",
149
+ "kind": 15,
150
+ "detail": "Get multiple keys",
151
+ "documentation": {
152
+ "value": "Get values of all specified keys.\n\n```redis\nMGET key1 key2 key3\n```"
153
+ },
154
+ "insertText": "MGET ${1:key1} ${2:key2}",
155
+ "insertTextRules": 4,
156
+ "sortText": "13_mget"
157
+ },
158
+ {
159
+ "label": "MSETNX",
160
+ "kind": 15,
161
+ "detail": "Set multiple if none exist",
162
+ "documentation": {
163
+ "value": "Set multiple keys only if none exist.\n\n```redis\nMSETNX key1 \"Hello\" key2 \"World\"\n```"
164
+ },
165
+ "insertText": "MSETNX ${1:key1} ${2:val1} ${3:key2} ${4:val2}",
166
+ "insertTextRules": 4,
167
+ "sortText": "14_msetnx"
168
+ },
169
+ {
170
+ "label": "APPEND",
171
+ "kind": 15,
172
+ "detail": "Append to string",
173
+ "documentation": {
174
+ "value": "Append a value to a key. Creates key if not exists.\n\n```redis\nAPPEND mykey \" World\"\n```"
175
+ },
176
+ "insertText": "APPEND ${1:key} ${2:value}",
177
+ "insertTextRules": 4,
178
+ "sortText": "15_append"
179
+ },
180
+ {
181
+ "label": "STRLEN",
182
+ "kind": 15,
183
+ "detail": "String length",
184
+ "documentation": {
185
+ "value": "Returns the length of the string stored at key.\n\n```redis\nSTRLEN mykey\n```"
186
+ },
187
+ "insertText": "STRLEN ${1:key}",
188
+ "insertTextRules": 4,
189
+ "sortText": "16_strlen"
190
+ },
191
+ {
192
+ "label": "GETRANGE",
193
+ "kind": 15,
194
+ "detail": "Get substring",
195
+ "documentation": {
196
+ "value": "Returns substring of the string value.\n\n```redis\nGETRANGE mykey 0 3\n```"
197
+ },
198
+ "insertText": "GETRANGE ${1:key} ${2:start} ${3:end}",
199
+ "insertTextRules": 4,
200
+ "sortText": "17_getrange"
201
+ },
202
+ {
203
+ "label": "SETRANGE",
204
+ "kind": 15,
205
+ "detail": "Overwrite part of string",
206
+ "documentation": {
207
+ "value": "Overwrite part of string at key starting at offset.\n\n```redis\nSETRANGE mykey 6 \"Redis\"\n```"
208
+ },
209
+ "insertText": "SETRANGE ${1:key} ${2:offset} ${3:value}",
210
+ "insertTextRules": 4,
211
+ "sortText": "18_setrange"
212
+ },
213
+ {
214
+ "label": "INCR",
215
+ "kind": 15,
216
+ "detail": "Increment by 1",
217
+ "documentation": {
218
+ "value": "Increment the integer value of a key by one.\n\n```redis\nINCR counter\n```"
219
+ },
220
+ "insertText": "INCR ${1:key}",
221
+ "insertTextRules": 4,
222
+ "sortText": "19_incr"
223
+ },
224
+ {
225
+ "label": "INCRBY",
226
+ "kind": 15,
227
+ "detail": "Increment by N",
228
+ "documentation": {
229
+ "value": "Increment the integer value by a given amount.\n\n```redis\nINCRBY counter 5\n```"
230
+ },
231
+ "insertText": "INCRBY ${1:key} ${2:increment}",
232
+ "insertTextRules": 4,
233
+ "sortText": "20_incrby"
234
+ },
235
+ {
236
+ "label": "INCRBYFLOAT",
237
+ "kind": 15,
238
+ "detail": "Increment by float",
239
+ "documentation": {
240
+ "value": "Increment the float value of a key.\n\n```redis\nINCRBYFLOAT price 2.5\n```"
241
+ },
242
+ "insertText": "INCRBYFLOAT ${1:key} ${2:increment}",
243
+ "insertTextRules": 4,
244
+ "sortText": "21_incrbyfloat"
245
+ },
246
+ {
247
+ "label": "DECR",
248
+ "kind": 15,
249
+ "detail": "Decrement by 1",
250
+ "documentation": {
251
+ "value": "Decrement the integer value of a key by one.\n\n```redis\nDECR counter\n```"
252
+ },
253
+ "insertText": "DECR ${1:key}",
254
+ "insertTextRules": 4,
255
+ "sortText": "22_decr"
256
+ },
257
+ {
258
+ "label": "DECRBY",
259
+ "kind": 15,
260
+ "detail": "Decrement by N",
261
+ "documentation": {
262
+ "value": "Decrement the integer value by a given amount.\n\n```redis\nDECRBY counter 5\n```"
263
+ },
264
+ "insertText": "DECRBY ${1:key} ${2:decrement}",
265
+ "insertTextRules": 4,
266
+ "sortText": "23_decrby"
267
+ },
268
+ {
269
+ "label": "SUBSTR",
270
+ "kind": 15,
271
+ "detail": "Get substring (deprecated)",
272
+ "documentation": {
273
+ "value": "Deprecated alias for GETRANGE.\n\n```redis\nSUBSTR mykey 0 3\n```"
274
+ },
275
+ "insertText": "SUBSTR ${1:key} ${2:start} ${3:end}",
276
+ "insertTextRules": 4,
277
+ "sortText": "24_substr"
278
+ },
279
+ {
280
+ "label": "LCS",
281
+ "kind": 15,
282
+ "detail": "Longest common substring",
283
+ "documentation": {
284
+ "value": "Find the longest common substring (Redis 7.0+).\n\n```redis\nLCS key1 key2\nLCS key1 key2 LEN\n```"
285
+ },
286
+ "insertText": "LCS ${1:key1} ${2:key2}",
287
+ "insertTextRules": 4,
288
+ "sortText": "25_lcs"
289
+ },
290
+ {
291
+ "label": "HSET",
292
+ "kind": 15,
293
+ "detail": "Set hash field",
294
+ "documentation": {
295
+ "value": "Set field in hash to value.\n\n```redis\nHSET user:1 name \"Alice\" age \"30\"\n```"
296
+ },
297
+ "insertText": "HSET ${1:key} ${2:field} ${3:value}",
298
+ "insertTextRules": 4,
299
+ "sortText": "26_hset"
300
+ },
301
+ {
302
+ "label": "HGET",
303
+ "kind": 15,
304
+ "detail": "Get hash field",
305
+ "documentation": {
306
+ "value": "Get value of a hash field.\n\n```redis\nHGET user:1 name\n```"
307
+ },
308
+ "insertText": "HGET ${1:key} ${2:field}",
309
+ "insertTextRules": 4,
310
+ "sortText": "27_hget"
311
+ },
312
+ {
313
+ "label": "HMSET",
314
+ "kind": 15,
315
+ "detail": "Set multiple hash fields",
316
+ "documentation": {
317
+ "value": "Set multiple fields in a hash.\n\n```redis\nHMSET user:1 name \"Alice\" age \"30\" email \"alice@example.com\"\n```"
318
+ },
319
+ "insertText": "HMSET ${1:key} ${2:field1} ${3:val1} ${4:field2} ${5:val2}",
320
+ "insertTextRules": 4,
321
+ "sortText": "28_hmset"
322
+ },
323
+ {
324
+ "label": "HMGET",
325
+ "kind": 15,
326
+ "detail": "Get multiple hash fields",
327
+ "documentation": {
328
+ "value": "Get values of multiple hash fields.\n\n```redis\nHMGET user:1 name age email\n```"
329
+ },
330
+ "insertText": "HMGET ${1:key} ${2:field1} ${3:field2}",
331
+ "insertTextRules": 4,
332
+ "sortText": "29_hmget"
333
+ },
334
+ {
335
+ "label": "HGETALL",
336
+ "kind": 15,
337
+ "detail": "Get all hash fields",
338
+ "documentation": {
339
+ "value": "Get all fields and values in a hash.\n\n```redis\nHGETALL user:1\n```"
340
+ },
341
+ "insertText": "HGETALL ${1:key}",
342
+ "insertTextRules": 4,
343
+ "sortText": "30_hgetall"
344
+ },
345
+ {
346
+ "label": "HDEL",
347
+ "kind": 15,
348
+ "detail": "Delete hash field",
349
+ "documentation": {
350
+ "value": "Delete one or more hash fields.\n\n```redis\nHDEL user:1 age email\n```"
351
+ },
352
+ "insertText": "HDEL ${1:key} ${2:field}",
353
+ "insertTextRules": 4,
354
+ "sortText": "31_hdel"
355
+ },
356
+ {
357
+ "label": "HEXISTS",
358
+ "kind": 15,
359
+ "detail": "Check hash field exists",
360
+ "documentation": {
361
+ "value": "Check if field exists in hash.\n\n```redis\nHEXISTS user:1 name\n```"
362
+ },
363
+ "insertText": "HEXISTS ${1:key} ${2:field}",
364
+ "insertTextRules": 4,
365
+ "sortText": "32_hexists"
366
+ },
367
+ {
368
+ "label": "HLEN",
369
+ "kind": 15,
370
+ "detail": "Hash length",
371
+ "documentation": {
372
+ "value": "Get the number of fields in a hash.\n\n```redis\nHLEN user:1\n```"
373
+ },
374
+ "insertText": "HLEN ${1:key}",
375
+ "insertTextRules": 4,
376
+ "sortText": "33_hlen"
377
+ },
378
+ {
379
+ "label": "HKEYS",
380
+ "kind": 15,
381
+ "detail": "Hash keys",
382
+ "documentation": {
383
+ "value": "Get all field names in a hash.\n\n```redis\nHKEYS user:1\n```"
384
+ },
385
+ "insertText": "HKEYS ${1:key}",
386
+ "insertTextRules": 4,
387
+ "sortText": "34_hkeys"
388
+ },
389
+ {
390
+ "label": "HVALS",
391
+ "kind": 15,
392
+ "detail": "Hash values",
393
+ "documentation": {
394
+ "value": "Get all values in a hash.\n\n```redis\nHVALS user:1\n```"
395
+ },
396
+ "insertText": "HVALS ${1:key}",
397
+ "insertTextRules": 4,
398
+ "sortText": "35_hvals"
399
+ },
400
+ {
401
+ "label": "HINCRBY",
402
+ "kind": 15,
403
+ "detail": "Increment hash field",
404
+ "documentation": {
405
+ "value": "Increment integer value of a hash field.\n\n```redis\nHINCRBY user:1 age 1\n```"
406
+ },
407
+ "insertText": "HINCRBY ${1:key} ${2:field} ${3:increment}",
408
+ "insertTextRules": 4,
409
+ "sortText": "36_hincrby"
410
+ },
411
+ {
412
+ "label": "HINCRBYFLOAT",
413
+ "kind": 15,
414
+ "detail": "Increment hash float",
415
+ "documentation": {
416
+ "value": "Increment float value of a hash field.\n\n```redis\nHINCRBYFLOAT product:1 price 1.50\n```"
417
+ },
418
+ "insertText": "HINCRBYFLOAT ${1:key} ${2:field} ${3:increment}",
419
+ "insertTextRules": 4,
420
+ "sortText": "37_hincrbyfloat"
421
+ },
422
+ {
423
+ "label": "HSETNX",
424
+ "kind": 15,
425
+ "detail": "Set hash field if not exists",
426
+ "documentation": {
427
+ "value": "Set hash field only if it does not exist.\n\n```redis\nHSETNX user:1 email \"default@example.com\"\n```"
428
+ },
429
+ "insertText": "HSETNX ${1:key} ${2:field} ${3:value}",
430
+ "insertTextRules": 4,
431
+ "sortText": "38_hsetnx"
432
+ },
433
+ {
434
+ "label": "HRANDFIELD",
435
+ "kind": 15,
436
+ "detail": "Random hash field",
437
+ "documentation": {
438
+ "value": "Return random field(s) from a hash.\n\n```redis\nHRANDFIELD user:1 2 WITHVALUES\n```"
439
+ },
440
+ "insertText": "HRANDFIELD ${1:key} ${2:count}",
441
+ "insertTextRules": 4,
442
+ "sortText": "39_hrandfield"
443
+ },
444
+ {
445
+ "label": "HSCAN",
446
+ "kind": 15,
447
+ "detail": "Scan hash fields",
448
+ "documentation": {
449
+ "value": "Incrementally iterate hash fields.\n\n```redis\nHSCAN user:1 0 MATCH name* COUNT 100\n```"
450
+ },
451
+ "insertText": "HSCAN ${1:key} ${2:cursor} MATCH ${3:pattern}",
452
+ "insertTextRules": 4,
453
+ "sortText": "40_hscan"
454
+ },
455
+ {
456
+ "label": "LPUSH",
457
+ "kind": 15,
458
+ "detail": "Push to list head",
459
+ "documentation": {
460
+ "value": "Insert values at the head of a list.\n\n```redis\nLPUSH mylist \"world\" \"hello\"\n```"
461
+ },
462
+ "insertText": "LPUSH ${1:key} ${2:value}",
463
+ "insertTextRules": 4,
464
+ "sortText": "41_lpush"
465
+ },
466
+ {
467
+ "label": "RPUSH",
468
+ "kind": 15,
469
+ "detail": "Push to list tail",
470
+ "documentation": {
471
+ "value": "Insert values at the tail of a list.\n\n```redis\nRPUSH mylist \"hello\" \"world\"\n```"
472
+ },
473
+ "insertText": "RPUSH ${1:key} ${2:value}",
474
+ "insertTextRules": 4,
475
+ "sortText": "42_rpush"
476
+ },
477
+ {
478
+ "label": "LPOP",
479
+ "kind": 15,
480
+ "detail": "Pop from list head",
481
+ "documentation": {
482
+ "value": "Remove and return the first element.\n\n```redis\nLPOP mylist\nLPOP mylist 3\n```"
483
+ },
484
+ "insertText": "LPOP ${1:key}",
485
+ "insertTextRules": 4,
486
+ "sortText": "43_lpop"
487
+ },
488
+ {
489
+ "label": "RPOP",
490
+ "kind": 15,
491
+ "detail": "Pop from list tail",
492
+ "documentation": {
493
+ "value": "Remove and return the last element.\n\n```redis\nRPOP mylist\nRPOP mylist 3\n```"
494
+ },
495
+ "insertText": "RPOP ${1:key}",
496
+ "insertTextRules": 4,
497
+ "sortText": "44_rpop"
498
+ },
499
+ {
500
+ "label": "LLEN",
501
+ "kind": 15,
502
+ "detail": "List length",
503
+ "documentation": {
504
+ "value": "Returns the length of a list.\n\n```redis\nLLEN mylist\n```"
505
+ },
506
+ "insertText": "LLEN ${1:key}",
507
+ "insertTextRules": 4,
508
+ "sortText": "45_llen"
509
+ },
510
+ {
511
+ "label": "LRANGE",
512
+ "kind": 15,
513
+ "detail": "Get list range",
514
+ "documentation": {
515
+ "value": "Get a range of elements from a list.\n\n```redis\nLRANGE mylist 0 -1\nLRANGE mylist 0 9\n```"
516
+ },
517
+ "insertText": "LRANGE ${1:key} ${2:start} ${3:stop}",
518
+ "insertTextRules": 4,
519
+ "sortText": "46_lrange"
520
+ },
521
+ {
522
+ "label": "LINDEX",
523
+ "kind": 15,
524
+ "detail": "Get by index",
525
+ "documentation": {
526
+ "value": "Get an element from a list by its index.\n\n```redis\nLINDEX mylist 0\n```"
527
+ },
528
+ "insertText": "LINDEX ${1:key} ${2:index}",
529
+ "insertTextRules": 4,
530
+ "sortText": "47_lindex"
531
+ },
532
+ {
533
+ "label": "LSET",
534
+ "kind": 15,
535
+ "detail": "Set by index",
536
+ "documentation": {
537
+ "value": "Set element at index in list.\n\n```redis\nLSET mylist 0 \"new_value\"\n```"
538
+ },
539
+ "insertText": "LSET ${1:key} ${2:index} ${3:value}",
540
+ "insertTextRules": 4,
541
+ "sortText": "48_lset"
542
+ },
543
+ {
544
+ "label": "LINSERT",
545
+ "kind": 15,
546
+ "detail": "Insert in list",
547
+ "documentation": {
548
+ "value": "Insert element before or after pivot.\n\n```redis\nLINSERT mylist BEFORE \"pivot\" \"new\"\n```"
549
+ },
550
+ "insertText": "LINSERT ${1:key} ${2|BEFORE,AFTER|} ${3:pivot} ${4:value}",
551
+ "insertTextRules": 4,
552
+ "sortText": "49_linsert"
553
+ },
554
+ {
555
+ "label": "LREM",
556
+ "kind": 15,
557
+ "detail": "Remove from list",
558
+ "documentation": {
559
+ "value": "Remove count occurrences of value.\n\n```redis\nLREM mylist 2 \"hello\"\n```"
560
+ },
561
+ "insertText": "LREM ${1:key} ${2:count} ${3:value}",
562
+ "insertTextRules": 4,
563
+ "sortText": "50_lrem"
564
+ },
565
+ {
566
+ "label": "LTRIM",
567
+ "kind": 15,
568
+ "detail": "Trim list",
569
+ "documentation": {
570
+ "value": "Trim list to the specified range.\n\n```redis\nLTRIM mylist 0 99\n```"
571
+ },
572
+ "insertText": "LTRIM ${1:key} ${2:start} ${3:stop}",
573
+ "insertTextRules": 4,
574
+ "sortText": "51_ltrim"
575
+ },
576
+ {
577
+ "label": "RPOPLPUSH",
578
+ "kind": 15,
579
+ "detail": "Pop tail push head",
580
+ "documentation": {
581
+ "value": "Pop from tail of source and push to head of dest.\n\n```redis\nRPOPLPUSH source dest\n```"
582
+ },
583
+ "insertText": "RPOPLPUSH ${1:source} ${2:destination}",
584
+ "insertTextRules": 4,
585
+ "sortText": "52_rpoplpush"
586
+ },
587
+ {
588
+ "label": "LMOVE",
589
+ "kind": 15,
590
+ "detail": "Move element",
591
+ "documentation": {
592
+ "value": "Pop from one list and push to another (Redis 6.2+).\n\n```redis\nLMOVE source dest LEFT RIGHT\n```"
593
+ },
594
+ "insertText": "LMOVE ${1:source} ${2:destination} ${3|LEFT,RIGHT|} ${4|LEFT,RIGHT|}",
595
+ "insertTextRules": 4,
596
+ "sortText": "53_lmove"
597
+ },
598
+ {
599
+ "label": "BLPOP",
600
+ "kind": 15,
601
+ "detail": "Blocking left pop",
602
+ "documentation": {
603
+ "value": "Blocking pop from list head.\n\n```redis\nBLPOP mylist 30\n```"
604
+ },
605
+ "insertText": "BLPOP ${1:key} ${2:timeout}",
606
+ "insertTextRules": 4,
607
+ "sortText": "54_blpop"
608
+ },
609
+ {
610
+ "label": "BRPOP",
611
+ "kind": 15,
612
+ "detail": "Blocking right pop",
613
+ "documentation": {
614
+ "value": "Blocking pop from list tail.\n\n```redis\nBRPOP mylist 30\n```"
615
+ },
616
+ "insertText": "BRPOP ${1:key} ${2:timeout}",
617
+ "insertTextRules": 4,
618
+ "sortText": "55_brpop"
619
+ },
620
+ {
621
+ "label": "BLMOVE",
622
+ "kind": 15,
623
+ "detail": "Blocking list move",
624
+ "documentation": {
625
+ "value": "Blocking version of LMOVE.\n\n```redis\nBLMOVE src dst LEFT RIGHT 30\n```"
626
+ },
627
+ "insertText": "BLMOVE ${1:source} ${2:destination} ${3|LEFT,RIGHT|} ${4|LEFT,RIGHT|} ${5:timeout}",
628
+ "insertTextRules": 4,
629
+ "sortText": "56_blmove"
630
+ },
631
+ {
632
+ "label": "LPOS",
633
+ "kind": 15,
634
+ "detail": "Find in list",
635
+ "documentation": {
636
+ "value": "Return position of element in list.\n\n```redis\nLPOS mylist \"hello\"\nLPOS mylist \"hello\" RANK 2\n```"
637
+ },
638
+ "insertText": "LPOS ${1:key} ${2:element}",
639
+ "insertTextRules": 4,
640
+ "sortText": "57_lpos"
641
+ },
642
+ {
643
+ "label": "LMPOP",
644
+ "kind": 15,
645
+ "detail": "Pop from multiple lists",
646
+ "documentation": {
647
+ "value": "Pop elements from first non-empty list (Redis 7.0+).\n\n```redis\nLMPOP 2 list1 list2 LEFT COUNT 3\n```"
648
+ },
649
+ "insertText": "LMPOP ${1:numkeys} ${2:key} ${3|LEFT,RIGHT|}",
650
+ "insertTextRules": 4,
651
+ "sortText": "58_lmpop"
652
+ },
653
+ {
654
+ "label": "BLMPOP",
655
+ "kind": 15,
656
+ "detail": "Blocking multi-pop",
657
+ "documentation": {
658
+ "value": "Blocking version of LMPOP (Redis 7.0+).\n\n```redis\nBLMPOP 30 2 list1 list2 LEFT\n```"
659
+ },
660
+ "insertText": "BLMPOP ${1:timeout} ${2:numkeys} ${3:key} ${4|LEFT,RIGHT|}",
661
+ "insertTextRules": 4,
662
+ "sortText": "59_blmpop"
663
+ },
664
+ {
665
+ "label": "LPUSHX",
666
+ "kind": 15,
667
+ "detail": "Push if list exists",
668
+ "documentation": {
669
+ "value": "Push to head only if list exists.\n\n```redis\nLPUSHX mylist \"hello\"\n```"
670
+ },
671
+ "insertText": "LPUSHX ${1:key} ${2:value}",
672
+ "insertTextRules": 4,
673
+ "sortText": "60_lpushx"
674
+ },
675
+ {
676
+ "label": "RPUSHX",
677
+ "kind": 15,
678
+ "detail": "Push if list exists",
679
+ "documentation": {
680
+ "value": "Push to tail only if list exists.\n\n```redis\nRPUSHX mylist \"hello\"\n```"
681
+ },
682
+ "insertText": "RPUSHX ${1:key} ${2:value}",
683
+ "insertTextRules": 4,
684
+ "sortText": "61_rpushx"
685
+ },
686
+ {
687
+ "label": "SADD",
688
+ "kind": 15,
689
+ "detail": "Add to set",
690
+ "documentation": {
691
+ "value": "Add members to a set.\n\n```redis\nSADD myset \"Hello\" \"World\"\n```"
692
+ },
693
+ "insertText": "SADD ${1:key} ${2:member}",
694
+ "insertTextRules": 4,
695
+ "sortText": "62_sadd"
696
+ },
697
+ {
698
+ "label": "SREM",
699
+ "kind": 15,
700
+ "detail": "Remove from set",
701
+ "documentation": {
702
+ "value": "Remove members from a set.\n\n```redis\nSREM myset \"Hello\"\n```"
703
+ },
704
+ "insertText": "SREM ${1:key} ${2:member}",
705
+ "insertTextRules": 4,
706
+ "sortText": "63_srem"
707
+ },
708
+ {
709
+ "label": "SMEMBERS",
710
+ "kind": 15,
711
+ "detail": "Get all members",
712
+ "documentation": {
713
+ "value": "Get all members of a set.\n\n```redis\nSMEMBERS myset\n```"
714
+ },
715
+ "insertText": "SMEMBERS ${1:key}",
716
+ "insertTextRules": 4,
717
+ "sortText": "64_smembers"
718
+ },
719
+ {
720
+ "label": "SISMEMBER",
721
+ "kind": 15,
722
+ "detail": "Check membership",
723
+ "documentation": {
724
+ "value": "Check if member is in set.\n\n```redis\nSISMEMBER myset \"Hello\"\n```"
725
+ },
726
+ "insertText": "SISMEMBER ${1:key} ${2:member}",
727
+ "insertTextRules": 4,
728
+ "sortText": "65_sismember"
729
+ },
730
+ {
731
+ "label": "SMISMEMBER",
732
+ "kind": 15,
733
+ "detail": "Check multi membership",
734
+ "documentation": {
735
+ "value": "Check if multiple members are in set (Redis 6.2+).\n\n```redis\nSMISMEMBER myset \"one\" \"two\" \"three\"\n```"
736
+ },
737
+ "insertText": "SMISMEMBER ${1:key} ${2:member1} ${3:member2}",
738
+ "insertTextRules": 4,
739
+ "sortText": "66_smismember"
740
+ },
741
+ {
742
+ "label": "SCARD",
743
+ "kind": 15,
744
+ "detail": "Set cardinality",
745
+ "documentation": {
746
+ "value": "Get the number of members in a set.\n\n```redis\nSCARD myset\n```"
747
+ },
748
+ "insertText": "SCARD ${1:key}",
749
+ "insertTextRules": 4,
750
+ "sortText": "67_scard"
751
+ },
752
+ {
753
+ "label": "SPOP",
754
+ "kind": 15,
755
+ "detail": "Pop random member",
756
+ "documentation": {
757
+ "value": "Remove and return random member(s).\n\n```redis\nSPOP myset\nSPOP myset 3\n```"
758
+ },
759
+ "insertText": "SPOP ${1:key}",
760
+ "insertTextRules": 4,
761
+ "sortText": "68_spop"
762
+ },
763
+ {
764
+ "label": "SRANDMEMBER",
765
+ "kind": 15,
766
+ "detail": "Random member",
767
+ "documentation": {
768
+ "value": "Get random member(s) without removing.\n\n```redis\nSRANDMEMBER myset 3\n```"
769
+ },
770
+ "insertText": "SRANDMEMBER ${1:key} ${2:count}",
771
+ "insertTextRules": 4,
772
+ "sortText": "69_srandmember"
773
+ },
774
+ {
775
+ "label": "SUNION",
776
+ "kind": 15,
777
+ "detail": "Set union",
778
+ "documentation": {
779
+ "value": "Return the union of sets.\n\n```redis\nSUNION set1 set2\n```"
780
+ },
781
+ "insertText": "SUNION ${1:key1} ${2:key2}",
782
+ "insertTextRules": 4,
783
+ "sortText": "70_sunion"
784
+ },
785
+ {
786
+ "label": "SUNIONSTORE",
787
+ "kind": 15,
788
+ "detail": "Store set union",
789
+ "documentation": {
790
+ "value": "Store the union of sets.\n\n```redis\nSUNIONSTORE dest set1 set2\n```"
791
+ },
792
+ "insertText": "SUNIONSTORE ${1:destination} ${2:key1} ${3:key2}",
793
+ "insertTextRules": 4,
794
+ "sortText": "71_sunionstore"
795
+ },
796
+ {
797
+ "label": "SINTER",
798
+ "kind": 15,
799
+ "detail": "Set intersection",
800
+ "documentation": {
801
+ "value": "Return the intersection of sets.\n\n```redis\nSINTER set1 set2\n```"
802
+ },
803
+ "insertText": "SINTER ${1:key1} ${2:key2}",
804
+ "insertTextRules": 4,
805
+ "sortText": "72_sinter"
806
+ },
807
+ {
808
+ "label": "SINTERSTORE",
809
+ "kind": 15,
810
+ "detail": "Store intersection",
811
+ "documentation": {
812
+ "value": "Store the intersection of sets.\n\n```redis\nSINTERSTORE dest set1 set2\n```"
813
+ },
814
+ "insertText": "SINTERSTORE ${1:destination} ${2:key1} ${3:key2}",
815
+ "insertTextRules": 4,
816
+ "sortText": "73_sinterstore"
817
+ },
818
+ {
819
+ "label": "SINTERCARD",
820
+ "kind": 15,
821
+ "detail": "Intersection cardinality",
822
+ "documentation": {
823
+ "value": "Return cardinality of intersection (Redis 7.0+).\n\n```redis\nSINTERCARD 2 set1 set2 LIMIT 10\n```"
824
+ },
825
+ "insertText": "SINTERCARD ${1:numkeys} ${2:key1} ${3:key2}",
826
+ "insertTextRules": 4,
827
+ "sortText": "74_sintercard"
828
+ },
829
+ {
830
+ "label": "SDIFF",
831
+ "kind": 15,
832
+ "detail": "Set difference",
833
+ "documentation": {
834
+ "value": "Return the difference of sets.\n\n```redis\nSDIFF set1 set2\n```"
835
+ },
836
+ "insertText": "SDIFF ${1:key1} ${2:key2}",
837
+ "insertTextRules": 4,
838
+ "sortText": "75_sdiff"
839
+ },
840
+ {
841
+ "label": "SDIFFSTORE",
842
+ "kind": 15,
843
+ "detail": "Store difference",
844
+ "documentation": {
845
+ "value": "Store the difference of sets.\n\n```redis\nSDIFFSTORE dest set1 set2\n```"
846
+ },
847
+ "insertText": "SDIFFSTORE ${1:destination} ${2:key1} ${3:key2}",
848
+ "insertTextRules": 4,
849
+ "sortText": "76_sdiffstore"
850
+ },
851
+ {
852
+ "label": "SMOVE",
853
+ "kind": 15,
854
+ "detail": "Move member",
855
+ "documentation": {
856
+ "value": "Move member from one set to another.\n\n```redis\nSMOVE src dst \"member\"\n```"
857
+ },
858
+ "insertText": "SMOVE ${1:source} ${2:destination} ${3:member}",
859
+ "insertTextRules": 4,
860
+ "sortText": "77_smove"
861
+ },
862
+ {
863
+ "label": "SSCAN",
864
+ "kind": 15,
865
+ "detail": "Scan set",
866
+ "documentation": {
867
+ "value": "Incrementally iterate set members.\n\n```redis\nSSCAN myset 0 MATCH h* COUNT 100\n```"
868
+ },
869
+ "insertText": "SSCAN ${1:key} ${2:cursor} MATCH ${3:pattern}",
870
+ "insertTextRules": 4,
871
+ "sortText": "78_sscan"
872
+ },
873
+ {
874
+ "label": "ZADD",
875
+ "kind": 15,
876
+ "detail": "Add to sorted set",
877
+ "documentation": {
878
+ "value": "Add members with scores to a sorted set.\n\n```redis\nZADD leaderboard 100 \"alice\" 200 \"bob\"\nZADD lb NX 100 \"alice\"\nZADD lb GT CH 150 \"alice\"\n```"
879
+ },
880
+ "insertText": "ZADD ${1:key} ${2:score} ${3:member}",
881
+ "insertTextRules": 4,
882
+ "sortText": "79_zadd"
883
+ },
884
+ {
885
+ "label": "ZREM",
886
+ "kind": 15,
887
+ "detail": "Remove from sorted set",
888
+ "documentation": {
889
+ "value": "Remove members from sorted set.\n\n```redis\nZREM leaderboard \"alice\"\n```"
890
+ },
891
+ "insertText": "ZREM ${1:key} ${2:member}",
892
+ "insertTextRules": 4,
893
+ "sortText": "80_zrem"
894
+ },
895
+ {
896
+ "label": "ZSCORE",
897
+ "kind": 15,
898
+ "detail": "Get score",
899
+ "documentation": {
900
+ "value": "Get score of member in sorted set.\n\n```redis\nZSCORE leaderboard \"alice\"\n```"
901
+ },
902
+ "insertText": "ZSCORE ${1:key} ${2:member}",
903
+ "insertTextRules": 4,
904
+ "sortText": "81_zscore"
905
+ },
906
+ {
907
+ "label": "ZMSCORE",
908
+ "kind": 15,
909
+ "detail": "Get multiple scores",
910
+ "documentation": {
911
+ "value": "Get scores of multiple members (Redis 6.2+).\n\n```redis\nZMSCORE leaderboard \"alice\" \"bob\"\n```"
912
+ },
913
+ "insertText": "ZMSCORE ${1:key} ${2:member1} ${3:member2}",
914
+ "insertTextRules": 4,
915
+ "sortText": "82_zmscore"
916
+ },
917
+ {
918
+ "label": "ZRANK",
919
+ "kind": 15,
920
+ "detail": "Get rank (asc)",
921
+ "documentation": {
922
+ "value": "Get rank of member (0-based, ascending).\n\n```redis\nZRANK leaderboard \"alice\"\n```"
923
+ },
924
+ "insertText": "ZRANK ${1:key} ${2:member}",
925
+ "insertTextRules": 4,
926
+ "sortText": "83_zrank"
927
+ },
928
+ {
929
+ "label": "ZREVRANK",
930
+ "kind": 15,
931
+ "detail": "Get rank (desc)",
932
+ "documentation": {
933
+ "value": "Get rank of member (0-based, descending).\n\n```redis\nZREVRANK leaderboard \"alice\"\n```"
934
+ },
935
+ "insertText": "ZREVRANK ${1:key} ${2:member}",
936
+ "insertTextRules": 4,
937
+ "sortText": "84_zrevrank"
938
+ },
939
+ {
940
+ "label": "ZCARD",
941
+ "kind": 15,
942
+ "detail": "Sorted set size",
943
+ "documentation": {
944
+ "value": "Get the number of members in sorted set.\n\n```redis\nZCARD leaderboard\n```"
945
+ },
946
+ "insertText": "ZCARD ${1:key}",
947
+ "insertTextRules": 4,
948
+ "sortText": "85_zcard"
949
+ },
950
+ {
951
+ "label": "ZCOUNT",
952
+ "kind": 15,
953
+ "detail": "Count by score range",
954
+ "documentation": {
955
+ "value": "Count members with score in range.\n\n```redis\nZCOUNT leaderboard 100 200\nZCOUNT leaderboard -inf +inf\n```"
956
+ },
957
+ "insertText": "ZCOUNT ${1:key} ${2:min} ${3:max}",
958
+ "insertTextRules": 4,
959
+ "sortText": "86_zcount"
960
+ },
961
+ {
962
+ "label": "ZLEXCOUNT",
963
+ "kind": 15,
964
+ "detail": "Count by lex range",
965
+ "documentation": {
966
+ "value": "Count members in a lex range.\n\n```redis\nZLEXCOUNT myset \"[a\" \"[z\"\n```"
967
+ },
968
+ "insertText": "ZLEXCOUNT ${1:key} ${2:min} ${3:max}",
969
+ "insertTextRules": 4,
970
+ "sortText": "87_zlexcount"
971
+ },
972
+ {
973
+ "label": "ZRANGE",
974
+ "kind": 15,
975
+ "detail": "Get range",
976
+ "documentation": {
977
+ "value": "Return members in sorted set by index range.\n\n```redis\nZRANGE leaderboard 0 9\nZRANGE leaderboard 0 9 WITHSCORES\nZRANGE lb 100 200 BYSCORE LIMIT 0 10\n```"
978
+ },
979
+ "insertText": "ZRANGE ${1:key} ${2:start} ${3:stop}",
980
+ "insertTextRules": 4,
981
+ "sortText": "88_zrange"
982
+ },
983
+ {
984
+ "label": "ZRANGEBYSCORE",
985
+ "kind": 15,
986
+ "detail": "Get by score range",
987
+ "documentation": {
988
+ "value": "Return members with score in range.\n\n```redis\nZRANGEBYSCORE leaderboard 100 200\nZRANGEBYSCORE lb -inf +inf WITHSCORES LIMIT 0 10\n```"
989
+ },
990
+ "insertText": "ZRANGEBYSCORE ${1:key} ${2:min} ${3:max}",
991
+ "insertTextRules": 4,
992
+ "sortText": "89_zrangebyscore"
993
+ },
994
+ {
995
+ "label": "ZRANGEBYLEX",
996
+ "kind": 15,
997
+ "detail": "Get by lex range",
998
+ "documentation": {
999
+ "value": "Return members in lex range.\n\n```redis\nZRANGEBYLEX myset \"[a\" \"[z\" LIMIT 0 10\n```"
1000
+ },
1001
+ "insertText": "ZRANGEBYLEX ${1:key} ${2:min} ${3:max}",
1002
+ "insertTextRules": 4,
1003
+ "sortText": "90_zrangebylex"
1004
+ },
1005
+ {
1006
+ "label": "ZREVRANGE",
1007
+ "kind": 15,
1008
+ "detail": "Get range (desc)",
1009
+ "documentation": {
1010
+ "value": "Return members in reverse order.\n\n```redis\nZREVRANGE leaderboard 0 9 WITHSCORES\n```"
1011
+ },
1012
+ "insertText": "ZREVRANGE ${1:key} ${2:start} ${3:stop}",
1013
+ "insertTextRules": 4,
1014
+ "sortText": "91_zrevrange"
1015
+ },
1016
+ {
1017
+ "label": "ZREVRANGEBYSCORE",
1018
+ "kind": 15,
1019
+ "detail": "Get by score (desc)",
1020
+ "documentation": {
1021
+ "value": "Return members with score in range, descending.\n\n```redis\nZREVRANGEBYSCORE lb +inf -inf WITHSCORES LIMIT 0 10\n```"
1022
+ },
1023
+ "insertText": "ZREVRANGEBYSCORE ${1:key} ${2:max} ${3:min}",
1024
+ "insertTextRules": 4,
1025
+ "sortText": "92_zrevrangebyscore"
1026
+ },
1027
+ {
1028
+ "label": "ZINCRBY",
1029
+ "kind": 15,
1030
+ "detail": "Increment score",
1031
+ "documentation": {
1032
+ "value": "Increment the score of a member.\n\n```redis\nZINCRBY leaderboard 10 \"alice\"\n```"
1033
+ },
1034
+ "insertText": "ZINCRBY ${1:key} ${2:increment} ${3:member}",
1035
+ "insertTextRules": 4,
1036
+ "sortText": "93_zincrby"
1037
+ },
1038
+ {
1039
+ "label": "ZUNIONSTORE",
1040
+ "kind": 15,
1041
+ "detail": "Store sorted union",
1042
+ "documentation": {
1043
+ "value": "Store union of sorted sets.\n\n```redis\nZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 1\n```"
1044
+ },
1045
+ "insertText": "ZUNIONSTORE ${1:dest} ${2:numkeys} ${3:key1} ${4:key2}",
1046
+ "insertTextRules": 4,
1047
+ "sortText": "94_zunionstore"
1048
+ },
1049
+ {
1050
+ "label": "ZUNION",
1051
+ "kind": 15,
1052
+ "detail": "Sorted set union",
1053
+ "documentation": {
1054
+ "value": "Return union without storing (Redis 6.2+).\n\n```redis\nZUNION 2 zset1 zset2 WITHSCORES\n```"
1055
+ },
1056
+ "insertText": "ZUNION ${1:numkeys} ${2:key1} ${3:key2}",
1057
+ "insertTextRules": 4,
1058
+ "sortText": "95_zunion"
1059
+ },
1060
+ {
1061
+ "label": "ZINTERSTORE",
1062
+ "kind": 15,
1063
+ "detail": "Store sorted intersection",
1064
+ "documentation": {
1065
+ "value": "Store intersection of sorted sets.\n\n```redis\nZINTERSTORE out 2 zset1 zset2\n```"
1066
+ },
1067
+ "insertText": "ZINTERSTORE ${1:dest} ${2:numkeys} ${3:key1} ${4:key2}",
1068
+ "insertTextRules": 4,
1069
+ "sortText": "96_zinterstore"
1070
+ },
1071
+ {
1072
+ "label": "ZINTER",
1073
+ "kind": 15,
1074
+ "detail": "Sorted set intersection",
1075
+ "documentation": {
1076
+ "value": "Return intersection without storing (Redis 6.2+).\n\n```redis\nZINTER 2 zset1 zset2 WITHSCORES\n```"
1077
+ },
1078
+ "insertText": "ZINTER ${1:numkeys} ${2:key1} ${3:key2}",
1079
+ "insertTextRules": 4,
1080
+ "sortText": "97_zinter"
1081
+ },
1082
+ {
1083
+ "label": "ZDIFFSTORE",
1084
+ "kind": 15,
1085
+ "detail": "Store sorted difference",
1086
+ "documentation": {
1087
+ "value": "Store difference of sorted sets.\n\n```redis\nZDIFFSTORE out 2 zset1 zset2\n```"
1088
+ },
1089
+ "insertText": "ZDIFFSTORE ${1:dest} ${2:numkeys} ${3:key1} ${4:key2}",
1090
+ "insertTextRules": 4,
1091
+ "sortText": "98_zdiffstore"
1092
+ },
1093
+ {
1094
+ "label": "ZDIFF",
1095
+ "kind": 15,
1096
+ "detail": "Sorted set difference",
1097
+ "documentation": {
1098
+ "value": "Return difference without storing (Redis 6.2+).\n\n```redis\nZDIFF 2 zset1 zset2 WITHSCORES\n```"
1099
+ },
1100
+ "insertText": "ZDIFF ${1:numkeys} ${2:key1} ${3:key2}",
1101
+ "insertTextRules": 4,
1102
+ "sortText": "99_zdiff"
1103
+ },
1104
+ {
1105
+ "label": "ZRANDMEMBER",
1106
+ "kind": 15,
1107
+ "detail": "Random sorted member",
1108
+ "documentation": {
1109
+ "value": "Return random member(s) from sorted set.\n\n```redis\nZRANDMEMBER myset 3 WITHSCORES\n```"
1110
+ },
1111
+ "insertText": "ZRANDMEMBER ${1:key} ${2:count}",
1112
+ "insertTextRules": 4,
1113
+ "sortText": "100_zrandmember"
1114
+ },
1115
+ {
1116
+ "label": "ZPOPMIN",
1117
+ "kind": 15,
1118
+ "detail": "Pop min score",
1119
+ "documentation": {
1120
+ "value": "Remove and return members with lowest scores.\n\n```redis\nZPOPMIN leaderboard 3\n```"
1121
+ },
1122
+ "insertText": "ZPOPMIN ${1:key} ${2:count}",
1123
+ "insertTextRules": 4,
1124
+ "sortText": "101_zpopmin"
1125
+ },
1126
+ {
1127
+ "label": "ZPOPMAX",
1128
+ "kind": 15,
1129
+ "detail": "Pop max score",
1130
+ "documentation": {
1131
+ "value": "Remove and return members with highest scores.\n\n```redis\nZPOPMAX leaderboard 3\n```"
1132
+ },
1133
+ "insertText": "ZPOPMAX ${1:key} ${2:count}",
1134
+ "insertTextRules": 4,
1135
+ "sortText": "102_zpopmax"
1136
+ },
1137
+ {
1138
+ "label": "BZPOPMIN",
1139
+ "kind": 15,
1140
+ "detail": "Blocking pop min",
1141
+ "documentation": {
1142
+ "value": "Blocking pop member with minimum score.\n\n```redis\nBZPOPMIN key1 key2 30\n```"
1143
+ },
1144
+ "insertText": "BZPOPMIN ${1:key} ${2:timeout}",
1145
+ "insertTextRules": 4,
1146
+ "sortText": "103_bzpopmin"
1147
+ },
1148
+ {
1149
+ "label": "BZPOPMAX",
1150
+ "kind": 15,
1151
+ "detail": "Blocking pop max",
1152
+ "documentation": {
1153
+ "value": "Blocking pop member with maximum score.\n\n```redis\nBZPOPMAX key1 key2 30\n```"
1154
+ },
1155
+ "insertText": "BZPOPMAX ${1:key} ${2:timeout}",
1156
+ "insertTextRules": 4,
1157
+ "sortText": "104_bzpopmax"
1158
+ },
1159
+ {
1160
+ "label": "ZMPOP",
1161
+ "kind": 15,
1162
+ "detail": "Pop from multiple sorted sets",
1163
+ "documentation": {
1164
+ "value": "Pop from first non-empty sorted set (Redis 7.0+).\n\n```redis\nZMPOP 2 zs1 zs2 MIN COUNT 3\n```"
1165
+ },
1166
+ "insertText": "ZMPOP ${1:numkeys} ${2:key} ${3|MIN,MAX|}",
1167
+ "insertTextRules": 4,
1168
+ "sortText": "105_zmpop"
1169
+ },
1170
+ {
1171
+ "label": "BZMPOP",
1172
+ "kind": 15,
1173
+ "detail": "Blocking sorted multi-pop",
1174
+ "documentation": {
1175
+ "value": "Blocking version of ZMPOP.\n\n```redis\nBZMPOP 30 2 zs1 zs2 MIN\n```"
1176
+ },
1177
+ "insertText": "BZMPOP ${1:timeout} ${2:numkeys} ${3:key} ${4|MIN,MAX|}",
1178
+ "insertTextRules": 4,
1179
+ "sortText": "106_bzmpop"
1180
+ },
1181
+ {
1182
+ "label": "ZRANGESTORE",
1183
+ "kind": 15,
1184
+ "detail": "Store range result",
1185
+ "documentation": {
1186
+ "value": "Store specified range from sorted set (Redis 6.2+).\n\n```redis\nZRANGESTORE dst src 0 9\n```"
1187
+ },
1188
+ "insertText": "ZRANGESTORE ${1:dst} ${2:src} ${3:min} ${4:max}",
1189
+ "insertTextRules": 4,
1190
+ "sortText": "107_zrangestore"
1191
+ },
1192
+ {
1193
+ "label": "ZSCAN",
1194
+ "kind": 15,
1195
+ "detail": "Scan sorted set",
1196
+ "documentation": {
1197
+ "value": "Incrementally iterate sorted set.\n\n```redis\nZSCAN myset 0 MATCH h* COUNT 100\n```"
1198
+ },
1199
+ "insertText": "ZSCAN ${1:key} ${2:cursor} MATCH ${3:pattern}",
1200
+ "insertTextRules": 4,
1201
+ "sortText": "108_zscan"
1202
+ },
1203
+ {
1204
+ "label": "DEL",
1205
+ "kind": 15,
1206
+ "detail": "Delete keys",
1207
+ "documentation": {
1208
+ "value": "Delete one or more keys.\n\n```redis\nDEL key1 key2 key3\n```"
1209
+ },
1210
+ "insertText": "DEL ${1:key}",
1211
+ "insertTextRules": 4,
1212
+ "sortText": "109_del"
1213
+ },
1214
+ {
1215
+ "label": "UNLINK",
1216
+ "kind": 15,
1217
+ "detail": "Async delete",
1218
+ "documentation": {
1219
+ "value": "Delete keys asynchronously (non-blocking).\n\n```redis\nUNLINK key1 key2\n```"
1220
+ },
1221
+ "insertText": "UNLINK ${1:key}",
1222
+ "insertTextRules": 4,
1223
+ "sortText": "110_unlink"
1224
+ },
1225
+ {
1226
+ "label": "EXISTS",
1227
+ "kind": 15,
1228
+ "detail": "Check key exists",
1229
+ "documentation": {
1230
+ "value": "Check if key(s) exist. Returns count of existing keys.\n\n```redis\nEXISTS mykey\nEXISTS key1 key2 key3\n```"
1231
+ },
1232
+ "insertText": "EXISTS ${1:key}",
1233
+ "insertTextRules": 4,
1234
+ "sortText": "111_exists"
1235
+ },
1236
+ {
1237
+ "label": "TYPE",
1238
+ "kind": 15,
1239
+ "detail": "Get key type",
1240
+ "documentation": {
1241
+ "value": "Returns the type of value at key.\n\n```redis\nTYPE mykey\n```"
1242
+ },
1243
+ "insertText": "TYPE ${1:key}",
1244
+ "insertTextRules": 4,
1245
+ "sortText": "112_type"
1246
+ },
1247
+ {
1248
+ "label": "RENAME",
1249
+ "kind": 15,
1250
+ "detail": "Rename key",
1251
+ "documentation": {
1252
+ "value": "Rename a key. Overwrites destination if exists.\n\n```redis\nRENAME oldkey newkey\n```"
1253
+ },
1254
+ "insertText": "RENAME ${1:key} ${2:newkey}",
1255
+ "insertTextRules": 4,
1256
+ "sortText": "113_rename"
1257
+ },
1258
+ {
1259
+ "label": "RENAMENX",
1260
+ "kind": 15,
1261
+ "detail": "Rename if not exists",
1262
+ "documentation": {
1263
+ "value": "Rename key only if new key does not exist.\n\n```redis\nRENAMENX oldkey newkey\n```"
1264
+ },
1265
+ "insertText": "RENAMENX ${1:key} ${2:newkey}",
1266
+ "insertTextRules": 4,
1267
+ "sortText": "114_renamenx"
1268
+ },
1269
+ {
1270
+ "label": "KEYS",
1271
+ "kind": 15,
1272
+ "detail": "Find keys by pattern",
1273
+ "documentation": {
1274
+ "value": "Find all keys matching pattern. **Use SCAN in production.**\n\n```redis\nKEYS *\nKEYS user:*\nKEYS h?llo\n```"
1275
+ },
1276
+ "insertText": "KEYS ${1:pattern}",
1277
+ "insertTextRules": 4,
1278
+ "sortText": "115_keys"
1279
+ },
1280
+ {
1281
+ "label": "SCAN",
1282
+ "kind": 15,
1283
+ "detail": "Iterate keys",
1284
+ "documentation": {
1285
+ "value": "Incrementally iterate the key space.\n\n```redis\nSCAN 0\nSCAN 0 MATCH user:* COUNT 100 TYPE string\n```"
1286
+ },
1287
+ "insertText": "SCAN ${1:cursor} MATCH ${2:pattern} COUNT ${3:100}",
1288
+ "insertTextRules": 4,
1289
+ "sortText": "116_scan"
1290
+ },
1291
+ {
1292
+ "label": "RANDOMKEY",
1293
+ "kind": 15,
1294
+ "detail": "Random key",
1295
+ "documentation": {
1296
+ "value": "Return a random key from the database.\n\n```redis\nRANDOMKEY\n```"
1297
+ },
1298
+ "insertText": "RANDOMKEY",
1299
+ "insertTextRules": 4,
1300
+ "sortText": "117_randomkey"
1301
+ },
1302
+ {
1303
+ "label": "EXPIRE",
1304
+ "kind": 15,
1305
+ "detail": "Set TTL (seconds)",
1306
+ "documentation": {
1307
+ "value": "Set a timeout on key in seconds.\n\n```redis\nEXPIRE mykey 60\nEXPIRE mykey 60 NX\n```"
1308
+ },
1309
+ "insertText": "EXPIRE ${1:key} ${2:seconds}",
1310
+ "insertTextRules": 4,
1311
+ "sortText": "118_expire"
1312
+ },
1313
+ {
1314
+ "label": "PEXPIRE",
1315
+ "kind": 15,
1316
+ "detail": "Set TTL (ms)",
1317
+ "documentation": {
1318
+ "value": "Set timeout in milliseconds.\n\n```redis\nPEXPIRE mykey 60000\n```"
1319
+ },
1320
+ "insertText": "PEXPIRE ${1:key} ${2:milliseconds}",
1321
+ "insertTextRules": 4,
1322
+ "sortText": "119_pexpire"
1323
+ },
1324
+ {
1325
+ "label": "EXPIREAT",
1326
+ "kind": 15,
1327
+ "detail": "Set expiry timestamp",
1328
+ "documentation": {
1329
+ "value": "Set key to expire at Unix timestamp.\n\n```redis\nEXPIREAT mykey 1700000000\n```"
1330
+ },
1331
+ "insertText": "EXPIREAT ${1:key} ${2:timestamp}",
1332
+ "insertTextRules": 4,
1333
+ "sortText": "120_expireat"
1334
+ },
1335
+ {
1336
+ "label": "PEXPIREAT",
1337
+ "kind": 15,
1338
+ "detail": "Set expiry timestamp (ms)",
1339
+ "documentation": {
1340
+ "value": "Set key to expire at Unix milliseconds.\n\n```redis\nPEXPIREAT mykey 1700000000000\n```"
1341
+ },
1342
+ "insertText": "PEXPIREAT ${1:key} ${2:ms_timestamp}",
1343
+ "insertTextRules": 4,
1344
+ "sortText": "121_pexpireat"
1345
+ },
1346
+ {
1347
+ "label": "TTL",
1348
+ "kind": 15,
1349
+ "detail": "Get TTL (seconds)",
1350
+ "documentation": {
1351
+ "value": "Get the remaining TTL in seconds.\n\n```redis\nTTL mykey\n```"
1352
+ },
1353
+ "insertText": "TTL ${1:key}",
1354
+ "insertTextRules": 4,
1355
+ "sortText": "122_ttl"
1356
+ },
1357
+ {
1358
+ "label": "PTTL",
1359
+ "kind": 15,
1360
+ "detail": "Get TTL (ms)",
1361
+ "documentation": {
1362
+ "value": "Get remaining TTL in milliseconds.\n\n```redis\nPTTL mykey\n```"
1363
+ },
1364
+ "insertText": "PTTL ${1:key}",
1365
+ "insertTextRules": 4,
1366
+ "sortText": "123_pttl"
1367
+ },
1368
+ {
1369
+ "label": "PERSIST",
1370
+ "kind": 15,
1371
+ "detail": "Remove expiry",
1372
+ "documentation": {
1373
+ "value": "Remove the expiry from a key.\n\n```redis\nPERSIST mykey\n```"
1374
+ },
1375
+ "insertText": "PERSIST ${1:key}",
1376
+ "insertTextRules": 4,
1377
+ "sortText": "124_persist"
1378
+ },
1379
+ {
1380
+ "label": "EXPIRETIME",
1381
+ "kind": 15,
1382
+ "detail": "Get expiry timestamp",
1383
+ "documentation": {
1384
+ "value": "Get the expiration Unix timestamp (Redis 7.0+).\n\n```redis\nEXPIRETIME mykey\n```"
1385
+ },
1386
+ "insertText": "EXPIRETIME ${1:key}",
1387
+ "insertTextRules": 4,
1388
+ "sortText": "125_expiretime"
1389
+ },
1390
+ {
1391
+ "label": "PEXPIRETIME",
1392
+ "kind": 15,
1393
+ "detail": "Get expiry timestamp (ms)",
1394
+ "documentation": {
1395
+ "value": "Get expiration in Unix ms (Redis 7.0+).\n\n```redis\nPEXPIRETIME mykey\n```"
1396
+ },
1397
+ "insertText": "PEXPIRETIME ${1:key}",
1398
+ "insertTextRules": 4,
1399
+ "sortText": "126_pexpiretime"
1400
+ },
1401
+ {
1402
+ "label": "DUMP",
1403
+ "kind": 15,
1404
+ "detail": "Serialize key",
1405
+ "documentation": {
1406
+ "value": "Serialize the value stored at key.\n\n```redis\nDUMP mykey\n```"
1407
+ },
1408
+ "insertText": "DUMP ${1:key}",
1409
+ "insertTextRules": 4,
1410
+ "sortText": "127_dump"
1411
+ },
1412
+ {
1413
+ "label": "RESTORE",
1414
+ "kind": 15,
1415
+ "detail": "Deserialize key",
1416
+ "documentation": {
1417
+ "value": "Deserialize and restore a key.\n\n```redis\nRESTORE mykey 0 \"\\x00...\" REPLACE\n```"
1418
+ },
1419
+ "insertText": "RESTORE ${1:key} ${2:ttl} ${3:serialized}",
1420
+ "insertTextRules": 4,
1421
+ "sortText": "128_restore"
1422
+ },
1423
+ {
1424
+ "label": "OBJECT ENCODING",
1425
+ "kind": 15,
1426
+ "detail": "Get encoding",
1427
+ "documentation": {
1428
+ "value": "Get the internal encoding of a key's value.\n\n```redis\nOBJECT ENCODING mykey\n```"
1429
+ },
1430
+ "insertText": "OBJECT ENCODING ${1:key}",
1431
+ "insertTextRules": 4,
1432
+ "sortText": "129_object_encoding"
1433
+ },
1434
+ {
1435
+ "label": "OBJECT REFCOUNT",
1436
+ "kind": 15,
1437
+ "detail": "Get refcount",
1438
+ "documentation": {
1439
+ "value": "Get reference count of value.\n\n```redis\nOBJECT REFCOUNT mykey\n```"
1440
+ },
1441
+ "insertText": "OBJECT REFCOUNT ${1:key}",
1442
+ "insertTextRules": 4,
1443
+ "sortText": "130_object_refcount"
1444
+ },
1445
+ {
1446
+ "label": "OBJECT IDLETIME",
1447
+ "kind": 15,
1448
+ "detail": "Get idle time",
1449
+ "documentation": {
1450
+ "value": "Get seconds since last access.\n\n```redis\nOBJECT IDLETIME mykey\n```"
1451
+ },
1452
+ "insertText": "OBJECT IDLETIME ${1:key}",
1453
+ "insertTextRules": 4,
1454
+ "sortText": "131_object_idletime"
1455
+ },
1456
+ {
1457
+ "label": "OBJECT HELP",
1458
+ "kind": 15,
1459
+ "detail": "Object help",
1460
+ "documentation": {
1461
+ "value": "Get help for OBJECT subcommands.\n\n```redis\nOBJECT HELP\n```"
1462
+ },
1463
+ "insertText": "OBJECT HELP",
1464
+ "insertTextRules": 4,
1465
+ "sortText": "132_object_help"
1466
+ },
1467
+ {
1468
+ "label": "SORT",
1469
+ "kind": 15,
1470
+ "detail": "Sort list/set",
1471
+ "documentation": {
1472
+ "value": "Sort elements in a list, set, or sorted set.\n\n```redis\nSORT mylist\nSORT mylist DESC LIMIT 0 10\nSORT mylist BY weight_* GET # GET name_* STORE result\n```"
1473
+ },
1474
+ "insertText": "SORT ${1:key} ${2:BY pattern} ${3:LIMIT offset count}",
1475
+ "insertTextRules": 4,
1476
+ "sortText": "133_sort"
1477
+ },
1478
+ {
1479
+ "label": "SORT_RO",
1480
+ "kind": 15,
1481
+ "detail": "Sort read-only",
1482
+ "documentation": {
1483
+ "value": "Read-only variant of SORT (Redis 7.0+).\n\n```redis\nSORT_RO mylist DESC\n```"
1484
+ },
1485
+ "insertText": "SORT_RO ${1:key}",
1486
+ "insertTextRules": 4,
1487
+ "sortText": "134_sort_ro"
1488
+ },
1489
+ {
1490
+ "label": "MOVE",
1491
+ "kind": 15,
1492
+ "detail": "Move to database",
1493
+ "documentation": {
1494
+ "value": "Move key to another database.\n\n```redis\nMOVE mykey 1\n```"
1495
+ },
1496
+ "insertText": "MOVE ${1:key} ${2:db}",
1497
+ "insertTextRules": 4,
1498
+ "sortText": "135_move"
1499
+ },
1500
+ {
1501
+ "label": "COPY",
1502
+ "kind": 15,
1503
+ "detail": "Copy key",
1504
+ "documentation": {
1505
+ "value": "Copy a key to another key (Redis 6.2+).\n\n```redis\nCOPY src dst REPLACE\nCOPY src dst DB 1\n```"
1506
+ },
1507
+ "insertText": "COPY ${1:source} ${2:destination}",
1508
+ "insertTextRules": 4,
1509
+ "sortText": "136_copy"
1510
+ },
1511
+ {
1512
+ "label": "TOUCH",
1513
+ "kind": 15,
1514
+ "detail": "Touch key",
1515
+ "documentation": {
1516
+ "value": "Alters the last access time of a key.\n\n```redis\nTOUCH key1 key2\n```"
1517
+ },
1518
+ "insertText": "TOUCH ${1:key}",
1519
+ "insertTextRules": 4,
1520
+ "sortText": "137_touch"
1521
+ },
1522
+ {
1523
+ "label": "WAIT",
1524
+ "kind": 15,
1525
+ "detail": "Wait for replicas",
1526
+ "documentation": {
1527
+ "value": "Wait for replication to complete.\n\n```redis\nWAIT 1 1000\n```"
1528
+ },
1529
+ "insertText": "WAIT ${1:numreplicas} ${2:timeout}",
1530
+ "insertTextRules": 4,
1531
+ "sortText": "138_wait"
1532
+ },
1533
+ {
1534
+ "label": "WAITAOF",
1535
+ "kind": 15,
1536
+ "detail": "Wait for AOF",
1537
+ "documentation": {
1538
+ "value": "Wait for AOF sync on replicas (Redis 7.2+).\n\n```redis\nWAITAOF 1 1 1000\n```"
1539
+ },
1540
+ "insertText": "WAITAOF ${1:numlocal} ${2:numreplicas} ${3:timeout}",
1541
+ "insertTextRules": 4,
1542
+ "sortText": "139_waitaof"
1543
+ },
1544
+ {
1545
+ "label": "OBJECT FREQ",
1546
+ "kind": 15,
1547
+ "detail": "Get access frequency",
1548
+ "documentation": {
1549
+ "value": "Get logarithmic access frequency (LFU policy).\n\n```redis\nOBJECT FREQ mykey\n```"
1550
+ },
1551
+ "insertText": "OBJECT FREQ ${1:key}",
1552
+ "insertTextRules": 4,
1553
+ "sortText": "140_object_freq"
1554
+ },
1555
+ {
1556
+ "label": "PFADD",
1557
+ "kind": 15,
1558
+ "detail": "Add to HyperLogLog",
1559
+ "documentation": {
1560
+ "value": "Add elements to a HyperLogLog.\n\n```redis\nPFADD visitors \"user1\" \"user2\" \"user3\"\n```"
1561
+ },
1562
+ "insertText": "PFADD ${1:key} ${2:element}",
1563
+ "insertTextRules": 4,
1564
+ "sortText": "141_pfadd"
1565
+ },
1566
+ {
1567
+ "label": "PFCOUNT",
1568
+ "kind": 15,
1569
+ "detail": "HyperLogLog count",
1570
+ "documentation": {
1571
+ "value": "Return approximate cardinality.\n\n```redis\nPFCOUNT visitors\nPFCOUNT hll1 hll2\n```"
1572
+ },
1573
+ "insertText": "PFCOUNT ${1:key}",
1574
+ "insertTextRules": 4,
1575
+ "sortText": "142_pfcount"
1576
+ },
1577
+ {
1578
+ "label": "PFMERGE",
1579
+ "kind": 15,
1580
+ "detail": "Merge HyperLogLogs",
1581
+ "documentation": {
1582
+ "value": "Merge multiple HyperLogLogs into one.\n\n```redis\nPFMERGE dest hll1 hll2\n```"
1583
+ },
1584
+ "insertText": "PFMERGE ${1:dest} ${2:source1} ${3:source2}",
1585
+ "insertTextRules": 4,
1586
+ "sortText": "143_pfmerge"
1587
+ },
1588
+ {
1589
+ "label": "SETBIT",
1590
+ "kind": 15,
1591
+ "detail": "Set bit",
1592
+ "documentation": {
1593
+ "value": "Set or clear a bit at offset.\n\n```redis\nSETBIT mykey 7 1\n```"
1594
+ },
1595
+ "insertText": "SETBIT ${1:key} ${2:offset} ${3|0,1|}",
1596
+ "insertTextRules": 4,
1597
+ "sortText": "144_setbit"
1598
+ },
1599
+ {
1600
+ "label": "GETBIT",
1601
+ "kind": 15,
1602
+ "detail": "Get bit",
1603
+ "documentation": {
1604
+ "value": "Returns the bit value at offset.\n\n```redis\nGETBIT mykey 7\n```"
1605
+ },
1606
+ "insertText": "GETBIT ${1:key} ${2:offset}",
1607
+ "insertTextRules": 4,
1608
+ "sortText": "145_getbit"
1609
+ },
1610
+ {
1611
+ "label": "BITCOUNT",
1612
+ "kind": 15,
1613
+ "detail": "Count set bits",
1614
+ "documentation": {
1615
+ "value": "Count the number of set bits.\n\n```redis\nBITCOUNT mykey\nBITCOUNT mykey 0 0\n```"
1616
+ },
1617
+ "insertText": "BITCOUNT ${1:key}",
1618
+ "insertTextRules": 4,
1619
+ "sortText": "146_bitcount"
1620
+ },
1621
+ {
1622
+ "label": "BITOP",
1623
+ "kind": 15,
1624
+ "detail": "Bitwise operation",
1625
+ "documentation": {
1626
+ "value": "Perform bitwise operation between keys.\n\n```redis\nBITOP AND dest key1 key2\nBITOP OR dest key1 key2\n```"
1627
+ },
1628
+ "insertText": "BITOP ${1|AND,OR,XOR,NOT|} ${2:destkey} ${3:key}",
1629
+ "insertTextRules": 4,
1630
+ "sortText": "147_bitop"
1631
+ },
1632
+ {
1633
+ "label": "BITPOS",
1634
+ "kind": 15,
1635
+ "detail": "Find first bit",
1636
+ "documentation": {
1637
+ "value": "Find position of first set/clear bit.\n\n```redis\nBITPOS mykey 1\nBITPOS mykey 0 2 5\n```"
1638
+ },
1639
+ "insertText": "BITPOS ${1:key} ${2|0,1|}",
1640
+ "insertTextRules": 4,
1641
+ "sortText": "148_bitpos"
1642
+ },
1643
+ {
1644
+ "label": "BITFIELD",
1645
+ "kind": 15,
1646
+ "detail": "Bitfield operations",
1647
+ "documentation": {
1648
+ "value": "Perform arbitrary bitfield operations.\n\n```redis\nBITFIELD mykey SET u8 0 200\nBITFIELD mykey GET u8 0\nBITFIELD mykey INCRBY u8 0 10\n```"
1649
+ },
1650
+ "insertText": "BITFIELD ${1:key} ${2|GET,SET,INCRBY|} ${3:type} ${4:offset}",
1651
+ "insertTextRules": 4,
1652
+ "sortText": "149_bitfield"
1653
+ },
1654
+ {
1655
+ "label": "BITFIELD_RO",
1656
+ "kind": 15,
1657
+ "detail": "Bitfield read-only",
1658
+ "documentation": {
1659
+ "value": "Read-only variant of BITFIELD (Redis 6.0+).\n\n```redis\nBITFIELD_RO mykey GET u8 0\n```"
1660
+ },
1661
+ "insertText": "BITFIELD_RO ${1:key} GET ${2:type} ${3:offset}",
1662
+ "insertTextRules": 4,
1663
+ "sortText": "150_bitfield_ro"
1664
+ },
1665
+ {
1666
+ "label": "XADD",
1667
+ "kind": 15,
1668
+ "detail": "Add to stream",
1669
+ "documentation": {
1670
+ "value": "Append a new entry to a stream.\n\n```redis\nXADD mystream * name Sara surname Sanfilippo\nXADD mystream MAXLEN ~ 1000 * field value\n```"
1671
+ },
1672
+ "insertText": "XADD ${1:key} ${2:*} ${3:field} ${4:value}",
1673
+ "insertTextRules": 4,
1674
+ "sortText": "151_xadd"
1675
+ },
1676
+ {
1677
+ "label": "XLEN",
1678
+ "kind": 15,
1679
+ "detail": "Stream length",
1680
+ "documentation": {
1681
+ "value": "Return the number of entries in a stream.\n\n```redis\nXLEN mystream\n```"
1682
+ },
1683
+ "insertText": "XLEN ${1:key}",
1684
+ "insertTextRules": 4,
1685
+ "sortText": "152_xlen"
1686
+ },
1687
+ {
1688
+ "label": "XRANGE",
1689
+ "kind": 15,
1690
+ "detail": "Read stream range",
1691
+ "documentation": {
1692
+ "value": "Return entries in a range.\n\n```redis\nXRANGE mystream - +\nXRANGE mystream 1526985054069-0 + COUNT 10\n```"
1693
+ },
1694
+ "insertText": "XRANGE ${1:key} ${2:-} ${3:+} COUNT ${4:10}",
1695
+ "insertTextRules": 4,
1696
+ "sortText": "153_xrange"
1697
+ },
1698
+ {
1699
+ "label": "XREVRANGE",
1700
+ "kind": 15,
1701
+ "detail": "Read stream reverse",
1702
+ "documentation": {
1703
+ "value": "Return entries in reverse order.\n\n```redis\nXREVRANGE mystream + - COUNT 10\n```"
1704
+ },
1705
+ "insertText": "XREVRANGE ${1:key} ${2:+} ${3:-} COUNT ${4:10}",
1706
+ "insertTextRules": 4,
1707
+ "sortText": "154_xrevrange"
1708
+ },
1709
+ {
1710
+ "label": "XREAD",
1711
+ "kind": 15,
1712
+ "detail": "Read from streams",
1713
+ "documentation": {
1714
+ "value": "Read entries from one or more streams.\n\n```redis\nXREAD COUNT 10 STREAMS mystream 0\nXREAD BLOCK 5000 COUNT 10 STREAMS mystream $\n```"
1715
+ },
1716
+ "insertText": "XREAD COUNT ${1:10} STREAMS ${2:key} ${3:id}",
1717
+ "insertTextRules": 4,
1718
+ "sortText": "155_xread"
1719
+ },
1720
+ {
1721
+ "label": "XREAD BLOCK",
1722
+ "kind": 15,
1723
+ "detail": "Blocking stream read",
1724
+ "documentation": {
1725
+ "value": "Blocking read from streams.\n\n```redis\nXREAD BLOCK 0 COUNT 10 STREAMS mystream $\n```"
1726
+ },
1727
+ "insertText": "XREAD BLOCK ${1:timeout} COUNT ${2:10} STREAMS ${3:key} ${4:\\$}",
1728
+ "insertTextRules": 4,
1729
+ "sortText": "156_xread_block"
1730
+ },
1731
+ {
1732
+ "label": "XGROUP CREATE",
1733
+ "kind": 15,
1734
+ "detail": "Create consumer group",
1735
+ "documentation": {
1736
+ "value": "Create a consumer group.\n\n```redis\nXGROUP CREATE mystream mygroup $ MKSTREAM\nXGROUP CREATE mystream mygroup 0\n```"
1737
+ },
1738
+ "insertText": "XGROUP CREATE ${1:key} ${2:group} ${3:\\$}",
1739
+ "insertTextRules": 4,
1740
+ "sortText": "157_xgroup_create"
1741
+ },
1742
+ {
1743
+ "label": "XGROUP DESTROY",
1744
+ "kind": 15,
1745
+ "detail": "Destroy consumer group",
1746
+ "documentation": {
1747
+ "value": "Destroy a consumer group.\n\n```redis\nXGROUP DESTROY mystream mygroup\n```"
1748
+ },
1749
+ "insertText": "XGROUP DESTROY ${1:key} ${2:group}",
1750
+ "insertTextRules": 4,
1751
+ "sortText": "158_xgroup_destroy"
1752
+ },
1753
+ {
1754
+ "label": "XGROUP DELCONSUMER",
1755
+ "kind": 15,
1756
+ "detail": "Delete consumer",
1757
+ "documentation": {
1758
+ "value": "Remove a consumer from a group.\n\n```redis\nXGROUP DELCONSUMER mystream mygroup myconsumer\n```"
1759
+ },
1760
+ "insertText": "XGROUP DELCONSUMER ${1:key} ${2:group} ${3:consumer}",
1761
+ "insertTextRules": 4,
1762
+ "sortText": "159_xgroup_delconsumer"
1763
+ },
1764
+ {
1765
+ "label": "XGROUP SETID",
1766
+ "kind": 15,
1767
+ "detail": "Set group ID",
1768
+ "documentation": {
1769
+ "value": "Set the last delivered ID of a consumer group.\n\n```redis\nXGROUP SETID mystream mygroup $\n```"
1770
+ },
1771
+ "insertText": "XGROUP SETID ${1:key} ${2:group} ${3:id}",
1772
+ "insertTextRules": 4,
1773
+ "sortText": "160_xgroup_setid"
1774
+ },
1775
+ {
1776
+ "label": "XREADGROUP",
1777
+ "kind": 15,
1778
+ "detail": "Read as consumer",
1779
+ "documentation": {
1780
+ "value": "Read from stream as a consumer group member.\n\n```redis\nXREADGROUP GROUP mygroup myconsumer COUNT 10 STREAMS mystream >\n```"
1781
+ },
1782
+ "insertText": "XREADGROUP GROUP ${1:group} ${2:consumer} COUNT ${3:10} STREAMS ${4:key} >",
1783
+ "insertTextRules": 4,
1784
+ "sortText": "161_xreadgroup"
1785
+ },
1786
+ {
1787
+ "label": "XACK",
1788
+ "kind": 15,
1789
+ "detail": "Acknowledge message",
1790
+ "documentation": {
1791
+ "value": "Acknowledge stream messages.\n\n```redis\nXACK mystream mygroup 1526569495631-0\n```"
1792
+ },
1793
+ "insertText": "XACK ${1:key} ${2:group} ${3:id}",
1794
+ "insertTextRules": 4,
1795
+ "sortText": "162_xack"
1796
+ },
1797
+ {
1798
+ "label": "XCLAIM",
1799
+ "kind": 15,
1800
+ "detail": "Claim pending message",
1801
+ "documentation": {
1802
+ "value": "Transfer ownership of pending messages.\n\n```redis\nXCLAIM mystream mygroup myconsumer 3600000 1526569495631-0\n```"
1803
+ },
1804
+ "insertText": "XCLAIM ${1:key} ${2:group} ${3:consumer} ${4:min_idle_time} ${5:id}",
1805
+ "insertTextRules": 4,
1806
+ "sortText": "163_xclaim"
1807
+ },
1808
+ {
1809
+ "label": "XAUTOCLAIM",
1810
+ "kind": 15,
1811
+ "detail": "Auto-claim pending",
1812
+ "documentation": {
1813
+ "value": "Automatically transfer idle pending messages (Redis 6.2+).\n\n```redis\nXAUTOCLAIM mystream mygroup myconsumer 3600000 0-0 COUNT 10\n```"
1814
+ },
1815
+ "insertText": "XAUTOCLAIM ${1:key} ${2:group} ${3:consumer} ${4:min_idle_time} ${5:start}",
1816
+ "insertTextRules": 4,
1817
+ "sortText": "164_xautoclaim"
1818
+ },
1819
+ {
1820
+ "label": "XPENDING",
1821
+ "kind": 15,
1822
+ "detail": "List pending messages",
1823
+ "documentation": {
1824
+ "value": "Inspect the pending entries list.\n\n```redis\nXPENDING mystream mygroup\nXPENDING mystream mygroup - + 10\n```"
1825
+ },
1826
+ "insertText": "XPENDING ${1:key} ${2:group}",
1827
+ "insertTextRules": 4,
1828
+ "sortText": "165_xpending"
1829
+ },
1830
+ {
1831
+ "label": "XINFO STREAM",
1832
+ "kind": 15,
1833
+ "detail": "Stream info",
1834
+ "documentation": {
1835
+ "value": "Get information about a stream.\n\n```redis\nXINFO STREAM mystream\nXINFO STREAM mystream FULL\n```"
1836
+ },
1837
+ "insertText": "XINFO STREAM ${1:key}",
1838
+ "insertTextRules": 4,
1839
+ "sortText": "166_xinfo_stream"
1840
+ },
1841
+ {
1842
+ "label": "XINFO GROUPS",
1843
+ "kind": 15,
1844
+ "detail": "Consumer groups info",
1845
+ "documentation": {
1846
+ "value": "List consumer groups.\n\n```redis\nXINFO GROUPS mystream\n```"
1847
+ },
1848
+ "insertText": "XINFO GROUPS ${1:key}",
1849
+ "insertTextRules": 4,
1850
+ "sortText": "167_xinfo_groups"
1851
+ },
1852
+ {
1853
+ "label": "XINFO CONSUMERS",
1854
+ "kind": 15,
1855
+ "detail": "Consumers info",
1856
+ "documentation": {
1857
+ "value": "List consumers in a group.\n\n```redis\nXINFO CONSUMERS mystream mygroup\n```"
1858
+ },
1859
+ "insertText": "XINFO CONSUMERS ${1:key} ${2:group}",
1860
+ "insertTextRules": 4,
1861
+ "sortText": "168_xinfo_consumers"
1862
+ },
1863
+ {
1864
+ "label": "XTRIM",
1865
+ "kind": 15,
1866
+ "detail": "Trim stream",
1867
+ "documentation": {
1868
+ "value": "Trim the stream to a certain size.\n\n```redis\nXTRIM mystream MAXLEN 1000\nXTRIM mystream MINID 1526569495631-0\n```"
1869
+ },
1870
+ "insertText": "XTRIM ${1:key} MAXLEN ${2:count}",
1871
+ "insertTextRules": 4,
1872
+ "sortText": "169_xtrim"
1873
+ },
1874
+ {
1875
+ "label": "XDEL",
1876
+ "kind": 15,
1877
+ "detail": "Delete stream entries",
1878
+ "documentation": {
1879
+ "value": "Delete specific entries from a stream.\n\n```redis\nXDEL mystream 1526569495631-0\n```"
1880
+ },
1881
+ "insertText": "XDEL ${1:key} ${2:id}",
1882
+ "insertTextRules": 4,
1883
+ "sortText": "170_xdel"
1884
+ },
1885
+ {
1886
+ "label": "XSETID",
1887
+ "kind": 15,
1888
+ "detail": "Set stream ID",
1889
+ "documentation": {
1890
+ "value": "Set the last entry ID of a stream.\n\n```redis\nXSETID mystream 1526569495631-0\n```"
1891
+ },
1892
+ "insertText": "XSETID ${1:key} ${2:id}",
1893
+ "insertTextRules": 4,
1894
+ "sortText": "171_xsetid"
1895
+ },
1896
+ {
1897
+ "label": "SUBSCRIBE",
1898
+ "kind": 15,
1899
+ "detail": "Subscribe to channels",
1900
+ "documentation": {
1901
+ "value": "Listen for messages on channels.\n\n```redis\nSUBSCRIBE channel1 channel2\n```"
1902
+ },
1903
+ "insertText": "SUBSCRIBE ${1:channel}",
1904
+ "insertTextRules": 4,
1905
+ "sortText": "172_subscribe"
1906
+ },
1907
+ {
1908
+ "label": "UNSUBSCRIBE",
1909
+ "kind": 15,
1910
+ "detail": "Unsubscribe",
1911
+ "documentation": {
1912
+ "value": "Stop listening from channels.\n\n```redis\nUNSUBSCRIBE channel1\n```"
1913
+ },
1914
+ "insertText": "UNSUBSCRIBE ${1:channel}",
1915
+ "insertTextRules": 4,
1916
+ "sortText": "173_unsubscribe"
1917
+ },
1918
+ {
1919
+ "label": "PUBLISH",
1920
+ "kind": 15,
1921
+ "detail": "Publish message",
1922
+ "documentation": {
1923
+ "value": "Post a message to a channel.\n\n```redis\nPUBLISH mychannel \"Hello World\"\n```"
1924
+ },
1925
+ "insertText": "PUBLISH ${1:channel} ${2:message}",
1926
+ "insertTextRules": 4,
1927
+ "sortText": "174_publish"
1928
+ },
1929
+ {
1930
+ "label": "PSUBSCRIBE",
1931
+ "kind": 15,
1932
+ "detail": "Pattern subscribe",
1933
+ "documentation": {
1934
+ "value": "Subscribe to channels matching patterns.\n\n```redis\nPSUBSCRIBE news.*\nPSUBSCRIBE h?llo\n```"
1935
+ },
1936
+ "insertText": "PSUBSCRIBE ${1:pattern}",
1937
+ "insertTextRules": 4,
1938
+ "sortText": "175_psubscribe"
1939
+ },
1940
+ {
1941
+ "label": "PUNSUBSCRIBE",
1942
+ "kind": 15,
1943
+ "detail": "Pattern unsubscribe",
1944
+ "documentation": {
1945
+ "value": "Stop listening from pattern channels.\n\n```redis\nPUNSUBSCRIBE news.*\n```"
1946
+ },
1947
+ "insertText": "PUNSUBSCRIBE ${1:pattern}",
1948
+ "insertTextRules": 4,
1949
+ "sortText": "176_punsubscribe"
1950
+ },
1951
+ {
1952
+ "label": "PUBSUB CHANNELS",
1953
+ "kind": 15,
1954
+ "detail": "List active channels",
1955
+ "documentation": {
1956
+ "value": "List active channels with subscribers.\n\n```redis\nPUBSUB CHANNELS\nPUBSUB CHANNELS news.*\n```"
1957
+ },
1958
+ "insertText": "PUBSUB CHANNELS ${1:pattern}",
1959
+ "insertTextRules": 4,
1960
+ "sortText": "177_pubsub_channels"
1961
+ },
1962
+ {
1963
+ "label": "PUBSUB NUMSUB",
1964
+ "kind": 15,
1965
+ "detail": "Subscriber count",
1966
+ "documentation": {
1967
+ "value": "Get subscriber counts for channels.\n\n```redis\nPUBSUB NUMSUB channel1 channel2\n```"
1968
+ },
1969
+ "insertText": "PUBSUB NUMSUB ${1:channel}",
1970
+ "insertTextRules": 4,
1971
+ "sortText": "178_pubsub_numsub"
1972
+ },
1973
+ {
1974
+ "label": "PUBSUB NUMPAT",
1975
+ "kind": 15,
1976
+ "detail": "Pattern count",
1977
+ "documentation": {
1978
+ "value": "Get count of unique pattern subscriptions.\n\n```redis\nPUBSUB NUMPAT\n```"
1979
+ },
1980
+ "insertText": "PUBSUB NUMPAT",
1981
+ "insertTextRules": 4,
1982
+ "sortText": "179_pubsub_numpat"
1983
+ },
1984
+ {
1985
+ "label": "SSUBSCRIBE",
1986
+ "kind": 15,
1987
+ "detail": "Shard subscribe",
1988
+ "documentation": {
1989
+ "value": "Subscribe to shard channels (Redis 7.0+).\n\n```redis\nSSUBSCRIBE channel1\n```"
1990
+ },
1991
+ "insertText": "SSUBSCRIBE ${1:channel}",
1992
+ "insertTextRules": 4,
1993
+ "sortText": "180_ssubscribe"
1994
+ },
1995
+ {
1996
+ "label": "SUNSUBSCRIBE",
1997
+ "kind": 15,
1998
+ "detail": "Shard unsubscribe",
1999
+ "documentation": {
2000
+ "value": "Unsubscribe from shard channels (Redis 7.0+).\n\n```redis\nSUNSUBSCRIBE channel1\n```"
2001
+ },
2002
+ "insertText": "SUNSUBSCRIBE ${1:channel}",
2003
+ "insertTextRules": 4,
2004
+ "sortText": "181_sunsubscribe"
2005
+ },
2006
+ {
2007
+ "label": "SPUBLISH",
2008
+ "kind": 15,
2009
+ "detail": "Shard publish",
2010
+ "documentation": {
2011
+ "value": "Publish to a shard channel (Redis 7.0+).\n\n```redis\nSPUBLISH channel1 message\n```"
2012
+ },
2013
+ "insertText": "SPUBLISH ${1:channel} ${2:message}",
2014
+ "insertTextRules": 4,
2015
+ "sortText": "182_spublish"
2016
+ },
2017
+ {
2018
+ "label": "PUBSUB SHARDCHANNELS",
2019
+ "kind": 15,
2020
+ "detail": "Shard channels",
2021
+ "documentation": {
2022
+ "value": "List active shard channels (Redis 7.0+).\n\n```redis\nPUBSUB SHARDCHANNELS\n```"
2023
+ },
2024
+ "insertText": "PUBSUB SHARDCHANNELS",
2025
+ "insertTextRules": 4,
2026
+ "sortText": "183_pubsub_shardchannels"
2027
+ },
2028
+ {
2029
+ "label": "PUBSUB SHARDNUMSUB",
2030
+ "kind": 15,
2031
+ "detail": "Shard sub count",
2032
+ "documentation": {
2033
+ "value": "Get shard subscriber counts (Redis 7.0+).\n\n```redis\nPUBSUB SHARDNUMSUB ch1\n```"
2034
+ },
2035
+ "insertText": "PUBSUB SHARDNUMSUB ${1:channel}",
2036
+ "insertTextRules": 4,
2037
+ "sortText": "184_pubsub_shardnumsub"
2038
+ },
2039
+ {
2040
+ "label": "MULTI",
2041
+ "kind": 14,
2042
+ "detail": "Start transaction",
2043
+ "documentation": {
2044
+ "value": "Mark the start of a transaction block.\n\n```redis\nMULTI\nSET key1 \"val1\"\nSET key2 \"val2\"\nEXEC\n```"
2045
+ },
2046
+ "sortText": "185_multi"
2047
+ },
2048
+ {
2049
+ "label": "EXEC",
2050
+ "kind": 14,
2051
+ "detail": "Execute transaction",
2052
+ "documentation": {
2053
+ "value": "Execute all commands issued after MULTI.\n\n```redis\nEXEC\n```"
2054
+ },
2055
+ "sortText": "186_exec"
2056
+ },
2057
+ {
2058
+ "label": "DISCARD",
2059
+ "kind": 14,
2060
+ "detail": "Discard transaction",
2061
+ "documentation": {
2062
+ "value": "Discard all commands issued after MULTI.\n\n```redis\nDISCARD\n```"
2063
+ },
2064
+ "sortText": "187_discard"
2065
+ },
2066
+ {
2067
+ "label": "WATCH",
2068
+ "kind": 15,
2069
+ "detail": "Watch keys",
2070
+ "documentation": {
2071
+ "value": "Watch keys for conditional execution (optimistic locking).\n\n```redis\nWATCH mykey\nMULTI\nSET mykey newval\nEXEC\n```"
2072
+ },
2073
+ "insertText": "WATCH ${1:key}",
2074
+ "insertTextRules": 4,
2075
+ "sortText": "188_watch"
2076
+ },
2077
+ {
2078
+ "label": "UNWATCH",
2079
+ "kind": 14,
2080
+ "detail": "Unwatch keys",
2081
+ "documentation": {
2082
+ "value": "Forget all watched keys.\n\n```redis\nUNWATCH\n```"
2083
+ },
2084
+ "sortText": "189_unwatch"
2085
+ },
2086
+ {
2087
+ "label": "EVAL",
2088
+ "kind": 15,
2089
+ "detail": "Evaluate Lua script",
2090
+ "documentation": {
2091
+ "value": "Execute a Lua script server-side.\n\n```redis\nEVAL \"return redis.call('GET',KEYS[1])\" 1 mykey\nEVAL \"return redis.call('SET',KEYS[1],ARGV[1])\" 1 mykey myval\n```"
2092
+ },
2093
+ "insertText": "EVAL \"${1:script}\" ${2:numkeys} ${3:key}",
2094
+ "insertTextRules": 4,
2095
+ "sortText": "190_eval"
2096
+ },
2097
+ {
2098
+ "label": "EVALSHA",
2099
+ "kind": 15,
2100
+ "detail": "Evaluate cached script",
2101
+ "documentation": {
2102
+ "value": "Execute a cached Lua script by SHA1.\n\n```redis\nEVALSHA sha1 1 mykey\n```"
2103
+ },
2104
+ "insertText": "EVALSHA ${1:sha1} ${2:numkeys} ${3:key}",
2105
+ "insertTextRules": 4,
2106
+ "sortText": "191_evalsha"
2107
+ },
2108
+ {
2109
+ "label": "EVALRO",
2110
+ "kind": 15,
2111
+ "detail": "Eval read-only",
2112
+ "documentation": {
2113
+ "value": "Execute Lua script in read-only mode (Redis 7.0+).\n\n```redis\nEVALRO \"return redis.call('GET',KEYS[1])\" 1 mykey\n```"
2114
+ },
2115
+ "insertText": "EVALRO \"${1:script}\" ${2:numkeys} ${3:key}",
2116
+ "insertTextRules": 4,
2117
+ "sortText": "192_evalro"
2118
+ },
2119
+ {
2120
+ "label": "EVALSHA_RO",
2121
+ "kind": 15,
2122
+ "detail": "Evalsha read-only",
2123
+ "documentation": {
2124
+ "value": "Execute cached script in read-only mode (Redis 7.0+)."
2125
+ },
2126
+ "insertText": "EVALSHA_RO ${1:sha1} ${2:numkeys} ${3:key}",
2127
+ "insertTextRules": 4,
2128
+ "sortText": "193_evalsha_ro"
2129
+ },
2130
+ {
2131
+ "label": "SCRIPT LOAD",
2132
+ "kind": 15,
2133
+ "detail": "Load script",
2134
+ "documentation": {
2135
+ "value": "Load a Lua script into cache.\n\n```redis\nSCRIPT LOAD \"return 1\"\n```"
2136
+ },
2137
+ "insertText": "SCRIPT LOAD \"${1:script}\"",
2138
+ "insertTextRules": 4,
2139
+ "sortText": "194_script_load"
2140
+ },
2141
+ {
2142
+ "label": "SCRIPT EXISTS",
2143
+ "kind": 15,
2144
+ "detail": "Check script cache",
2145
+ "documentation": {
2146
+ "value": "Check if scripts exist in cache.\n\n```redis\nSCRIPT EXISTS sha1 sha2\n```"
2147
+ },
2148
+ "insertText": "SCRIPT EXISTS ${1:sha1}",
2149
+ "insertTextRules": 4,
2150
+ "sortText": "195_script_exists"
2151
+ },
2152
+ {
2153
+ "label": "SCRIPT FLUSH",
2154
+ "kind": 14,
2155
+ "detail": "Flush script cache",
2156
+ "documentation": {
2157
+ "value": "Remove all scripts from the cache.\n\n```redis\nSCRIPT FLUSH\n```"
2158
+ },
2159
+ "sortText": "196_script_flush"
2160
+ },
2161
+ {
2162
+ "label": "SCRIPT KILL",
2163
+ "kind": 14,
2164
+ "detail": "Kill running script",
2165
+ "documentation": {
2166
+ "value": "Kill the currently executing Lua script.\n\n```redis\nSCRIPT KILL\n```"
2167
+ },
2168
+ "sortText": "197_script_kill"
2169
+ },
2170
+ {
2171
+ "label": "FUNCTION LOAD",
2172
+ "kind": 15,
2173
+ "detail": "Load function",
2174
+ "documentation": {
2175
+ "value": "Load a library (Redis 7.0+).\n\n```redis\nFUNCTION LOAD \"#!lua name=mylib\\nredis.register_function('myfunc', function(keys, args) return redis.call('GET', keys[1]) end)\"\n```"
2176
+ },
2177
+ "insertText": "FUNCTION LOAD \"${1:code}\"",
2178
+ "insertTextRules": 4,
2179
+ "sortText": "198_function_load"
2180
+ },
2181
+ {
2182
+ "label": "FCALL",
2183
+ "kind": 15,
2184
+ "detail": "Call function",
2185
+ "documentation": {
2186
+ "value": "Call a Redis function (Redis 7.0+).\n\n```redis\nFCALL myfunc 1 mykey\n```"
2187
+ },
2188
+ "insertText": "FCALL ${1:function} ${2:numkeys} ${3:key}",
2189
+ "insertTextRules": 4,
2190
+ "sortText": "199_fcall"
2191
+ },
2192
+ {
2193
+ "label": "FCALL_RO",
2194
+ "kind": 15,
2195
+ "detail": "Call function read-only",
2196
+ "documentation": {
2197
+ "value": "Call a function in read-only mode (Redis 7.0+)."
2198
+ },
2199
+ "insertText": "FCALL_RO ${1:function} ${2:numkeys} ${3:key}",
2200
+ "insertTextRules": 4,
2201
+ "sortText": "200_fcall_ro"
2202
+ },
2203
+ {
2204
+ "label": "FUNCTION LIST",
2205
+ "kind": 14,
2206
+ "detail": "List functions",
2207
+ "documentation": {
2208
+ "value": "List loaded functions (Redis 7.0+).\n\n```redis\nFUNCTION LIST\nFUNCTION LIST LIBRARYNAME mylib\n```"
2209
+ },
2210
+ "sortText": "201_function_list"
2211
+ },
2212
+ {
2213
+ "label": "FUNCTION DUMP",
2214
+ "kind": 14,
2215
+ "detail": "Dump functions",
2216
+ "documentation": {
2217
+ "value": "Dump all loaded functions (Redis 7.0+)."
2218
+ },
2219
+ "sortText": "202_function_dump"
2220
+ },
2221
+ {
2222
+ "label": "FUNCTION RESTORE",
2223
+ "kind": 15,
2224
+ "detail": "Restore functions",
2225
+ "documentation": {
2226
+ "value": "Restore functions from dump (Redis 7.0+)."
2227
+ },
2228
+ "insertText": "FUNCTION RESTORE ${1:payload}",
2229
+ "insertTextRules": 4,
2230
+ "sortText": "203_function_restore"
2231
+ },
2232
+ {
2233
+ "label": "FUNCTION FLUSH",
2234
+ "kind": 14,
2235
+ "detail": "Flush functions",
2236
+ "documentation": {
2237
+ "value": "Delete all functions (Redis 7.0+)."
2238
+ },
2239
+ "sortText": "204_function_flush"
2240
+ },
2241
+ {
2242
+ "label": "FUNCTION DELETE",
2243
+ "kind": 15,
2244
+ "detail": "Delete function lib",
2245
+ "documentation": {
2246
+ "value": "Delete a function library (Redis 7.0+).\n\n```redis\nFUNCTION DELETE mylib\n```"
2247
+ },
2248
+ "insertText": "FUNCTION DELETE ${1:library}",
2249
+ "insertTextRules": 4,
2250
+ "sortText": "205_function_delete"
2251
+ },
2252
+ {
2253
+ "label": "FUNCTION STATS",
2254
+ "kind": 14,
2255
+ "detail": "Function stats",
2256
+ "documentation": {
2257
+ "value": "Get function execution stats (Redis 7.0+)."
2258
+ },
2259
+ "sortText": "206_function_stats"
2260
+ },
2261
+ {
2262
+ "label": "GEOADD",
2263
+ "kind": 15,
2264
+ "detail": "Add geo member",
2265
+ "documentation": {
2266
+ "value": "Add geospatial items to a sorted set.\n\n```redis\nGEOADD places 13.361389 38.115556 \"Palermo\"\nGEOADD places NX 13.361389 38.115556 \"Palermo\"\n```"
2267
+ },
2268
+ "insertText": "GEOADD ${1:key} ${2:longitude} ${3:latitude} ${4:member}",
2269
+ "insertTextRules": 4,
2270
+ "sortText": "207_geoadd"
2271
+ },
2272
+ {
2273
+ "label": "GEODIST",
2274
+ "kind": 15,
2275
+ "detail": "Distance between members",
2276
+ "documentation": {
2277
+ "value": "Return distance between two members.\n\n```redis\nGEODIST places \"Palermo\" \"Catania\" km\n```"
2278
+ },
2279
+ "insertText": "GEODIST ${1:key} ${2:member1} ${3:member2} ${4|m,km,mi,ft|}",
2280
+ "insertTextRules": 4,
2281
+ "sortText": "208_geodist"
2282
+ },
2283
+ {
2284
+ "label": "GEOHASH",
2285
+ "kind": 15,
2286
+ "detail": "Get geohash",
2287
+ "documentation": {
2288
+ "value": "Return Geohash strings of members.\n\n```redis\nGEOHASH places \"Palermo\"\n```"
2289
+ },
2290
+ "insertText": "GEOHASH ${1:key} ${2:member}",
2291
+ "insertTextRules": 4,
2292
+ "sortText": "209_geohash"
2293
+ },
2294
+ {
2295
+ "label": "GEOPOS",
2296
+ "kind": 15,
2297
+ "detail": "Get position",
2298
+ "documentation": {
2299
+ "value": "Return longitude/latitude of members.\n\n```redis\nGEOPOS places \"Palermo\"\n```"
2300
+ },
2301
+ "insertText": "GEOPOS ${1:key} ${2:member}",
2302
+ "insertTextRules": 4,
2303
+ "sortText": "210_geopos"
2304
+ },
2305
+ {
2306
+ "label": "GEOSEARCH",
2307
+ "kind": 15,
2308
+ "detail": "Search by radius/box",
2309
+ "documentation": {
2310
+ "value": "Search for geo members by radius or box (Redis 6.2+).\n\n```redis\nGEOSEARCH places FROMMEMBER \"Palermo\" BYRADIUS 100 km ASC COUNT 5\nGEOSEARCH places FROMLONLAT 13.361 38.115 BYBOX 200 200 km ASC\n```"
2311
+ },
2312
+ "insertText": "GEOSEARCH ${1:key} FROMMEMBER ${2:member} BYRADIUS ${3:radius} ${4|m,km,mi,ft|}",
2313
+ "insertTextRules": 4,
2314
+ "sortText": "211_geosearch"
2315
+ },
2316
+ {
2317
+ "label": "GEOSEARCHSTORE",
2318
+ "kind": 15,
2319
+ "detail": "Store geo search",
2320
+ "documentation": {
2321
+ "value": "Store GEOSEARCH results (Redis 6.2+).\n\n```redis\nGEOSEARCHSTORE dest src FROMMEMBER \"Palermo\" BYRADIUS 100 km\n```"
2322
+ },
2323
+ "insertText": "GEOSEARCHSTORE ${1:dest} ${2:src} FROMMEMBER ${3:member} BYRADIUS ${4:radius} ${5|m,km,mi,ft|}",
2324
+ "insertTextRules": 4,
2325
+ "sortText": "212_geosearchstore"
2326
+ },
2327
+ {
2328
+ "label": "GEORADIUS",
2329
+ "kind": 15,
2330
+ "detail": "Search by radius (legacy)",
2331
+ "documentation": {
2332
+ "value": "Query members in a radius. Use GEOSEARCH instead.\n\n```redis\nGEORADIUS places 15 37 200 km WITHCOORD WITHDIST COUNT 5 ASC\n```"
2333
+ },
2334
+ "insertText": "GEORADIUS ${1:key} ${2:lon} ${3:lat} ${4:radius} ${5|m,km,mi,ft|}",
2335
+ "insertTextRules": 4,
2336
+ "sortText": "213_georadius"
2337
+ },
2338
+ {
2339
+ "label": "GEORADIUSBYMEMBER",
2340
+ "kind": 15,
2341
+ "detail": "Radius by member (legacy)",
2342
+ "documentation": {
2343
+ "value": "Query by member position. Use GEOSEARCH instead.\n\n```redis\nGEORADIUSBYMEMBER places \"Palermo\" 200 km\n```"
2344
+ },
2345
+ "insertText": "GEORADIUSBYMEMBER ${1:key} ${2:member} ${3:radius} ${4|m,km,mi,ft|}",
2346
+ "insertTextRules": 4,
2347
+ "sortText": "214_georadiusbymember"
2348
+ },
2349
+ {
2350
+ "label": "INFO",
2351
+ "kind": 15,
2352
+ "detail": "Server info",
2353
+ "documentation": {
2354
+ "value": "Get information and statistics about the server.\n\n```redis\nINFO\nINFO server\nINFO memory\nINFO replication\nINFO keyspace\n```"
2355
+ },
2356
+ "insertText": "INFO ${1|server,clients,memory,persistence,stats,replication,cpu,commandstats,latencystats,cluster,keyspace,modules,errorstats,all,everything|}",
2357
+ "insertTextRules": 4,
2358
+ "sortText": "215_info"
2359
+ },
2360
+ {
2361
+ "label": "CONFIG GET",
2362
+ "kind": 15,
2363
+ "detail": "Get config",
2364
+ "documentation": {
2365
+ "value": "Get the value of a configuration parameter.\n\n```redis\nCONFIG GET maxmemory\nCONFIG GET *\n```"
2366
+ },
2367
+ "insertText": "CONFIG GET ${1:parameter}",
2368
+ "insertTextRules": 4,
2369
+ "sortText": "216_config_get"
2370
+ },
2371
+ {
2372
+ "label": "CONFIG SET",
2373
+ "kind": 15,
2374
+ "detail": "Set config",
2375
+ "documentation": {
2376
+ "value": "Set a configuration parameter.\n\n```redis\nCONFIG SET maxmemory 256mb\nCONFIG SET save \"3600 1 300 100\"\n```"
2377
+ },
2378
+ "insertText": "CONFIG SET ${1:parameter} ${2:value}",
2379
+ "insertTextRules": 4,
2380
+ "sortText": "217_config_set"
2381
+ },
2382
+ {
2383
+ "label": "CONFIG RESETSTAT",
2384
+ "kind": 14,
2385
+ "detail": "Reset stats",
2386
+ "documentation": {
2387
+ "value": "Reset the stats returned by INFO.\n\n```redis\nCONFIG RESETSTAT\n```"
2388
+ },
2389
+ "sortText": "218_config_resetstat"
2390
+ },
2391
+ {
2392
+ "label": "CONFIG REWRITE",
2393
+ "kind": 14,
2394
+ "detail": "Rewrite config",
2395
+ "documentation": {
2396
+ "value": "Rewrite redis.conf with current in-memory config.\n\n```redis\nCONFIG REWRITE\n```"
2397
+ },
2398
+ "sortText": "219_config_rewrite"
2399
+ },
2400
+ {
2401
+ "label": "DBSIZE",
2402
+ "kind": 14,
2403
+ "detail": "Database size",
2404
+ "documentation": {
2405
+ "value": "Return the number of keys in the current database.\n\n```redis\nDBSIZE\n```"
2406
+ },
2407
+ "sortText": "220_dbsize"
2408
+ },
2409
+ {
2410
+ "label": "FLUSHDB",
2411
+ "kind": 14,
2412
+ "detail": "Flush database",
2413
+ "documentation": {
2414
+ "value": "Remove all keys from the current database.\n\n```redis\nFLUSHDB\nFLUSHDB ASYNC\n```"
2415
+ },
2416
+ "sortText": "221_flushdb"
2417
+ },
2418
+ {
2419
+ "label": "FLUSHALL",
2420
+ "kind": 14,
2421
+ "detail": "Flush all databases",
2422
+ "documentation": {
2423
+ "value": "Remove all keys from all databases.\n\n```redis\nFLUSHALL\nFLUSHALL ASYNC\n```"
2424
+ },
2425
+ "sortText": "222_flushall"
2426
+ },
2427
+ {
2428
+ "label": "BGSAVE",
2429
+ "kind": 14,
2430
+ "detail": "Background save",
2431
+ "documentation": {
2432
+ "value": "Asynchronously save the dataset to disk (RDB).\n\n```redis\nBGSAVE\nBGSAVE SCHEDULE\n```"
2433
+ },
2434
+ "sortText": "223_bgsave"
2435
+ },
2436
+ {
2437
+ "label": "BGREWRITEAOF",
2438
+ "kind": 14,
2439
+ "detail": "Background AOF rewrite",
2440
+ "documentation": {
2441
+ "value": "Asynchronously rewrite the AOF file.\n\n```redis\nBGREWRITEAOF\n```"
2442
+ },
2443
+ "sortText": "224_bgrewriteaof"
2444
+ },
2445
+ {
2446
+ "label": "SAVE",
2447
+ "kind": 14,
2448
+ "detail": "Synchronous save",
2449
+ "documentation": {
2450
+ "value": "Synchronously save the dataset to disk. **Blocks server.**\n\n```redis\nSAVE\n```"
2451
+ },
2452
+ "sortText": "225_save"
2453
+ },
2454
+ {
2455
+ "label": "LASTSAVE",
2456
+ "kind": 14,
2457
+ "detail": "Last save timestamp",
2458
+ "documentation": {
2459
+ "value": "Return Unix timestamp of last successful RDB save.\n\n```redis\nLASTSAVE\n```"
2460
+ },
2461
+ "sortText": "226_lastsave"
2462
+ },
2463
+ {
2464
+ "label": "DEBUG SLEEP",
2465
+ "kind": 14,
2466
+ "detail": "Debug sleep",
2467
+ "documentation": {
2468
+ "value": "Pause the server for N seconds (debug only).\n\n```redis\nDEBUG SLEEP 5\n```"
2469
+ },
2470
+ "sortText": "227_debug_sleep"
2471
+ },
2472
+ {
2473
+ "label": "SHUTDOWN",
2474
+ "kind": 14,
2475
+ "detail": "Shutdown server",
2476
+ "documentation": {
2477
+ "value": "Synchronously save and shut down the server.\n\n```redis\nSHUTDOWN\nSHUTDOWN NOSAVE\nSHUTDOWN SAVE\n```"
2478
+ },
2479
+ "sortText": "228_shutdown"
2480
+ },
2481
+ {
2482
+ "label": "SLOWLOG GET",
2483
+ "kind": 15,
2484
+ "detail": "Get slow queries",
2485
+ "documentation": {
2486
+ "value": "Get entries from the slow log.\n\n```redis\nSLOWLOG GET 10\n```"
2487
+ },
2488
+ "insertText": "SLOWLOG GET ${1:count}",
2489
+ "insertTextRules": 4,
2490
+ "sortText": "229_slowlog_get"
2491
+ },
2492
+ {
2493
+ "label": "SLOWLOG LEN",
2494
+ "kind": 14,
2495
+ "detail": "Slow log length",
2496
+ "documentation": {
2497
+ "value": "Get the number of entries in the slow log.\n\n```redis\nSLOWLOG LEN\n```"
2498
+ },
2499
+ "sortText": "230_slowlog_len"
2500
+ },
2501
+ {
2502
+ "label": "SLOWLOG RESET",
2503
+ "kind": 14,
2504
+ "detail": "Clear slow log",
2505
+ "documentation": {
2506
+ "value": "Reset the slow log.\n\n```redis\nSLOWLOG RESET\n```"
2507
+ },
2508
+ "sortText": "231_slowlog_reset"
2509
+ },
2510
+ {
2511
+ "label": "TIME",
2512
+ "kind": 14,
2513
+ "detail": "Server time",
2514
+ "documentation": {
2515
+ "value": "Return the current server time.\n\n```redis\nTIME\n```"
2516
+ },
2517
+ "sortText": "232_time"
2518
+ },
2519
+ {
2520
+ "label": "CLIENT LIST",
2521
+ "kind": 15,
2522
+ "detail": "List clients",
2523
+ "documentation": {
2524
+ "value": "List connected clients.\n\n```redis\nCLIENT LIST\nCLIENT LIST TYPE normal\n```"
2525
+ },
2526
+ "insertText": "CLIENT LIST",
2527
+ "insertTextRules": 4,
2528
+ "sortText": "233_client_list"
2529
+ },
2530
+ {
2531
+ "label": "CLIENT ID",
2532
+ "kind": 15,
2533
+ "detail": "Client ID",
2534
+ "documentation": {
2535
+ "value": "Return current connection ID.\n\n```redis\nCLIENT ID\n```"
2536
+ },
2537
+ "insertText": "CLIENT ID",
2538
+ "insertTextRules": 4,
2539
+ "sortText": "234_client_id"
2540
+ },
2541
+ {
2542
+ "label": "CLIENT GETNAME",
2543
+ "kind": 15,
2544
+ "detail": "Get client name",
2545
+ "documentation": {
2546
+ "value": "Get the current connection name.\n\n```redis\nCLIENT GETNAME\n```"
2547
+ },
2548
+ "insertText": "CLIENT GETNAME",
2549
+ "insertTextRules": 4,
2550
+ "sortText": "235_client_getname"
2551
+ },
2552
+ {
2553
+ "label": "CLIENT SETNAME",
2554
+ "kind": 15,
2555
+ "detail": "Set client name",
2556
+ "documentation": {
2557
+ "value": "Set the current connection name.\n\n```redis\nCLIENT SETNAME myconn\n```"
2558
+ },
2559
+ "insertText": "CLIENT SETNAME ${1:name}",
2560
+ "insertTextRules": 4,
2561
+ "sortText": "236_client_setname"
2562
+ },
2563
+ {
2564
+ "label": "CLIENT KILL",
2565
+ "kind": 15,
2566
+ "detail": "Kill client",
2567
+ "documentation": {
2568
+ "value": "Kill a client connection.\n\n```redis\nCLIENT KILL ID 123\nCLIENT KILL ADDR 127.0.0.1:6379\n```"
2569
+ },
2570
+ "insertText": "CLIENT KILL ${1|ID,ADDR,LADDR,USER|} ${2:value}",
2571
+ "insertTextRules": 4,
2572
+ "sortText": "237_client_kill"
2573
+ },
2574
+ {
2575
+ "label": "CLIENT PAUSE",
2576
+ "kind": 14,
2577
+ "detail": "Pause clients",
2578
+ "documentation": {
2579
+ "value": "Pause all client commands.\n\n```redis\nCLIENT PAUSE 5000\n```"
2580
+ },
2581
+ "sortText": "238_client_pause"
2582
+ },
2583
+ {
2584
+ "label": "CLIENT UNPAUSE",
2585
+ "kind": 14,
2586
+ "detail": "Unpause clients",
2587
+ "documentation": {
2588
+ "value": "Resume client processing.\n\n```redis\nCLIENT UNPAUSE\n```"
2589
+ },
2590
+ "sortText": "239_client_unpause"
2591
+ },
2592
+ {
2593
+ "label": "CLIENT NO-EVICT",
2594
+ "kind": 15,
2595
+ "detail": "Disable eviction",
2596
+ "documentation": {
2597
+ "value": "Set current connection to not be evicted (Redis 7.0+).\n\n```redis\nCLIENT NO-EVICT ON\n```"
2598
+ },
2599
+ "insertText": "CLIENT NO-EVICT ${1|ON,OFF|}",
2600
+ "insertTextRules": 4,
2601
+ "sortText": "240_client_no-evict"
2602
+ },
2603
+ {
2604
+ "label": "CLIENT NO-TOUCH",
2605
+ "kind": 15,
2606
+ "detail": "Disable touch",
2607
+ "documentation": {
2608
+ "value": "Disable key touch for current connection (Redis 7.2+).\n\n```redis\nCLIENT NO-TOUCH ON\n```"
2609
+ },
2610
+ "insertText": "CLIENT NO-TOUCH ${1|ON,OFF|}",
2611
+ "insertTextRules": 4,
2612
+ "sortText": "241_client_no-touch"
2613
+ },
2614
+ {
2615
+ "label": "MONITOR",
2616
+ "kind": 14,
2617
+ "detail": "Monitor commands",
2618
+ "documentation": {
2619
+ "value": "Listen for all requests received. **Impacts performance.**\n\n```redis\nMONITOR\n```"
2620
+ },
2621
+ "sortText": "242_monitor"
2622
+ },
2623
+ {
2624
+ "label": "PING",
2625
+ "kind": 14,
2626
+ "detail": "Ping server",
2627
+ "documentation": {
2628
+ "value": "Test if server is alive. Returns PONG.\n\n```redis\nPING\nPING \"hello\"\n```"
2629
+ },
2630
+ "sortText": "243_ping"
2631
+ },
2632
+ {
2633
+ "label": "ECHO",
2634
+ "kind": 15,
2635
+ "detail": "Echo message",
2636
+ "documentation": {
2637
+ "value": "Echo the given string.\n\n```redis\nECHO \"Hello World\"\n```"
2638
+ },
2639
+ "insertText": "ECHO \"${1:message}\"",
2640
+ "insertTextRules": 4,
2641
+ "sortText": "244_echo"
2642
+ },
2643
+ {
2644
+ "label": "SELECT",
2645
+ "kind": 15,
2646
+ "detail": "Select database",
2647
+ "documentation": {
2648
+ "value": "Change the selected database (0-15).\n\n```redis\nSELECT 1\n```"
2649
+ },
2650
+ "insertText": "SELECT ${1:db}",
2651
+ "insertTextRules": 4,
2652
+ "sortText": "245_select"
2653
+ },
2654
+ {
2655
+ "label": "SWAPDB",
2656
+ "kind": 15,
2657
+ "detail": "Swap databases",
2658
+ "documentation": {
2659
+ "value": "Swap two Redis databases.\n\n```redis\nSWAPDB 0 1\n```"
2660
+ },
2661
+ "insertText": "SWAPDB ${1:db1} ${2:db2}",
2662
+ "insertTextRules": 4,
2663
+ "sortText": "246_swapdb"
2664
+ },
2665
+ {
2666
+ "label": "MEMORY USAGE",
2667
+ "kind": 15,
2668
+ "detail": "Memory for key",
2669
+ "documentation": {
2670
+ "value": "Estimate memory usage of a key.\n\n```redis\nMEMORY USAGE mykey\nMEMORY USAGE mykey SAMPLES 5\n```"
2671
+ },
2672
+ "insertText": "MEMORY USAGE ${1:key}",
2673
+ "insertTextRules": 4,
2674
+ "sortText": "247_memory_usage"
2675
+ },
2676
+ {
2677
+ "label": "MEMORY DOCTOR",
2678
+ "kind": 14,
2679
+ "detail": "Memory analysis",
2680
+ "documentation": {
2681
+ "value": "Get memory problems report.\n\n```redis\nMEMORY DOCTOR\n```"
2682
+ },
2683
+ "sortText": "248_memory_doctor"
2684
+ },
2685
+ {
2686
+ "label": "MEMORY STATS",
2687
+ "kind": 14,
2688
+ "detail": "Memory statistics",
2689
+ "documentation": {
2690
+ "value": "Get detailed memory statistics.\n\n```redis\nMEMORY STATS\n```"
2691
+ },
2692
+ "sortText": "249_memory_stats"
2693
+ },
2694
+ {
2695
+ "label": "MEMORY PURGE",
2696
+ "kind": 14,
2697
+ "detail": "Purge memory",
2698
+ "documentation": {
2699
+ "value": "Ask allocator to release memory.\n\n```redis\nMEMORY PURGE\n```"
2700
+ },
2701
+ "sortText": "250_memory_purge"
2702
+ },
2703
+ {
2704
+ "label": "MEMORY MALLOC-STATS",
2705
+ "kind": 14,
2706
+ "detail": "Allocator stats",
2707
+ "documentation": {
2708
+ "value": "Show allocator internal stats.\n\n```redis\nMEMORY MALLOC-STATS\n```"
2709
+ },
2710
+ "sortText": "251_memory_malloc-stats"
2711
+ },
2712
+ {
2713
+ "label": "LATENCY LATEST",
2714
+ "kind": 15,
2715
+ "detail": "Latest latency",
2716
+ "documentation": {
2717
+ "value": "Return latest latency samples.\n\n```redis\nLATENCY LATEST\n```"
2718
+ },
2719
+ "insertText": "LATENCY LATEST",
2720
+ "insertTextRules": 4,
2721
+ "sortText": "252_latency_latest"
2722
+ },
2723
+ {
2724
+ "label": "LATENCY HISTORY",
2725
+ "kind": 15,
2726
+ "detail": "Latency history",
2727
+ "documentation": {
2728
+ "value": "Return latency history for event.\n\n```redis\nLATENCY HISTORY command\n```"
2729
+ },
2730
+ "insertText": "LATENCY HISTORY ${1:event}",
2731
+ "insertTextRules": 4,
2732
+ "sortText": "253_latency_history"
2733
+ },
2734
+ {
2735
+ "label": "LATENCY RESET",
2736
+ "kind": 14,
2737
+ "detail": "Reset latency",
2738
+ "documentation": {
2739
+ "value": "Reset latency data.\n\n```redis\nLATENCY RESET\n```"
2740
+ },
2741
+ "sortText": "254_latency_reset"
2742
+ },
2743
+ {
2744
+ "label": "LATENCY GRAPH",
2745
+ "kind": 14,
2746
+ "detail": "Latency graph",
2747
+ "documentation": {
2748
+ "value": "Render a latency graph for an event."
2749
+ },
2750
+ "sortText": "255_latency_graph"
2751
+ },
2752
+ {
2753
+ "label": "DEBUG OBJECT",
2754
+ "kind": 14,
2755
+ "detail": "Debug object",
2756
+ "documentation": {
2757
+ "value": "Get debugging information about a key.\n\n```redis\nDEBUG OBJECT mykey\n```"
2758
+ },
2759
+ "sortText": "256_debug_object"
2760
+ },
2761
+ {
2762
+ "label": "COMMAND COUNT",
2763
+ "kind": 14,
2764
+ "detail": "Command count",
2765
+ "documentation": {
2766
+ "value": "Get total number of commands.\n\n```redis\nCOMMAND COUNT\n```"
2767
+ },
2768
+ "sortText": "257_command_count"
2769
+ },
2770
+ {
2771
+ "label": "COMMAND LIST",
2772
+ "kind": 14,
2773
+ "detail": "Command list",
2774
+ "documentation": {
2775
+ "value": "List all command names.\n\n```redis\nCOMMAND LIST\n```"
2776
+ },
2777
+ "sortText": "258_command_list"
2778
+ },
2779
+ {
2780
+ "label": "COMMAND INFO",
2781
+ "kind": 15,
2782
+ "detail": "Command info",
2783
+ "documentation": {
2784
+ "value": "Get details about specific commands.\n\n```redis\nCOMMAND INFO GET SET\n```"
2785
+ },
2786
+ "insertText": "COMMAND INFO ${1:command}",
2787
+ "insertTextRules": 4,
2788
+ "sortText": "259_command_info"
2789
+ },
2790
+ {
2791
+ "label": "COMMAND GETKEYS",
2792
+ "kind": 15,
2793
+ "detail": "Get command keys",
2794
+ "documentation": {
2795
+ "value": "Extract keys from a command.\n\n```redis\nCOMMAND GETKEYS SET mykey myval\n```"
2796
+ },
2797
+ "insertText": "COMMAND GETKEYS ${1:command}",
2798
+ "insertTextRules": 4,
2799
+ "sortText": "260_command_getkeys"
2800
+ },
2801
+ {
2802
+ "label": "COMMAND DOCS",
2803
+ "kind": 14,
2804
+ "detail": "Command docs",
2805
+ "documentation": {
2806
+ "value": "Get docs for commands (Redis 7.0+).\n\n```redis\nCOMMAND DOCS SET GET\n```"
2807
+ },
2808
+ "sortText": "261_command_docs"
2809
+ },
2810
+ {
2811
+ "label": "ACL LIST",
2812
+ "kind": 14,
2813
+ "detail": "List ACL rules",
2814
+ "documentation": {
2815
+ "value": "List all users and their ACL rules.\n\n```redis\nACL LIST\n```"
2816
+ },
2817
+ "sortText": "262_acl_list"
2818
+ },
2819
+ {
2820
+ "label": "ACL USERS",
2821
+ "kind": 14,
2822
+ "detail": "List usernames",
2823
+ "documentation": {
2824
+ "value": "List all configured usernames.\n\n```redis\nACL USERS\n```"
2825
+ },
2826
+ "sortText": "263_acl_users"
2827
+ },
2828
+ {
2829
+ "label": "ACL GETUSER",
2830
+ "kind": 15,
2831
+ "detail": "Get user ACL",
2832
+ "documentation": {
2833
+ "value": "Get the ACL for a specific user.\n\n```redis\nACL GETUSER default\n```"
2834
+ },
2835
+ "insertText": "ACL GETUSER ${1:username}",
2836
+ "insertTextRules": 4,
2837
+ "sortText": "264_acl_getuser"
2838
+ },
2839
+ {
2840
+ "label": "ACL SETUSER",
2841
+ "kind": 15,
2842
+ "detail": "Set user ACL",
2843
+ "documentation": {
2844
+ "value": "Create or modify a user's ACL.\n\n```redis\nACL SETUSER myuser on >password ~cached:* +get +set\nACL SETUSER myuser on >pass allkeys allcommands\n```"
2845
+ },
2846
+ "insertText": "ACL SETUSER ${1:username} ${2:rules}",
2847
+ "insertTextRules": 4,
2848
+ "sortText": "265_acl_setuser"
2849
+ },
2850
+ {
2851
+ "label": "ACL DELUSER",
2852
+ "kind": 15,
2853
+ "detail": "Delete user",
2854
+ "documentation": {
2855
+ "value": "Delete ACL users.\n\n```redis\nACL DELUSER myuser\n```"
2856
+ },
2857
+ "insertText": "ACL DELUSER ${1:username}",
2858
+ "insertTextRules": 4,
2859
+ "sortText": "266_acl_deluser"
2860
+ },
2861
+ {
2862
+ "label": "ACL WHOAMI",
2863
+ "kind": 14,
2864
+ "detail": "Current user",
2865
+ "documentation": {
2866
+ "value": "Return the current connection's username.\n\n```redis\nACL WHOAMI\n```"
2867
+ },
2868
+ "sortText": "267_acl_whoami"
2869
+ },
2870
+ {
2871
+ "label": "ACL CAT",
2872
+ "kind": 15,
2873
+ "detail": "ACL categories",
2874
+ "documentation": {
2875
+ "value": "List command categories.\n\n```redis\nACL CAT\nACL CAT string\n```"
2876
+ },
2877
+ "insertText": "ACL CAT ${1:category}",
2878
+ "insertTextRules": 4,
2879
+ "sortText": "268_acl_cat"
2880
+ },
2881
+ {
2882
+ "label": "ACL GENPASS",
2883
+ "kind": 14,
2884
+ "detail": "Generate password",
2885
+ "documentation": {
2886
+ "value": "Generate a secure password.\n\n```redis\nACL GENPASS\nACL GENPASS 128\n```"
2887
+ },
2888
+ "sortText": "269_acl_genpass"
2889
+ },
2890
+ {
2891
+ "label": "ACL LOG",
2892
+ "kind": 14,
2893
+ "detail": "ACL log",
2894
+ "documentation": {
2895
+ "value": "Show recent ACL violations.\n\n```redis\nACL LOG\nACL LOG RESET\n```"
2896
+ },
2897
+ "sortText": "270_acl_log"
2898
+ },
2899
+ {
2900
+ "label": "ACL SAVE",
2901
+ "kind": 14,
2902
+ "detail": "Save ACL",
2903
+ "documentation": {
2904
+ "value": "Save ACL rules to disk.\n\n```redis\nACL SAVE\n```"
2905
+ },
2906
+ "sortText": "271_acl_save"
2907
+ },
2908
+ {
2909
+ "label": "ACL LOAD",
2910
+ "kind": 14,
2911
+ "detail": "Load ACL",
2912
+ "documentation": {
2913
+ "value": "Load ACL rules from disk.\n\n```redis\nACL LOAD\n```"
2914
+ },
2915
+ "sortText": "272_acl_load"
2916
+ },
2917
+ {
2918
+ "label": "AUTH",
2919
+ "kind": 15,
2920
+ "detail": "Authenticate",
2921
+ "documentation": {
2922
+ "value": "Authenticate to the server.\n\n```redis\nAUTH password\nAUTH username password\n```"
2923
+ },
2924
+ "insertText": "AUTH ${1:password}",
2925
+ "insertTextRules": 4,
2926
+ "sortText": "273_auth"
2927
+ },
2928
+ {
2929
+ "label": "CLUSTER INFO",
2930
+ "kind": 14,
2931
+ "detail": "Cluster info",
2932
+ "documentation": {
2933
+ "value": "Get cluster state information.\n\n```redis\nCLUSTER INFO\n```"
2934
+ },
2935
+ "sortText": "274_cluster_info"
2936
+ },
2937
+ {
2938
+ "label": "CLUSTER NODES",
2939
+ "kind": 14,
2940
+ "detail": "Cluster nodes",
2941
+ "documentation": {
2942
+ "value": "Get cluster nodes information.\n\n```redis\nCLUSTER NODES\n```"
2943
+ },
2944
+ "sortText": "275_cluster_nodes"
2945
+ },
2946
+ {
2947
+ "label": "CLUSTER MYID",
2948
+ "kind": 14,
2949
+ "detail": "My cluster ID",
2950
+ "documentation": {
2951
+ "value": "Return the node's cluster ID.\n\n```redis\nCLUSTER MYID\n```"
2952
+ },
2953
+ "sortText": "276_cluster_myid"
2954
+ },
2955
+ {
2956
+ "label": "CLUSTER SLOTS",
2957
+ "kind": 14,
2958
+ "detail": "Cluster slots",
2959
+ "documentation": {
2960
+ "value": "Get mapping of cluster slots to nodes.\n\n```redis\nCLUSTER SLOTS\n```"
2961
+ },
2962
+ "sortText": "277_cluster_slots"
2963
+ },
2964
+ {
2965
+ "label": "CLUSTER SHARDS",
2966
+ "kind": 14,
2967
+ "detail": "Cluster shards",
2968
+ "documentation": {
2969
+ "value": "Get shard info (Redis 7.0+).\n\n```redis\nCLUSTER SHARDS\n```"
2970
+ },
2971
+ "sortText": "278_cluster_shards"
2972
+ },
2973
+ {
2974
+ "label": "CLUSTER MEET",
2975
+ "kind": 15,
2976
+ "detail": "Meet node",
2977
+ "documentation": {
2978
+ "value": "Add a node to the cluster.\n\n```redis\nCLUSTER MEET 192.168.1.1 6379\n```"
2979
+ },
2980
+ "insertText": "CLUSTER MEET ${1:ip} ${2:port}",
2981
+ "insertTextRules": 4,
2982
+ "sortText": "279_cluster_meet"
2983
+ },
2984
+ {
2985
+ "label": "CLUSTER FORGET",
2986
+ "kind": 15,
2987
+ "detail": "Forget node",
2988
+ "documentation": {
2989
+ "value": "Remove a node from the cluster.\n\n```redis\nCLUSTER FORGET node-id\n```"
2990
+ },
2991
+ "insertText": "CLUSTER FORGET ${1:node_id}",
2992
+ "insertTextRules": 4,
2993
+ "sortText": "280_cluster_forget"
2994
+ },
2995
+ {
2996
+ "label": "CLUSTER REPLICATE",
2997
+ "kind": 15,
2998
+ "detail": "Set replication",
2999
+ "documentation": {
3000
+ "value": "Make node a replica of another.\n\n```redis\nCLUSTER REPLICATE node-id\n```"
3001
+ },
3002
+ "insertText": "CLUSTER REPLICATE ${1:node_id}",
3003
+ "insertTextRules": 4,
3004
+ "sortText": "281_cluster_replicate"
3005
+ },
3006
+ {
3007
+ "label": "CLUSTER FAILOVER",
3008
+ "kind": 14,
3009
+ "detail": "Manual failover",
3010
+ "documentation": {
3011
+ "value": "Trigger manual failover of the master.\n\n```redis\nCLUSTER FAILOVER\nCLUSTER FAILOVER FORCE\n```"
3012
+ },
3013
+ "sortText": "282_cluster_failover"
3014
+ },
3015
+ {
3016
+ "label": "CLUSTER RESET",
3017
+ "kind": 14,
3018
+ "detail": "Reset cluster",
3019
+ "documentation": {
3020
+ "value": "Reset cluster configuration.\n\n```redis\nCLUSTER RESET HARD\nCLUSTER RESET SOFT\n```"
3021
+ },
3022
+ "sortText": "283_cluster_reset"
3023
+ },
3024
+ {
3025
+ "label": "CLUSTER ADDSLOTS",
3026
+ "kind": 15,
3027
+ "detail": "Add slots",
3028
+ "documentation": {
3029
+ "value": "Assign hash slots to this node.\n\n```redis\nCLUSTER ADDSLOTS 0 1 2 3\n```"
3030
+ },
3031
+ "insertText": "CLUSTER ADDSLOTS ${1:slot}",
3032
+ "insertTextRules": 4,
3033
+ "sortText": "284_cluster_addslots"
3034
+ },
3035
+ {
3036
+ "label": "CLUSTER DELSLOTS",
3037
+ "kind": 15,
3038
+ "detail": "Delete slots",
3039
+ "documentation": {
3040
+ "value": "Remove hash slots from this node.\n\n```redis\nCLUSTER DELSLOTS 0 1 2\n```"
3041
+ },
3042
+ "insertText": "CLUSTER DELSLOTS ${1:slot}",
3043
+ "insertTextRules": 4,
3044
+ "sortText": "285_cluster_delslots"
3045
+ },
3046
+ {
3047
+ "label": "CLUSTER SETSLOT",
3048
+ "kind": 15,
3049
+ "detail": "Set slot state",
3050
+ "documentation": {
3051
+ "value": "Bind/migrate a hash slot.\n\n```redis\nCLUSTER SETSLOT 5000 IMPORTING node-id\nCLUSTER SETSLOT 5000 MIGRATING node-id\nCLUSTER SETSLOT 5000 NODE node-id\n```"
3052
+ },
3053
+ "insertText": "CLUSTER SETSLOT ${1:slot} ${2|IMPORTING,MIGRATING,NODE,STABLE|} ${3:node_id}",
3054
+ "insertTextRules": 4,
3055
+ "sortText": "286_cluster_setslot"
3056
+ },
3057
+ {
3058
+ "label": "CLUSTER COUNTKEYSINSLOT",
3059
+ "kind": 15,
3060
+ "detail": "Keys in slot",
3061
+ "documentation": {
3062
+ "value": "Count keys in a hash slot.\n\n```redis\nCLUSTER COUNTKEYSINSLOT 5000\n```"
3063
+ },
3064
+ "insertText": "CLUSTER COUNTKEYSINSLOT ${1:slot}",
3065
+ "insertTextRules": 4,
3066
+ "sortText": "287_cluster_countkeysinslot"
3067
+ },
3068
+ {
3069
+ "label": "CLUSTER GETKEYSINSLOT",
3070
+ "kind": 15,
3071
+ "detail": "Get keys in slot",
3072
+ "documentation": {
3073
+ "value": "Return keys in a hash slot.\n\n```redis\nCLUSTER GETKEYSINSLOT 5000 10\n```"
3074
+ },
3075
+ "insertText": "CLUSTER GETKEYSINSLOT ${1:slot} ${2:count}",
3076
+ "insertTextRules": 4,
3077
+ "sortText": "288_cluster_getkeysinslot"
3078
+ },
3079
+ {
3080
+ "label": "CLUSTER KEYSLOT",
3081
+ "kind": 15,
3082
+ "detail": "Get slot for key",
3083
+ "documentation": {
3084
+ "value": "Return the hash slot for a key.\n\n```redis\nCLUSTER KEYSLOT mykey\n```"
3085
+ },
3086
+ "insertText": "CLUSTER KEYSLOT ${1:key}",
3087
+ "insertTextRules": 4,
3088
+ "sortText": "289_cluster_keyslot"
3089
+ },
3090
+ {
3091
+ "label": "CLUSTER LINKS",
3092
+ "kind": 14,
3093
+ "detail": "Cluster links",
3094
+ "documentation": {
3095
+ "value": "List cluster bus connections (Redis 7.0+).\n\n```redis\nCLUSTER LINKS\n```"
3096
+ },
3097
+ "sortText": "290_cluster_links"
3098
+ },
3099
+ {
3100
+ "label": "CLUSTER FLUSHSLOTS",
3101
+ "kind": 14,
3102
+ "detail": "Flush slots",
3103
+ "documentation": {
3104
+ "value": "Delete all slots from node.\n\n```redis\nCLUSTER FLUSHSLOTS\n```"
3105
+ },
3106
+ "sortText": "291_cluster_flushslots"
3107
+ },
3108
+ {
3109
+ "label": "CLUSTER SAVECONFIG",
3110
+ "kind": 14,
3111
+ "detail": "Save cluster config",
3112
+ "documentation": {
3113
+ "value": "Save cluster configuration to disk.\n\n```redis\nCLUSTER SAVECONFIG\n```"
3114
+ },
3115
+ "sortText": "292_cluster_saveconfig"
3116
+ },
3117
+ {
3118
+ "label": "CLUSTER COUNT-FAILURE-REPORTS",
3119
+ "kind": 14,
3120
+ "detail": "Failure reports",
3121
+ "documentation": {
3122
+ "value": "Return failure reports count for a node."
3123
+ },
3124
+ "sortText": "293_cluster_count-failure-reports"
3125
+ },
3126
+ {
3127
+ "label": "READONLY",
3128
+ "kind": 15,
3129
+ "detail": "Enable readonly",
3130
+ "documentation": {
3131
+ "value": "Enable read queries on a replica.\n\n```redis\nREADONLY\n```"
3132
+ },
3133
+ "insertText": "READONLY",
3134
+ "insertTextRules": 4,
3135
+ "sortText": "294_readonly"
3136
+ },
3137
+ {
3138
+ "label": "READWRITE",
3139
+ "kind": 15,
3140
+ "detail": "Disable readonly",
3141
+ "documentation": {
3142
+ "value": "Disable read queries on a replica.\n\n```redis\nREADWRITE\n```"
3143
+ },
3144
+ "insertText": "READWRITE",
3145
+ "insertTextRules": 4,
3146
+ "sortText": "295_readwrite"
3147
+ },
3148
+ {
3149
+ "label": "REPLICAOF",
3150
+ "kind": 15,
3151
+ "detail": "Set replication",
3152
+ "documentation": {
3153
+ "value": "Make server a replica of another.\n\n```redis\nREPLICAOF host port\nREPLICAOF NO ONE\n```"
3154
+ },
3155
+ "insertText": "REPLICAOF ${1:host} ${2:port}",
3156
+ "insertTextRules": 4,
3157
+ "sortText": "296_replicaof"
3158
+ },
3159
+ {
3160
+ "label": "SLAVEOF",
3161
+ "kind": 15,
3162
+ "detail": "Set replication (legacy)",
3163
+ "documentation": {
3164
+ "value": "Legacy alias for REPLICAOF.\n\n```redis\nSLAVEOF host port\nSLAVEOF NO ONE\n```"
3165
+ },
3166
+ "insertText": "SLAVEOF ${1:host} ${2:port}",
3167
+ "insertTextRules": 4,
3168
+ "sortText": "297_slaveof"
3169
+ },
3170
+ {
3171
+ "label": "PSYNC",
3172
+ "kind": 15,
3173
+ "detail": "Partial sync",
3174
+ "documentation": {
3175
+ "value": "Internal replication command.\n\n```redis\nPSYNC replicationid offset\n```"
3176
+ },
3177
+ "insertText": "PSYNC ${1:replicationid} ${2:offset}",
3178
+ "insertTextRules": 4,
3179
+ "sortText": "298_psync"
3180
+ },
3181
+ {
3182
+ "label": "REPLCONF",
3183
+ "kind": 15,
3184
+ "detail": "Replication config",
3185
+ "documentation": {
3186
+ "value": "Internal replication configuration."
3187
+ },
3188
+ "insertText": "REPLCONF ${1:option} ${2:value}",
3189
+ "insertTextRules": 4,
3190
+ "sortText": "299_replconf"
3191
+ },
3192
+ {
3193
+ "label": "FAILOVER",
3194
+ "kind": 15,
3195
+ "detail": "Coordinated failover",
3196
+ "documentation": {
3197
+ "value": "Initiate a coordinated failover (Redis 6.2+).\n\n```redis\nFAILOVER TO host port\n```"
3198
+ },
3199
+ "insertText": "FAILOVER TO ${1:host} ${2:port}",
3200
+ "insertTextRules": 4,
3201
+ "sortText": "300_failover"
3202
+ },
3203
+ {
3204
+ "label": "Cache Pattern",
3205
+ "kind": 15,
3206
+ "detail": "Cache aside pattern",
3207
+ "documentation": {
3208
+ "value": "Common cache-aside pattern with TTL.\n\n```redis\n# Check cache first\nGET user:123\n# On miss, set with expiry\nSET user:123 '{\"name\":\"Alice\"}' EX 3600\n```"
3209
+ },
3210
+ "insertText": "GET ${1:key}\nSET ${1:key} ${2:value} EX ${3:3600}",
3211
+ "insertTextRules": 4,
3212
+ "sortText": "301_cache_pattern"
3213
+ },
3214
+ {
3215
+ "label": "Rate Limiter",
3216
+ "kind": 15,
3217
+ "detail": "Rate limiting pattern",
3218
+ "documentation": {
3219
+ "value": "Simple rate limiter using INCR + EXPIRE.\n\n```redis\nINCR rate:user:123\nEXPIRE rate:user:123 60\n# Check: if INCR result > limit, deny\n```"
3220
+ },
3221
+ "insertText": "INCR rate:${1:key}\nEXPIRE rate:${1:key} ${2:60}",
3222
+ "insertTextRules": 4,
3223
+ "sortText": "302_rate_limiter"
3224
+ },
3225
+ {
3226
+ "label": "Distributed Lock",
3227
+ "kind": 15,
3228
+ "detail": "Redis distributed lock",
3229
+ "documentation": {
3230
+ "value": "Acquire a distributed lock with NX + EX.\n\n```redis\nSET lock:resource unique_id NX EX 30\n# Release: check value then DEL\nEVAL \"if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end\" 1 lock:resource unique_id\n```"
3231
+ },
3232
+ "insertText": "SET lock:${1:resource} ${2:unique_id} NX EX ${3:30}",
3233
+ "insertTextRules": 4,
3234
+ "sortText": "303_distributed_lock"
3235
+ },
3236
+ {
3237
+ "label": "Leaderboard",
3238
+ "kind": 15,
3239
+ "detail": "Leaderboard pattern",
3240
+ "documentation": {
3241
+ "value": "Common leaderboard using sorted sets.\n\n```redis\nZADD leaderboard 100 \"player1\"\nZADD leaderboard 200 \"player2\"\nZREVRANGE leaderboard 0 9 WITHSCORES\nZRANK leaderboard \"player1\"\n```"
3242
+ },
3243
+ "insertText": "ZADD ${1:leaderboard} ${2:score} ${3:member}\nZREVRANGE ${1:leaderboard} 0 ${4:9} WITHSCORES",
3244
+ "insertTextRules": 4,
3245
+ "sortText": "304_leaderboard"
3246
+ },
3247
+ {
3248
+ "label": "Session Store",
3249
+ "kind": 15,
3250
+ "detail": "Session storage pattern",
3251
+ "documentation": {
3252
+ "value": "Store session data in a hash with expiry.\n\n```redis\nHSET session:abc user_id 123 role admin ip 10.0.0.1\nEXPIRE session:abc 1800\nHGETALL session:abc\n```"
3253
+ },
3254
+ "insertText": "HSET session:${1:id} ${2:field} ${3:value}\nEXPIRE session:${1:id} ${4:1800}",
3255
+ "insertTextRules": 4,
3256
+ "sortText": "305_session_store"
3257
+ },
3258
+ {
3259
+ "label": "Message Queue",
3260
+ "kind": 15,
3261
+ "detail": "Simple queue pattern",
3262
+ "documentation": {
3263
+ "value": "Use list as a FIFO queue.\n\n```redis\n# Producer\nLPUSH queue:tasks '{\"task\":\"email\",\"to\":\"user@example.com\"}'\n# Consumer (blocking)\nBRPOP queue:tasks 30\n```"
3264
+ },
3265
+ "insertText": "LPUSH queue:${1:name} ${2:message}\nBRPOP queue:${1:name} ${3:30}",
3266
+ "insertTextRules": 4,
3267
+ "sortText": "306_message_queue"
3268
+ },
3269
+ {
3270
+ "label": "Pub/Sub Pattern",
3271
+ "kind": 15,
3272
+ "detail": "Pub/Sub messaging",
3273
+ "documentation": {
3274
+ "value": "Publish and subscribe to channels.\n\n```redis\n# Terminal 1 (subscriber)\nSUBSCRIBE notifications\n# Terminal 2 (publisher)\nPUBLISH notifications \"Hello subscribers!\"\n```"
3275
+ },
3276
+ "insertText": "SUBSCRIBE ${1:channel}",
3277
+ "insertTextRules": 4,
3278
+ "sortText": "307_pub/sub_pattern"
3279
+ },
3280
+ {
3281
+ "label": "Pipeline Pattern",
3282
+ "kind": 15,
3283
+ "detail": "Pipeline multiple commands",
3284
+ "documentation": {
3285
+ "value": "Send multiple commands in a pipeline.\n\n```redis\n# redis-cli --pipe or using client library pipeline\nSET key1 val1\nSET key2 val2\nSET key3 val3\nGET key1\nGET key2\n```"
3286
+ },
3287
+ "insertText": "SET ${1:key1} ${2:val1}\nSET ${3:key2} ${4:val2}\nGET ${1:key1}",
3288
+ "insertTextRules": 4,
3289
+ "sortText": "308_pipeline_pattern"
3290
+ },
3291
+ {
3292
+ "label": "Consumer Group Pattern",
3293
+ "kind": 15,
3294
+ "detail": "Stream consumer group",
3295
+ "documentation": {
3296
+ "value": "Complete stream consumer group setup.\n\n```redis\nXGROUP CREATE mystream mygroup $ MKSTREAM\nXREADGROUP GROUP mygroup consumer1 COUNT 10 BLOCK 5000 STREAMS mystream >\nXACK mystream mygroup 1526569495631-0\n```"
3297
+ },
3298
+ "insertText": "XGROUP CREATE ${1:stream} ${2:group} \\$ MKSTREAM\nXREADGROUP GROUP ${2:group} ${3:consumer} COUNT ${4:10} BLOCK ${5:5000} STREAMS ${1:stream} >",
3299
+ "insertTextRules": 4,
3300
+ "sortText": "309_consumer_group_pattern"
3301
+ },
3302
+ {
3303
+ "label": "Lua Script Pattern",
3304
+ "kind": 15,
3305
+ "detail": "Common Lua script",
3306
+ "documentation": {
3307
+ "value": "Atomic compare-and-set with Lua.\n\n```redis\nEVAL \"if redis.call('get',KEYS[1]) == ARGV[1] then redis.call('set',KEYS[1],ARGV[2]) return 1 else return 0 end\" 1 mykey oldval newval\n```"
3308
+ },
3309
+ "insertText": "EVAL \"if redis.call('get',KEYS[1]) == ARGV[1] then redis.call('set',KEYS[1],ARGV[2]) return 1 else return 0 end\" 1 ${1:key} ${2:expected} ${3:newval}",
3310
+ "insertTextRules": 4,
3311
+ "sortText": "310_lua_script_pattern"
3312
+ },
3313
+ {
3314
+ "label": "MIGRATE",
3315
+ "kind": 15,
3316
+ "detail": "Migrate key",
3317
+ "documentation": {
3318
+ "value": "Atomically transfer a key to another Redis instance.\n\n```redis\nMIGRATE host 6379 mykey 0 5000 AUTH pass COPY REPLACE\n```"
3319
+ },
3320
+ "insertText": "MIGRATE ${1:host} ${2:port} ${3:key} ${4:db} ${5:timeout}",
3321
+ "insertTextRules": 4,
3322
+ "sortText": "311_migrate"
3323
+ },
3324
+ {
3325
+ "label": "DEBUG SET-ACTIVE-EXPIRE",
3326
+ "kind": 15,
3327
+ "detail": "Toggle active expiry",
3328
+ "documentation": {
3329
+ "value": "Enable/disable active expiry."
3330
+ },
3331
+ "insertText": "DEBUG SET-ACTIVE-EXPIRE ${1|0,1|}",
3332
+ "insertTextRules": 4,
3333
+ "sortText": "313_debug_set-active-expire"
3334
+ },
3335
+ {
3336
+ "label": "RESET",
3337
+ "kind": 14,
3338
+ "detail": "Reset connection",
3339
+ "documentation": {
3340
+ "value": "Reset the connection state.\n\n```redis\nRESET\n```"
3341
+ },
3342
+ "sortText": "314_reset"
3343
+ },
3344
+ {
3345
+ "label": "QUIT",
3346
+ "kind": 14,
3347
+ "detail": "Close connection",
3348
+ "documentation": {
3349
+ "value": "Close the connection.\n\n```redis\nQUIT\n```"
3350
+ },
3351
+ "sortText": "315_quit"
3352
+ },
3353
+ {
3354
+ "label": "HELLO",
3355
+ "kind": 14,
3356
+ "detail": "Switch protocol",
3357
+ "documentation": {
3358
+ "value": "Switch to RESP3 protocol.\n\n```redis\nHELLO 3\nHELLO 3 AUTH username password\n```"
3359
+ },
3360
+ "sortText": "316_hello"
3361
+ },
3362
+ {
3363
+ "label": "MODULE LOAD",
3364
+ "kind": 15,
3365
+ "detail": "Load module",
3366
+ "documentation": {
3367
+ "value": "Load a Redis module.\n\n```redis\nMODULE LOAD /path/to/module.so\n```"
3368
+ },
3369
+ "insertText": "MODULE LOAD ${1:path}",
3370
+ "insertTextRules": 4,
3371
+ "sortText": "318_module_load"
3372
+ },
3373
+ {
3374
+ "label": "MODULE LIST",
3375
+ "kind": 14,
3376
+ "detail": "List modules",
3377
+ "documentation": {
3378
+ "value": "List all loaded modules.\n\n```redis\nMODULE LIST\n```"
3379
+ },
3380
+ "sortText": "319_module_list"
3381
+ },
3382
+ {
3383
+ "label": "MODULE UNLOAD",
3384
+ "kind": 15,
3385
+ "detail": "Unload module",
3386
+ "documentation": {
3387
+ "value": "Unload a Redis module.\n\n```redis\nMODULE UNLOAD mymodule\n```"
3388
+ },
3389
+ "insertText": "MODULE UNLOAD ${1:name}",
3390
+ "insertTextRules": 4,
3391
+ "sortText": "320_module_unload"
3392
+ },
3393
+ {
3394
+ "label": "MODULE LOADEX",
3395
+ "kind": 15,
3396
+ "detail": "Load module (extended)",
3397
+ "documentation": {
3398
+ "value": "Load module with arguments (Redis 7.0+).\n\n```redis\nMODULE LOADEX /path/to/module.so CONFIG name value\n```"
3399
+ },
3400
+ "insertText": "MODULE LOADEX ${1:path}",
3401
+ "insertTextRules": 4,
3402
+ "sortText": "321_module_loadex"
3403
+ }
3404
+ ]
3405
+ }