hyb
2026-01-09 4cb426cb3ae31e772a09d4ade5b2f0242aaeefa0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
Ë
 
çúhzã óÒ—ddlZddlmZmZmZmZmZmZmZm    Z    m
Z
m Z m Z m Z ddlmZddlmZmZddlmZmZmZmZmZmZmZddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*dd    l+m,Z,m-Z-erdd
l.m/Z/e0gd ¢«Z1Gd „d e«Z2Gd„de2«Z3Gd„de%«Z4Gd„de4e «Z5Gd„de#«Z6Gd„de6e«Z7Gd„de2e4ee'e6e(e$e&e-« Z8Gd„de3e5ee7e"ee!e,«
Z9y)éN) Ú TYPE_CHECKINGÚAnyÚ AsyncIteratorÚDictÚIterableÚIteratorÚListÚLiteralÚMappingÚNoReturnÚOptionalÚUnion)Úkey_slot)ÚRedisClusterExceptionÚ
RedisError)ÚAnyKeyTÚClusterCommandsProtocolÚ
EncodableTÚKeysTÚKeyTÚPatternTÚ    ResponseTé) Ú ACLCommandsÚAsyncACLCommandsÚAsyncDataAccessCommandsÚAsyncFunctionCommandsÚAsyncManagementCommandsÚAsyncModuleCommandsÚAsyncScriptCommandsÚDataAccessCommandsÚFunctionCommandsÚManagementCommandsÚModuleCommandsÚPubSubCommandsÚScriptCommands)Ú list_or_args)ÚAsyncRedisModuleCommandsÚRedisModuleCommands)Ú TargetNodesT))ÚBITCOUNTÚBITPOSÚEVAL_ROÚ
EVALSHA_ROÚEXISTSÚGEODISTÚGEOHASHÚGEOPOSÚ    GEORADIUSÚGEORADIUSBYMEMBERÚGETÚGETBITÚGETRANGEÚHEXISTSÚHGETÚHGETALLÚHKEYSÚHLENÚHMGETÚHSTRLENÚHVALSÚKEYSÚLINDEXÚLLENÚLRANGEÚMGETÚPTTLÚ    RANDOMKEYÚSCARDÚSDIFFÚSINTERÚ    SISMEMBERÚSMEMBERSÚ SRANDMEMBERÚSTRLENÚSUNIONÚTTLÚZCARDÚZCOUNTÚZRANGEÚZSCOREc    óX—eZdZdZdeedeeeeffd„Z    de
e e fdeeee ffd„Z dede
eee fdeefd    „Zdeede
eee fd
eedeefd „Zded edeeefd „Zde
e e fdeefd„Zdededefd„Zdedefd„Zdedefd„Zdedefd„Zdedefd„Zy)ÚClusterMultiKeyCommandsúC
    A class containing commands that handle more than one key
    ÚkeysÚreturncó¢—i}|D]G}t|jj|««}|j|g«j    |«ŒI|S)z@Split keys into a dictionary that maps a slot to a list of keys.)rÚencoderÚencodeÚ
