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