@@ -5094,6 +5094,374 @@ def hstrlen(self, name: str, key: str) -> Union[Awaitable[int], int]:
5094
5094
"""
5095
5095
return self .execute_command ("HSTRLEN" , name , key , keys = [name ])
5096
5096
5097
+ def hexpire (
5098
+ self ,
5099
+ name : KeyT ,
5100
+ seconds : ExpiryT ,
5101
+ * fields : str ,
5102
+ nx : bool = False ,
5103
+ xx : bool = False ,
5104
+ gt : bool = False ,
5105
+ lt : bool = False ,
5106
+ ) -> ResponseT :
5107
+ """
5108
+ Sets or updates the expiration time for fields within a hash key, using relative
5109
+ time in seconds.
5110
+
5111
+ If a field already has an expiration time, the behavior of the update can be
5112
+ controlled using the `nx`, `xx`, `gt`, and `lt` parameters.
5113
+
5114
+ The return value provides detailed information about the outcome for each field.
5115
+
5116
+ For more information, see https://redis.io/commands/hexpire
5117
+
5118
+ Args:
5119
+ name: The name of the hash key.
5120
+ seconds: Expiration time in seconds, relative. Can be an integer, or a
5121
+ Python `timedelta` object.
5122
+ fields: List of fields within the hash to apply the expiration time to.
5123
+ nx: Set expiry only when the field has no expiry.
5124
+ xx: Set expiry only when the field has an existing expiry.
5125
+ gt: Set expiry only when the new expiry is greater than the current one.
5126
+ lt: Set expiry only when the new expiry is less than the current one.
5127
+
5128
+ Returns:
5129
+ If the key does not exist, returns an empty list. If the key exists, returns
5130
+ a list which contains for each field in the request:
5131
+ - `-2` if the field does not exist.
5132
+ - `0` if the specified NX | XX | GT | LT condition was not met.
5133
+ - `1` if the expiration time was set or updated.
5134
+ - `2` if the field was deleted because the specified expiration time is
5135
+ in the past.
5136
+ """
5137
+ conditions = [nx , xx , gt , lt ]
5138
+ if sum (conditions ) > 1 :
5139
+ raise ValueError ("Only one of 'nx', 'xx', 'gt', 'lt' can be specified." )
5140
+
5141
+ if isinstance (seconds , datetime .timedelta ):
5142
+ seconds = int (seconds .total_seconds ())
5143
+
5144
+ options = []
5145
+ if nx :
5146
+ options .append ("NX" )
5147
+ if xx :
5148
+ options .append ("XX" )
5149
+ if gt :
5150
+ options .append ("GT" )
5151
+ if lt :
5152
+ options .append ("LT" )
5153
+
5154
+ return self .execute_command (
5155
+ "HEXPIRE" , name , seconds , * options , "FIELDS" , len (fields ), * fields
5156
+ )
5157
+
5158
+ def hpexpire (
5159
+ self ,
5160
+ name : KeyT ,
5161
+ milliseconds : ExpiryT ,
5162
+ * fields : str ,
5163
+ nx : bool = False ,
5164
+ xx : bool = False ,
5165
+ gt : bool = False ,
5166
+ lt : bool = False ,
5167
+ ) -> ResponseT :
5168
+ """
5169
+ Sets or updates the expiration time for fields within a hash key, using relative
5170
+ time in milliseconds.
5171
+
5172
+ If a field already has an expiration time, the behavior of the update can be
5173
+ controlled using the `nx`, `xx`, `gt`, and `lt` parameters.
5174
+
5175
+ The return value provides detailed information about the outcome for each field.
5176
+
5177
+ For more information, see https://redis.io/commands/hpexpire
5178
+
5179
+ Args:
5180
+ name: The name of the hash key.
5181
+ milliseconds: Expiration time in milliseconds, relative. Can be an integer,
5182
+ or a Python `timedelta` object.
5183
+ fields: List of fields within the hash to apply the expiration time to.
5184
+ nx: Set expiry only when the field has no expiry.
5185
+ xx: Set expiry only when the field has an existing expiry.
5186
+ gt: Set expiry only when the new expiry is greater than the current one.
5187
+ lt: Set expiry only when the new expiry is less than the current one.
5188
+
5189
+ Returns:
5190
+ If the key does not exist, returns an empty list. If the key exists, returns
5191
+ a list which contains for each field in the request:
5192
+ - `-2` if the field does not exist.
5193
+ - `0` if the specified NX | XX | GT | LT condition was not met.
5194
+ - `1` if the expiration time was set or updated.
5195
+ - `2` if the field was deleted because the specified expiration time is
5196
+ in the past.
5197
+ """
5198
+ conditions = [nx , xx , gt , lt ]
5199
+ if sum (conditions ) > 1 :
5200
+ raise ValueError ("Only one of 'nx', 'xx', 'gt', 'lt' can be specified." )
5201
+
5202
+ if isinstance (milliseconds , datetime .timedelta ):
5203
+ milliseconds = int (milliseconds .total_seconds () * 1000 )
5204
+
5205
+ options = []
5206
+ if nx :
5207
+ options .append ("NX" )
5208
+ if xx :
5209
+ options .append ("XX" )
5210
+ if gt :
5211
+ options .append ("GT" )
5212
+ if lt :
5213
+ options .append ("LT" )
5214
+
5215
+ return self .execute_command (
5216
+ "HPEXPIRE" , name , milliseconds , * options , "FIELDS" , len (fields ), * fields
5217
+ )
5218
+
5219
+ def hexpireat (
5220
+ self ,
5221
+ name : KeyT ,
5222
+ unix_time_seconds : AbsExpiryT ,
5223
+ * fields : str ,
5224
+ nx : bool = False ,
5225
+ xx : bool = False ,
5226
+ gt : bool = False ,
5227
+ lt : bool = False ,
5228
+ ) -> ResponseT :
5229
+ """
5230
+ Sets or updates the expiration time for fields within a hash key, using an
5231
+ absolute Unix timestamp in seconds.
5232
+
5233
+ If a field already has an expiration time, the behavior of the update can be
5234
+ controlled using the `nx`, `xx`, `gt`, and `lt` parameters.
5235
+
5236
+ The return value provides detailed information about the outcome for each field.
5237
+
5238
+ For more information, see https://redis.io/commands/hexpireat
5239
+
5240
+ Args:
5241
+ name: The name of the hash key.
5242
+ unix_time_seconds: Expiration time as Unix timestamp in seconds. Can be an
5243
+ integer or a Python `datetime` object.
5244
+ fields: List of fields within the hash to apply the expiration time to.
5245
+ nx: Set expiry only when the field has no expiry.
5246
+ xx: Set expiry only when the field has an existing expiration time.
5247
+ gt: Set expiry only when the new expiry is greater than the current one.
5248
+ lt: Set expiry only when the new expiry is less than the current one.
5249
+
5250
+ Returns:
5251
+ If the key does not exist, returns an empty list. If the key exists, returns
5252
+ a list which contains for each field in the request:
5253
+ - `-2` if the field does not exist.
5254
+ - `0` if the specified NX | XX | GT | LT condition was not met.
5255
+ - `1` if the expiration time was set or updated.
5256
+ - `2` if the field was deleted because the specified expiration time is
5257
+ in the past.
5258
+ """
5259
+ conditions = [nx , xx , gt , lt ]
5260
+ if sum (conditions ) > 1 :
5261
+ raise ValueError ("Only one of 'nx', 'xx', 'gt', 'lt' can be specified." )
5262
+
5263
+ if isinstance (unix_time_seconds , datetime .datetime ):
5264
+ unix_time_seconds = int (unix_time_seconds .timestamp ())
5265
+
5266
+ options = []
5267
+ if nx :
5268
+ options .append ("NX" )
5269
+ if xx :
5270
+ options .append ("XX" )
5271
+ if gt :
5272
+ options .append ("GT" )
5273
+ if lt :
5274
+ options .append ("LT" )
5275
+
5276
+ return self .execute_command (
5277
+ "HEXPIREAT" ,
5278
+ name ,
5279
+ unix_time_seconds ,
5280
+ * options ,
5281
+ "FIELDS" ,
5282
+ len (fields ),
5283
+ * fields ,
5284
+ )
5285
+
5286
+ def hpexpireat (
5287
+ self ,
5288
+ name : KeyT ,
5289
+ unix_time_milliseconds : AbsExpiryT ,
5290
+ * fields : str ,
5291
+ nx : bool = False ,
5292
+ xx : bool = False ,
5293
+ gt : bool = False ,
5294
+ lt : bool = False ,
5295
+ ) -> ResponseT :
5296
+ """
5297
+ Sets or updates the expiration time for fields within a hash key, using an
5298
+ absolute Unix timestamp in milliseconds.
5299
+
5300
+ If a field already has an expiration time, the behavior of the update can be
5301
+ controlled using the `nx`, `xx`, `gt`, and `lt` parameters.
5302
+
5303
+ The return value provides detailed information about the outcome for each field.
5304
+
5305
+ For more information, see https://redis.io/commands/hpexpireat
5306
+
5307
+ Args:
5308
+ name: The name of the hash key.
5309
+ unix_time_milliseconds: Expiration time as Unix timestamp in milliseconds.
5310
+ Can be an integer or a Python `datetime` object.
5311
+ fields: List of fields within the hash to apply the expiry.
5312
+ nx: Set expiry only when the field has no expiry.
5313
+ xx: Set expiry only when the field has an existing expiry.
5314
+ gt: Set expiry only when the new expiry is greater than the current one.
5315
+ lt: Set expiry only when the new expiry is less than the current one.
5316
+
5317
+ Returns:
5318
+ If the key does not exist, returns an empty list. If the key exists, returns
5319
+ a list which contains for each field in the request:
5320
+ - `-2` if the field does not exist.
5321
+ - `0` if the specified NX | XX | GT | LT condition was not met.
5322
+ - `1` if the expiration time was set or updated.
5323
+ - `2` if the field was deleted because the specified expiration time is
5324
+ in the past.
5325
+ """
5326
+ conditions = [nx , xx , gt , lt ]
5327
+ if sum (conditions ) > 1 :
5328
+ raise ValueError ("Only one of 'nx', 'xx', 'gt', 'lt' can be specified." )
5329
+
5330
+ if isinstance (unix_time_milliseconds , datetime .datetime ):
5331
+ unix_time_milliseconds = int (unix_time_milliseconds .timestamp () * 1000 )
5332
+
5333
+ options = []
5334
+ if nx :
5335
+ options .append ("NX" )
5336
+ if xx :
5337
+ options .append ("XX" )
5338
+ if gt :
5339
+ options .append ("GT" )
5340
+ if lt :
5341
+ options .append ("LT" )
5342
+
5343
+ return self .execute_command (
5344
+ "HPEXPIREAT" ,
5345
+ name ,
5346
+ unix_time_milliseconds ,
5347
+ * options ,
5348
+ "FIELDS" ,
5349
+ len (fields ),
5350
+ * fields ,
5351
+ )
5352
+
5353
+ def hpersist (self , name : KeyT , * fields : str ) -> ResponseT :
5354
+ """
5355
+ Removes the expiration time for each specified field in a hash.
5356
+
5357
+ For more information, see https://redis.io/commands/hpersist
5358
+
5359
+ Args:
5360
+ name: The name of the hash key.
5361
+ fields: A list of fields within the hash from which to remove the
5362
+ expiration time.
5363
+
5364
+ Returns:
5365
+ If the key does not exist, returns an empty list. If the key exists, returns
5366
+ a list which contains for each field in the request:
5367
+ - `-2` if the field does not exist.
5368
+ - `-1` if the field exists but has no associated expiration time.
5369
+ - `1` if the expiration time was successfully removed from the field.
5370
+ """
5371
+ return self .execute_command ("HPERSIST" , name , "FIELDS" , len (fields ), * fields )
5372
+
5373
+ def hexpiretime (self , key : KeyT , * fields : str ) -> ResponseT :
5374
+ """
5375
+ Returns the expiration times of hash fields as Unix timestamps in seconds.
5376
+
5377
+ For more information, see https://redis.io/commands/hexpiretime
5378
+
5379
+ Args:
5380
+ key: The hash key.
5381
+ fields: A list of fields within the hash for which to get the expiration
5382
+ time.
5383
+
5384
+ Returns:
5385
+ If the key does not exist, returns an empty list. If the key exists, returns
5386
+ a list which contains for each field in the request:
5387
+ - `-2` if the field does not exist.
5388
+ - `-1` if the field exists but has no associated expire time.
5389
+ - A positive integer representing the expiration Unix timestamp in
5390
+ seconds, if the field has an associated expiration time.
5391
+ """
5392
+ return self .execute_command (
5393
+ "HEXPIRETIME" , key , "FIELDS" , len (fields ), * fields , keys = [key ]
5394
+ )
5395
+
5396
+ def hpexpiretime (self , key : KeyT , * fields : str ) -> ResponseT :
5397
+ """
5398
+ Returns the expiration times of hash fields as Unix timestamps in milliseconds.
5399
+
5400
+ For more information, see https://redis.io/commands/hpexpiretime
5401
+
5402
+ Args:
5403
+ key: The hash key.
5404
+ fields: A list of fields within the hash for which to get the expiration
5405
+ time.
5406
+
5407
+ Returns:
5408
+ If the key does not exist, returns an empty list. If the key exists, returns
5409
+ a list which contains for each field in the request:
5410
+ - `-2` if the field does not exist.
5411
+ - `-1` if the field exists but has no associated expire time.
5412
+ - A positive integer representing the expiration Unix timestamp in
5413
+ milliseconds, if the field has an associated expiration time.
5414
+ """
5415
+ return self .execute_command (
5416
+ "HPEXPIRETIME" , key , "FIELDS" , len (fields ), * fields , keys = [key ]
5417
+ )
5418
+
5419
+ def httl (self , key : KeyT , * fields : str ) -> ResponseT :
5420
+ """
5421
+ Returns the TTL (Time To Live) in seconds for each specified field within a hash
5422
+ key.
5423
+
5424
+ For more information, see https://redis.io/commands/httl
5425
+
5426
+ Args:
5427
+ key: The hash key.
5428
+ fields: A list of fields within the hash for which to get the TTL.
5429
+
5430
+ Returns:
5431
+ If the key does not exist, returns an empty list. If the key exists, returns
5432
+ a list which contains for each field in the request:
5433
+ - `-2` if the field does not exist.
5434
+ - `-1` if the field exists but has no associated expire time.
5435
+ - A positive integer representing the TTL in seconds if the field has
5436
+ an associated expiration time.
5437
+ """
5438
+ return self .execute_command (
5439
+ "HTTL" , key , "FIELDS" , len (fields ), * fields , keys = [key ]
5440
+ )
5441
+
5442
+ def hpttl (self , key : KeyT , * fields : str ) -> ResponseT :
5443
+ """
5444
+ Returns the TTL (Time To Live) in milliseconds for each specified field within a
5445
+ hash key.
5446
+
5447
+ For more information, see https://redis.io/commands/hpttl
5448
+
5449
+ Args:
5450
+ key: The hash key.
5451
+ fields: A list of fields within the hash for which to get the TTL.
5452
+
5453
+ Returns:
5454
+ If the key does not exist, returns an empty list. If the key exists, returns
5455
+ a list which contains for each field in the request:
5456
+ - `-2` if the field does not exist.
5457
+ - `-1` if the field exists but has no associated expire time.
5458
+ - A positive integer representing the TTL in milliseconds if the field
5459
+ has an associated expiration time.
5460
+ """
5461
+ return self .execute_command (
5462
+ "HPTTL" , key , "FIELDS" , len (fields ), * fields , keys = [key ]
5463
+ )
5464
+
5097
5465
5098
5466
AsyncHashCommands = HashCommands
5099
5467
0 commit comments