setdefaultÚappend)ÚselfrWÚ slots_to_keysÚkeyÚslots     õiH:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\redis/commands/cluster.pyÚ_partition_keys_by_slotz/ClusterMultiKeyCommands._partition_keys_by_slothsT€ðˆ Øò    ;ˆCܘDŸL™L×/Ñ/°Ó4Ó5ˆDØ × $Ñ $ T¨2Ó .× 5Ñ 5°cÕ :ð    ;ðÐóÚmappingcóėi}|j«D]J}t|jj|d««}|j    |g«j |«ŒL|S)zBSplit pairs into a dictionary that maps a slot to a list of pairs.r)ÚitemsrrZr[r\Úextend)r^reÚslots_to_pairsÚpairras     rbÚ_partition_pairs_by_slotz0ClusterMultiKeyCommands._partition_pairs_by_slotrs^€ð
ˆØ—M‘M“Oò    =ˆDܘDŸL™L×/Ñ/°°Q±Ó8Ó9ˆDØ × %Ñ % d¨BÓ /× 6Ñ 6°tÕ <ð    =ðÐrdÚcommandÚ slots_to_argsc ó—|jxr|tv}|j«}|j«Dcgc]6\}}|j|g|¢­d|j
j ||«giŽ‘Œ8c}}|j«Scc}}w©NÚ target_nodes)Úread_from_replicasÚ READ_COMMANDSÚpipelinergÚexecute_commandÚ nodes_managerÚget_node_from_slotÚexecute©r^rlrmrqÚpiperaÚ    slot_argss       rbÚ_execute_pipeline_by_slotz1ClusterMultiKeyCommands._execute_pipeline_by_slot~sš€ð"×4Ñ4ÒQ¸ÄMÐ9QÐØ}‰}‹ˆð$1×#6Ñ#6Ó#8÷        
ñ ið !ˆD×  Ñ  Øð àò ð×&Ñ&×9Ñ9¸$Ð@RÓSðó ô        
ð|‰|‹~Ðùó        
sº;B    Ú    responsesc
ó̗t|j«|«Dcic]\}}t||«D]\}}||“Œ
Œ}}}}}|D    cgc]}    ||    ‘Œ    c}    Scc}}}}wcc}    w©N)ÚzipÚvalues)
r^rWrmr|Ú slot_valuesÚresponseÚkÚvÚresultsr`s
          rbÚ_reorder_keys_by_commandz0ClusterMultiKeyCommands._reorder_keys_by_commands€ô*-¨]×-AÑ-AÓ-CÀYÓ)O÷
ñ
á% ˜XܘK¨Ó2ò
ñ1ð ˆq‰Dð
Ø ð
ˆó
ð
)-Ö- ˜“ Ò-Ð-ùõ 
ùò
.s  !A
Á
A!Úargscó†—t||«}|j|«}|jd|«}|j|||«S)áA
        Splits the keys into different slots and then calls MGET
        for the keys of every slot. This operation will not be atomic
        if keys belong to more than one slot.
 
        Returns a list of values ordered identically to ``keys``
 
        For more information see https://redis.io/commands/mget
        rD©r'rcr{r†©r^rWr‡r_Úress     rbÚmget_nonatomicz&ClusterMultiKeyCommands.mget_nonatomicœsM€ô˜D $Ó'ˆð×4Ñ4°TÓ:ˆ ð×,Ñ,¨V°]ÓCˆð×,Ñ,¨T°=À#ÓFÐFrdcóH—|j|«}|jd|«S)áÀ
        Sets key/values based on a mapping. Mapping is a dictionary of
        key/value pairs. Both keys and values should be strings or types that
        can be cast to a string via str().
 
        Splits the keys into different slots and then calls MSET
        for the keys of every slot. This operation will not be atomic
        if keys belong to more than one slot.
 
        For more information see https://redis.io/commands/mset
        ÚMSET©rkr{©r^reris   rbÚmset_nonatomicz&ClusterMultiKeyCommands.mset_nonatomic³s)€ð×6Ñ6°wÓ?ˆð×-Ñ-¨f°nÓEÐErdcóZ—|j|«}t|j||««S)úv
        Runs the given command once for the keys
        of each slot. Returns the sum of the return values.
        ©rcÚsumr{©r^rlrWr_s    rbÚ_split_command_across_slotsz3ClusterMultiKeyCommands._split_command_across_slotsÆs.€ð×4Ñ4°TÓ:ˆ ô4×1Ñ1°'¸=ÓIÓJÐJrdcó(—|jdg|¢­ŽS)zþ
        Returns the number of ``names`` that exist in the
        whole cluster. The keys are first split up into slots
        and then an EXISTS command is sent for every slot
 
        For more information see https://redis.io/commands/exists
        r/©r™©r^rWs  rbÚexistszClusterMultiKeyCommands.existsÒs€ð0ˆt×/Ñ/°Ð@¸4Ò@Ð@rdcó(—|jdg|¢­ŽS)a<
        Deletes the given keys in the cluster.
        The keys are first split up into slots
        and then an DEL command is sent for every slot
 
        Non-existent keys are ignored.
        Returns the number of keys that were deleted.
 
        For more information see https://redis.io/commands/del
        ÚDELr›rœs  rbÚdeletezClusterMultiKeyCommands.deleteÜs€ð0ˆt×/Ñ/°Ð=¸Ò=Ð=rdcó(—|jdg|¢­ŽS)aa
        Updates the last access time of given keys across the
        cluster.
 
        The keys are first split up into slots
        and then an TOUCH command is sent for every slot
 
        Non-existent keys are ignored.
        Returns the number of keys that were touched.
 
        For more information see https://redis.io/commands/touch
        ÚTOUCHr›rœs  rbÚtouchzClusterMultiKeyCommands.touchés€ð0ˆt×/Ñ/°Ð?¸$Ò?Ð?rdcó(—|jdg|¢­ŽS)aM
        Remove the specified keys in a different thread.
 
        The keys are first split up into slots
        and then an TOUCH command is sent for every slot
 
        Non-existent keys are ignored.
        Returns the number of keys that were unlinked.
 
        For more information see https://redis.io/commands/unlink
        ÚUNLINKr›rœs  rbÚunlinkzClusterMultiKeyCommands.unlinkøs€ð0ˆt×/Ñ/°Ð@¸4Ò@Ð@rdN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrrÚintr    rcr rrrkÚstrrr{r†rr rÚboolr“r™rrr r£r¦©rdrbrUrUcs„ñð¨H°T©Nð¸tÀCÈÈdÉÀOÑ?Tóð
ؘw¨
Ð2Ñ3ð
à     ˆc4˜
Ñ#Ð#Ñ    $ó
ðØðØ+2°3¸ÀÑ8LÐ3LÑ+Mðà     ˆc‰óð" .àt‰nð .ð˜s H¨ZÑ$8Ð8Ñ9ð .ð˜C‘=ð     .ð
 
ˆc‰ó .ðG 5ðG°ðG¸$¸xȹ}Ñ:MóGð.F g¨g°zÐ.AÑ&BðFÀtÈDÁzóFð&
K°3ð
K¸tð
KÈó
KðA˜DðA YóAð >˜Dð > Yó >ð @˜4ð @ Ió @ð A˜Dð A Yô ArdrUcóŽ—eZdZdZdededeeefd„Z    de
e e fdee fd„Zdededefd    „Zded
e
eee fdeefd „Zy ) ÚAsyncClusterMultiKeyCommandsrVrWr‡rXc‡ó¢K—t||«}|j|«}|jd|«ƒd{–—†}|j|||«S7Œ­w)r‰rDNrŠr‹s     rbrz+AsyncClusterMultiKeyCommands.mget_nonatomic sZèø€ô˜D $Ó'ˆð×4Ñ4°TÓ:ˆ ð×2Ñ2°6¸=ÓI×Iˆð×,Ñ,¨T°=À#ÓFÐFðJús‚3AµA ¶ArecƒódK—|j|«}|jd|«ƒd{–—†S7Œ­w)rrNr‘r’s   rbr“z+AsyncClusterMultiKeyCommands.mset_nonatomic#s3èø€ð×6Ñ6°wÓ?ˆð×3Ñ3°F¸NÓK×KÐKÐKús ‚'0©.ª0rlc‡óvK—|j|«}t|j||«ƒd{–—†«S7Œ­w)r•Nr–r˜s    rbr™z8AsyncClusterMultiKeyCommands._split_command_across_slots6s8èø€ð×4Ñ4°TÓ:ˆ ô˜×7Ñ7¸ÀÓO×OÓPÐPÐOús ‚,9®7¯    9rmc ƒó†K—|jr|j«ƒd{–—†|jxr|tv}|j    «}|j «Dcgc]6\}}|j |g|¢­d|jj||«giŽ‘Œ8c}}|j«ƒd{–—†S7Œ”cc}}w7Œ ­wro)
Ú _initializeÚ
initializerqrrrsrgrtrurvrwrxs       rbr{z6AsyncClusterMultiKeyCommands._execute_pipeline_by_slotBsÄèø€ð × Ò Ø—/‘/Ó#× #Ð #Ø!×4Ñ4ÒQ¸ÄMÐ9QÐØ}‰}‹ˆð$1×#6Ñ#6Ó#8÷        
ñ ið !ˆD×  Ñ  Øð àò ð×&Ñ&×9Ñ9¸$Ð@RÓSðó ô        
ð—\‘\“^×#Ð#ð $úó        
ð$ús-‚ C¢B7£=CÁ ;B9ÂCÂ2B?Â3CÂ9CN)r§r¨r©rªrrr    r rrr rrr­r“r¬r«r™rr{r®rdrbr°r°s¡„ñðG¨ðG°tðGÀÀXÈcÁ]Ñ@SóGð.L¨G°G¸ZÐ4GÑ,HðLÈTÐRVÉZóLð&
Q¸ð
QÀTð
QÈcó
Qð$Øð$Ø+2°3¸ÀÑ8LÐ3LÑ+Mð$à     ˆc‰ô$rdr°c
ó†—eZdZdZdefd„Zdefd„Zdefd„Zdddefd„Z    ddd    e
defd
„Z ddd    e
defd „Z d e defd „Zdedefd„Zd    e
deefd„Zd    e
defd„Z    d2dddeedefd„Zd2deddefd„Zdedefd„Z    d2dede deddefd„Zdefd„Zdddedefd„Z    d3dededdefd„Z    d2deddefd „Zd!e d"e defd#„Z    d2d$e deddefd%„Zddded e d&edef
d'„Z d e defd(„Z!    d2dededdefd)„Z"d2deddefd*„Z#d2d+„Z$d2d,„Z%dddefd-„Z&d2dedddfd.„Z'd2dedddfd/„Z(d2deddefd0„Z)d2deddefd1„Z*y)4ÚClusterManagementCommandsú¸
    A class for Redis Cluster management commands
 
    The class inherits from Redis's core ManagementCommands class and do the
    required adjustments to work with cluster mode
    rXcó—td«‚)z
        Make the server a replica of another instance, or promote it as master.
 
        For more information see https://redis.io/commands/slaveof
        z(SLAVEOF is not supported in cluster mode©r©r^r‡Úkwargss   rbÚslaveofz!ClusterManagementCommands.slaveof^s€ô $Ð$NÓOÐOrdcó—td«‚)zŸ
        Make the server a replica of another instance, or promote it as master.
 
        For more information see https://redis.io/commands/replicaof
        z*REPLICAOF is not supported in cluster moder»r¼s   rbÚ    replicaofz#ClusterManagementCommands.replicaoffs€ô $Ð$PÓQÐQrdcó—td«‚)zo
        Swaps two Redis databases.
 
        For more information see https://redis.io/commands/swapdb
        z'SWAPDB is not supported in cluster moder»r¼s   rbÚswapdbz ClusterManagementCommands.swapdbns€ô $Ð$MÓNÐNrdÚ target_noder*có(—|jd|¬«S)zÈ
        Returns the node's id.
 
        :target_node: 'ClusterNode'
            The node to execute the command on
 
        For more information check https://redis.io/commands/cluster-myid/
        z CLUSTER MYID©rp©rt©r^rÃs  rbÚ cluster_myidz&ClusterManagementCommands.cluster_myidvs€ð×#Ñ# NÀÐ#ÓMÐMrdÚslotscó.—|jdg|¢­d|iŽS)zô
        Assign new hash slots to receiving node. Sends to specified node.
 
        :target_node: 'ClusterNode'
            The node to execute the command on
 
        For more information see https://redis.io/commands/cluster-addslots
        zCLUSTER ADDSLOTSrprÆ©r^rÃrÉs   rbÚcluster_addslotsz*ClusterManagementCommands.cluster_addslotss,€ð$ˆt×#Ñ#Ø ð
Ø!&ò
Ø5@ñ
ð    
rdcó.—|jdg|¢­d|iŽS)aÈ
        Similar to the CLUSTER ADDSLOTS command.
        The difference between the two commands is that ADDSLOTS takes a list of slots
        to assign to the node, while ADDSLOTSRANGE takes a list of slot ranges
        (specified by start and end slots) to assign to the node.
 
        :target_node: 'ClusterNode'
            The node to execute the command on
 
        For more information see https://redis.io/commands/cluster-addslotsrange
        zCLUSTER ADDSLOTSRANGErprÆrËs   rbÚcluster_addslotsrangez/ClusterManagementCommands.cluster_addslotsranges,€ð$ˆt×#Ñ#Ø #ð
Ø&+ò
Ø:Eñ
ð    
rdÚslot_idcó&—|jd|«S)zÐ
        Return the number of local keys in the specified hash slot
        Send to node based on specified slot_id
 
        For more information see https://redis.io/commands/cluster-countkeysinslot
        zCLUSTER COUNTKEYSINSLOTrÆ©r^rÏs  rbÚcluster_countkeysinslotz1ClusterManagementCommands.cluster_countkeysinslot¢s€ð×#Ñ#Ð$=¸wÓGÐGrdÚnode_idcó&—|jd|«S)zÇ
        Return the number of failure reports active for a given node
        Sends to a random node
 
        For more information see https://redis.io/commands/cluster-count-failure-reports
        zCLUSTER COUNT-FAILURE-REPORTSrÆ)r^rÓs  rbÚcluster_count_failure_reportz6ClusterManagementCommands.cluster_count_failure_report«s€ð×#Ñ#Ð$CÀWÓMÐMrdcóL—|Dcgc]}|jd|«‘Œc}Scc}w)á
        Set hash slots as unbound in the cluster.
        It determines by it self what node the slot is in and sends it there
 
        Returns a list of the results for each processed slot.
 
        For more information see https://redis.io/commands/cluster-delslots
        úCLUSTER DELSLOTSrÆ)r^rÉras   rbÚcluster_delslotsz*ClusterManagementCommands.cluster_delslots´s(€ðLQÖQÀ4×$Ñ$Ð%7¸Õ>ÒQÐQùÒQs…!có(—|jdg|¢­ŽS)aQ
        Similar to the CLUSTER DELSLOTS command.
        The difference is that CLUSTER DELSLOTS takes a list of hash slots to remove
        from the node, while CLUSTER DELSLOTSRANGE takes a list of slot ranges to remove
        from the node.
 
        For more information see https://redis.io/commands/cluster-delslotsrange
        zCLUSTER DELSLOTSRANGErÆ©r^rÉs  rbÚcluster_delslotsrangez/ClusterManagementCommands.cluster_delslotsrange¿s€ð$ˆt×#Ñ#Ð$;ÐD¸eÒDÐDrdNÚoptioncó”—|r4|j«dvrtd|›«‚|jd||¬«S|jd|¬«S)a 
        Forces a slave to perform a manual failover of its master
        Sends to specified node
 
        :target_node: 'ClusterNode'
            The node to execute the command on
 
        For more information see https://redis.io/commands/cluster-failover
        )ÚFORCEÚTAKEOVERz-Invalid option for CLUSTER FAILOVER command: zCLUSTER FAILOVERrÅ)Úupperrrt)r^rÃrÝs   rbÚcluster_failoverz*ClusterManagementCommands.cluster_failoverÊsg€ñ ؏|‰|‹~Ð%:Ñ:Ü ØCÀFÀ8ÐLóðð×+Ñ+Ø&¨¸[ð,óðð×'Ñ'Ð(:ÈÐ'ÓUÐ Urdrpcó(—|jd|¬«S)zñ
        Provides info about Redis Cluster node state.
        The command will be sent to a random node in the cluster if no target
        node is specified.
 
        For more information see https://redis.io/commands/cluster-info
        z CLUSTER INFOrÅrÆ©r^rps  rbÚ cluster_infoz&ClusterManagementCommands.cluster_infoâs€ð×#Ñ# NÀÐ#ÓNÐNrdr`có&—|jd|«S)z´
        Returns the hash slot of the specified key
        Sends to random node in the cluster
 
        For more information see https://redis.io/commands/cluster-keyslot
        zCLUSTER KEYSLOTrÆ)r^r`s  rbÚcluster_keyslotz)ClusterManagementCommands.cluster_keyslotìs€ð×#Ñ#Ð$5°sÓ;Ð;rdÚhostÚportcó,—|jd|||¬«S)z°
        Force a node cluster to handshake with another node.
        Sends to specified node.
 
        For more information see https://redis.io/commands/cluster-meet
        z CLUSTER MEETrÅrÆ)r^rèrérps    rbÚ cluster_meetz&ClusterManagementCommands.cluster_meetõs%€ð×#Ñ#Ø ˜D $°\ð$ó
ð    
rdcó$—|jd«S)z¨
        Get Cluster config for the node.
        Sends to random node in the cluster
 
        For more information see https://redis.io/commands/cluster-nodes
        z CLUSTER NODESrÆ)r^s rbÚ cluster_nodesz'ClusterManagementCommands.cluster_nodess€ð×#Ñ# OÓ4Ð4rdcó*—|jd||¬«S)zš
        Reconfigure a node as a slave of the specified master node
 
        For more information see https://redis.io/commands/cluster-replicate
        zCLUSTER REPLICATErÅrÆ)r^rprÓs   rbÚcluster_replicatez+ClusterManagementCommands.cluster_replicate s#€ð×#Ñ#Ø  °|ð$ó
ð    
rdÚsoftcó>—|jd|rd|¬«Sd|¬«S)zð
        Reset a Redis Cluster node
 
        If 'soft' is True then it will send 'SOFT' argument
        If 'soft' is False then it will send 'HARD' argument
 
        For more information see https://redis.io/commands/cluster-reset
        z CLUSTER RESETsSOFTsHARDrÅrÆ)r^rðrps   rbÚ cluster_resetz'ClusterManagementCommands.cluster_resets9€ð×#Ñ#Ø ©˜WÈ ð$ó
ð    
Ø29È ð$ó
ð    
rdcó(—|jd|¬«S)zŽ
        Forces the node to save cluster state on disk
 
        For more information see https://redis.io/commands/cluster-saveconfig
        zCLUSTER SAVECONFIGrÅrÆräs  rbÚcluster_save_configz-ClusterManagementCommands.cluster_save_config&s€ð×#Ñ#Ð$8À|Ð#ÓTÐTrdraÚnum_keyscó(—|jd||«S)zœ
        Returns the number of keys in the specified cluster slot
 
        For more information see https://redis.io/commands/cluster-getkeysinslot
        zCLUSTER GETKEYSINSLOTrÆ)r^rarõs   rbÚcluster_get_keys_in_slotz2ClusterManagementCommands.cluster_get_keys_in_slot0s€ð ×#Ñ#Ð$;¸TÀ8ÓLÐLrdÚepochcó*—|jd||¬«S)z
        Set the configuration epoch in a new node
 
        For more information see https://redis.io/commands/cluster-set-config-epoch
        zCLUSTER SET-CONFIG-EPOCHrÅrÆ)r^rørps   rbÚcluster_set_config_epochz2ClusterManagementCommands.cluster_set_config_epoch8s#€ð×#Ñ#Ø &¨¸Lð$ó
ð    
rdÚstatecóª—|j«dvr|jd||||¬«S|j«dk(r td«‚td|›«‚)zÖ
        Bind an hash slot to a specific node
 
        :target_node: 'ClusterNode'
            The node to execute the command on
 
        For more information see https://redis.io/commands/cluster-setslot
        )Ú    IMPORTINGÚNODEÚ    MIGRATINGúCLUSTER SETSLOTrÅÚSTABLEz4For "stable" state please use cluster_setslot_stablezInvalid slot state: )rártr)r^rÃrÓrÏrûs     rbÚcluster_setslotz)ClusterManagementCommands.cluster_setslotDse€ð ;‰;‹=Ð>Ñ >Ø×'Ñ'Ø! 7¨E°7Èð(óð ð[‰[‹]˜hÒ &ÜÐSÓTÐ TäÐ3°E°7Ð;Ó<Ð <rdcó(—|jd|d«S)zÝ
        Clears migrating / importing state from the slot.
        It determines by it self what node the slot is in and sends it there.
 
        For more information see https://redis.io/commands/cluster-setslot
        rrrÆrÑs  rbÚcluster_setslot_stablez0ClusterManagementCommands.cluster_setslot_stableXs€ð×#Ñ#Ð$5°wÀÓIÐIrdcó*—|jd||¬«S)z»
        Provides a list of replica nodes replicating from the specified primary
        target node.
 
        For more information see https://redis.io/commands/cluster-replicas
        zCLUSTER REPLICASrÅrÆ)r^rÓrps   rbÚcluster_replicasz*ClusterManagementCommands.cluster_replicasas#€ð×#Ñ#Ø  °lð$ó
ð    
rdcó(—|jd|¬«S)z†
        Get array of Cluster slot to node mappings
 
        For more information see https://redis.io/commands/cluster-slots
        z CLUSTER SLOTSrÅrÆräs  rbÚ cluster_slotsz'ClusterManagementCommands.cluster_slotsns€ð ×#Ñ# OÀ,Ð#ÓOÐOrdcó(—|jd|¬«S)z
        Returns details about the shards of the cluster.
 
        For more information see https://redis.io/commands/cluster-shards
        zCLUSTER SHARDSrÅrÆräs  rbÚcluster_shardsz(ClusterManagementCommands.cluster_shardsvs€ð ×#Ñ#Ð$4À<Ð#ÓPÐPrdcó(—|jd|¬«S)z‚
        Returns the shard ID of the node.
 
        For more information see https://redis.io/commands/cluster-myshardid/
        zCLUSTER MYSHARDIDrÅrÆräs  rbÚcluster_myshardidz+ClusterManagementCommands.cluster_myshardid~s€ð ×#Ñ#Ð$7ÀlÐ#ÓSÐSrdcó(—|jd|¬«S)a†
        Each node in a Redis Cluster maintains a pair of long-lived TCP link with each
        peer in the cluster: One for sending outbound messages towards the peer and one
        for receiving inbound messages from the peer.
 
        This command outputs information of all such peer links as an array.
 
        For more information see https://redis.io/commands/cluster-links
        z CLUSTER LINKSrÅrÆrÇs  rbÚ cluster_linksz'ClusterManagementCommands.cluster_links†s€ð×#Ñ# OÀ+Ð#ÓNÐNrdcó—td«‚)NzBCLUSTER FLUSHSLOTS is intentionally not implemented in the client.©ÚNotImplementedErrorräs  rbÚcluster_flushslotsz,ClusterManagementCommands.cluster_flushslots’s€Ü!Ø Pó
ð    
rdcó—td«‚)NzACLUSTER BUMPEPOCH is intentionally not implemented in the client.rräs  rbÚcluster_bumpepochz+ClusterManagementCommands.cluster_bumpepoch—s€Ü!Ø Oó
ð    
rdcóJ—|dk(s|dk(rd|_|jd|¬«S)zÓ
        Enables read queries.
        The command will be sent to the default cluster node if target_nodes is
        not specified.
 
        For more information see https://redis.io/commands/readonly
        ÚreplicasÚallTÚREADONLYrÅ©rqrträs  rbÚreadonlyz"ClusterManagementCommands.readonlyœs3€ð ˜:Ò %¨¸Ò)>ð'+ˆDÔ #Ø×#Ñ# J¸\Ð#ÓJÐJrdcó6—d|_|jd|¬«S)zÕ
        Disables read queries.
        The command will be sent to the default cluster node if target_nodes is
        not specified.
 
        For more information see https://redis.io/commands/readwrite
        FÚ    READWRITErÅrräs  rbÚ    readwritez#ClusterManagementCommands.readwriteªs"€ð#(ˆÔØ×#Ñ# K¸lÐ#ÓKÐKrdr~)TN)+r§r¨r©rªr r¾rÀrÂrrÈrrÌrÎr«rÒr¬rÕr    r­rÙrÜr rârårçrërírïròrôr÷rúrrrrr
r rrrrrr®rdrbr¸r¸Vs4„ñðP¨(óPðR¨HóRðO¨óOð    N¨ð    N¸9ó    Nð 
Ø)ð 
Ø3=ð 
à    ó 
ð
Ø)ð
Ø3=ð
à    ó
ð$H¨sðH°yóHðN°CðN¸IóNð    R zð    R°d¸4±jó    Rð    E¨Jð    E¸9ó    EðDHñVØ)ðVØ3;¸C±=ðVà    óVñ0O¨°.Ñ)AðOÈYóOð< 3ð<¨9ó<ðNRñ 
Øð 
Ø"ð 
Ø2:¸>Ñ2Jð 
à    ó 
ð5˜yó5ð
 
Ø*ð
 
Ø58ð
 
à    ó
 
ðKOñ 
Øð 
Ø/7¸Ñ/Gð 
à    ó 
ð 8<ñUØ$ ^Ñ4ðUà    óUðM¨SðM¸CðMÀIóMðDHñ
 
Øð
 
Ø(0°Ñ(@ð
 
à    ó
 
ð=Ø)ð=Ø47ð=ØBEð=ØNQð=à    ó=ð(J¨cðJ°ióJðFJñ 
Øð 
Ø*2°>Ñ*Bð 
à    ó 
ñP¨(°>Ñ*BðPÈióPóQóTð
O¨ð
O¸Ió
Oñ
¨x¸Ñ/Gð
ÐSWó
ñ
 
¨h°~Ñ.Fð
ÐRVó
ñ
K X¨nÑ%=ð KÈó Kñ
L h¨~Ñ&>ð
LÈ)ô
Lrdr¸có&—eZdZdZdedeefd„Zy)ÚAsyncClusterManagementCommandsr¹rÉrXc‡óV‡K—tjˆfd„|D«Žƒd{–—†S7Œ­w)r×c3óh•K—|])}tj‰jd|««–—Œ+y­w)rØN)ÚasyncioÚ create_taskrt)Ú.0rar^s  €rbú    <genexpr>zBAsyncClusterManagementCommands.cluster_delslots.<locals>.<genexpr>Ës2øèø€òàô×#Ñ# D×$8Ñ$8Ð9KÈTÓ$R×Sñùsƒ/2N)r"ÚgatherrÛs` rbrÙz/AsyncClusterManagementCommands.cluster_delslotsÁs1øèø€ô—^‘^óà!ôð
÷
ð    
ð
ús ƒ)¢'£)N)r§r¨r©rªrr    r­rÙr®rdrbrr·s„ñð
¨Zð
¸DÀ¹Jô
rdrc󨇗eZdZdZ                    ddeddededeededfd    ed
ed ee    d ed e
fˆfd„ Z             ddee dee    dee d efd„ZˆxZS)ÚClusterDataAccessCommandsú¸
    A class for Redis Cluster Data Access Commands
 
    The class inherits from Redis's core DataAccessCommand class and do the
    required adjustments to work with cluster mode
    ÚstringsÚalgoÚLCSÚvalue1Úvalue2Úspecific_argumentrWÚlenÚidxÚ minmatchlenÚ withmatchlenrXc    
óŽ•—|    jdd«}
|dk(r|
€d}
|    jd|
i«t‰ | ||||||||fi|    ¤ŽS)a§
        Implements complex algorithms that operate on strings.
        Right now the only algorithm implemented is the LCS algorithm
        (longest common substring). However new algorithms could be
        implemented in the future.
 
        ``algo`` Right now must be LCS
        ``value1`` and ``value2`` Can be two strings or two keys
        ``specific_argument`` Specifying if the arguments to the algorithm
        will be keys or strings. strings is the default.
        ``len`` Returns just the len of the match.
        ``idx`` Returns the match positions in each string.
        ``minmatchlen`` Restrict the list of matches to the ones of a given
        minimal length. Can be provided only when ``idx`` set to True.
        ``withmatchlen`` Returns the matches with the len of the match.
        Can be provided only when ``idx`` set to True.
 
        For more information see https://redis.io/commands/stralgo
        rpNr*z default-node)ÚpopÚupdateÚsuperÚstralgo) r^r+r-r.r/r0r1r2r3r½rpÚ    __class__s            €rbr8z!ClusterDataAccessCommands.stralgoÚskø€ð>—z‘z .°$Ó7ˆ Ø      Ò )¨lÐ.BØ)ˆL؏ ‰ ~ |Ð4Ô5܉w‰Ø Ø Ø Ø Ø Ø Ø Ø ñ
 
ðñ
 
ð
    
rdÚmatchÚcountÚ_typec
+óBK—|jd|||dœ|¤Ž\}}|Ed{–—†|j«Dcic]\}}|dk7sŒ ||“Œ}}}|r¸|j«Dcic]}||j|¬«“Œ}    }|j    dd«|ru|j«D]5\}}|jd|||||    |dœ|¤Ž\}
}|Ed{–—†|
|||<Œ7|j«Dcic]\}}|dk7sŒ ||“Œ}}}|rŒtyyy7Œècc}}wcc}w7ŒJcc}}w­w©N)r:r;r<r)Ú    node_namerp)Úcursorr:r;r<rpr®©ÚscanrgrWÚget_noder5) r^r:r;r<r½ÚcursorsÚdataÚnamer@ÚnodesÚcurs            rbÚ    scan_iterz#ClusterDataAccessCommands.scan_iter    sNèø€ð"˜Ÿ    ™    ÐR¨°UÀ%ÑRÈ6ÑR‰ ˆØˆà4;·M±M³O×S¡L D¨&ÀvÐQRÃ{4˜‘<ÐSˆÑSÙ àELÇ\Á\Ã^ÖT¸TT˜4Ÿ=™=°4˜=Ó8Ñ8ÐTˆEÐTð J‰J~ tÔ ,ÙØ$+§M¡M£Oò
.‘LD˜&Ø ) §    ¡    ð!Ø%Ø#Ø#Ø#Ø%*¨4¡[ñ !ð !ñ !‘IC˜ð $—OOØ$'¨¡IG˜D’Mð
.ð6=·]±]³_÷Ù%1 T¨6ÈÐRSË D˜&‘Lðñôð ð    úãSùòUð$úóùs]‚D¡D
¢D¹ D ÁD Á DÁ#DÁ=ADÃ DÃ !DÃ. DÃ<DÄDÄDÄ DÄD)r*FFNF©NNN)r§r¨r©rªr
rrr­r r«rr8rr¬rrIÚ __classcell__)r9s@rbr(r(Òs×ø„ñðIRØØØ%)Ø"ñ-
àe‰nð-
ðð-
ðð    -
ð
! ¨Ñ!3°W¸V±_Ð!DÑEð -
ð ð -
ðð-
ð˜c‘]ð-
ðð-
ð
õ-
ðb%)Ø#Ø#ñ    !à˜Ñ!ð!ð˜‰}ð!ð˜‰}ð    !ð
÷ !rdr(c    óB—eZdZdZ            ddeedeedeedefd„Z    y)    ÚAsyncClusterDataAccessCommandsr)Nr:r;r<rXc
ólK—|jd|||dœ|¤Žƒd{–—†\}}|D]}|­–—Œ    |j«D    cic]\}}    |    dk7sŒ ||    “Œ}}}    |rÂ|j«Dcic]}||j|¬«“Œ}
}|j    dd«|r|j«D]?\}}    |jd|    ||||
|dœ|¤Žƒd{–—†\} }|D]}|­–—Œ    | |||<ŒA|j«D    cic]\}}    |    dk7sŒ ||    “Œ}}}    |rŒ~yyy7Œcc}    }wcc}w7ŒZcc}    }w­wr>rA) r^r:r;r<r½rDrEÚvaluerFr@rGrHs             rbrIz(AsyncClusterDataAccessCommands.scan_iter7swèø€ð(˜dŸi™iÐX¨e¸5ÈÑXÐQWÑX×X‰ ˆØò    ˆEØŒKð    ð5<·M±M³O×S¡L D¨&ÀvÐQRÃ{4˜‘<ÐSˆÑSÙ àELÇ\Á\Ã^ÖT¸TT˜4Ÿ=™=°4˜=Ó8Ñ8ÐTˆEÐTð J‰J~ tÔ ,ÙØ$+§M¡M£Oò .‘LD˜&Ø&/ d§i¡ið'Ø%Ø#Ø#Ø#Ø%*¨4¡[ñ 'ð !ñ '÷!‘IC˜ð"&ò$˜Ø#œ ð$à$'¨¡IG˜D’Mð .ð6=·]±]³_÷Ù%1 T¨6ÈÐRSË D˜&‘Lðñôð ð YûóTùòUð !úóùs^‚D4œD&D4Á D!ÁD!ÁD4Á-D'ÂA
D4ÃD,Ã0D4Ä D.ÄD.ÄD4ÄD4Ä! D4Ä.D4rJ)
r§r¨r©rªr rr«r¬rrIr®rdrbrMrM-sJ„ñð%)Ø#Ø#ñ    #à˜Ñ!ð#ð˜‰}ð#ð˜‰}ð    #ð
ô #rdrMcó—eZdZdZy)ÚRedisClusterCommandsá“
    A class for all Redis Cluster commands
 
    For key-based commands, the target node(s) will be internally determined
    by the keys' hash slot.
    Non-key-based commands can be executed with the 'target_nodes' argument to
    target specific nodes. By default, if target_nodes is not specified, the
    command will be executed on the default cluster node.
 
    :param :target_nodes: type can be one of the followings:
        - nodes flag: ALL_NODES, PRIMARIES, REPLICAS, RANDOM
        - 'ClusterNode'
        - 'list(ClusterNodes)'
        - 'dict(any:clusterNodes)'
 
    for example:
        r.cluster_info(target_nodes=RedisCluster.ALL_NODES)
    N©r§r¨r©rªr®rdrbrQrQ]s„òrdrQcó—eZdZdZy)ÚAsyncRedisClusterCommandsrRNrSr®rdrbrUrU|s„òrdrU):r"Útypingrrrrrrr    r
r r r rÚ    redis.crcrÚredis.exceptionsrrÚ redis.typingrrrrrrrÚcorerrrrrrr r!r"r#r$r%r&Úhelpersr'Ú redismodulesr(r)Úredis.asyncio.clusterr*Ú    frozensetrrrUr°r¸rr(rMrQrUr®rdrbú<module>r_sðÛ÷ ÷ ÷ ó õß>÷÷ñ÷÷÷õõ"ßGáÝ2ñò*ó,€ ô^aAÐ5ôaAôHL$Ð#:ôL$ô^^LР2ô^LôB 
ØÐ6ô
ô6XР2ôXôv-ØÐ6ô-ô`ØØØØØØØØØôô>Ø Ø"ØØ"ØØØØõrd