Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
03cd525f
Unverified
Commit
03cd525f
authored
May 03, 2024
by
debing.sun
Committed by
GitHub
May 03, 2024
Browse files
Fix reply schema for hfe related commands (#13238)
parent
c33c91db
Changes
10
Hide whitespace changes
Inline
Side-by-side
src/commands/hexpire.json
View file @
03cd525f
...
...
@@ -46,24 +46,26 @@
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
}
}
]
},
...
...
src/commands/hexpireat.json
View file @
03cd525f
...
...
@@ -46,24 +46,26 @@
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
}
}
]
},
...
...
src/commands/hexpiretime.json
View file @
03cd525f
{
"HEXPIRETIME"
:
{
"summary"
:
"Returns the expiration time of a hash field as a Unix timestamp, in seconds."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hexpiretimeCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
"summary"
:
"Returns the expiration time of a hash field as a Unix timestamp, in seconds."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hexpiretimeCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"Array of results"
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"Expiration Unix timestamp in seconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"Array of results"
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"Expiration Unix timestamp in seconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
]
}
}
]
}
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
}
}
src/commands/hpersist.json
View file @
03cd525f
{
"HPERSIST"
:
{
"summary"
:
"Removes the expiration time for each specified field"
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hpersistCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
"summary"
:
"Removes the expiration time for each specified field"
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hpersistCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"Array of results"
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"Expiration time was removed"
,
"const"
:
1
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"Array of results"
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"Expiration time was removed"
,
"const"
:
1
}
]
}
}
]
}
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
}
}
src/commands/hpexpire.json
View file @
03cd525f
...
...
@@ -46,24 +46,26 @@
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
}
}
]
},
...
...
src/commands/hpexpireat.json
View file @
03cd525f
...
...
@@ -46,24 +46,26 @@
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"Specified NX | XX | GT | LT condition not met"
,
"const"
:
0
},
{
"description"
:
"Expiration time was set or updated."
,
"const"
:
1
},
{
"description"
:
"Field deleted because the specified expiration time is in the past."
,
"const"
:
2
}
]
}
}
]
},
...
...
src/commands/hpexpiretime.json
View file @
03cd525f
{
"HPEXPIRETIME"
:
{
"summary"
:
"Returns the expiration time of a hash field as a Unix timestamp, in msec."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hpexpiretimeCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
"summary"
:
"Returns the expiration time of a hash field as a Unix timestamp, in msec."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hpexpiretimeCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"The keyname, popped member, and its score."
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"Expiration Unix timestamp in milliseconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"The keyname, popped member, and its score."
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"Expiration Unix timestamp in milliseconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
]
}
}
]
}
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
}
}
src/commands/hpttl.json
View file @
03cd525f
{
"HPTTL"
:
{
"summary"
:
"Returns the TTL in milliseconds of a hash field."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hpttlCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
"summary"
:
"Returns the TTL in milliseconds of a hash field."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"hpttlCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"The keyname, popped member, and its score."
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"TTL in milliseconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"The keyname, popped member, and its score."
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"TTL in milliseconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
]
}
}
]
}
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
}
}
src/commands/httl.json
View file @
03cd525f
{
"HTTL"
:
{
"summary"
:
"Returns the TTL in seconds of a hash field."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"httlCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
"summary"
:
"Returns the TTL in seconds of a hash field."
,
"complexity"
:
"O(N) where N is the number of arguments to the command"
,
"group"
:
"hash"
,
"since"
:
"8.0.0"
,
"arity"
:
-4
,
"function"
:
"httlCommand"
,
"history"
:
[],
"command_flags"
:
[
"READONLY"
,
"FAST"
],
"acl_categories"
:
[
"HASH"
],
"key_specs"
:
[
{
"flags"
:
[
"RO"
,
"ACCESS"
],
"begin_search"
:
{
"index"
:
{
"pos"
:
1
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
},
"find_keys"
:
{
"range"
:
{
"lastkey"
:
0
,
"step"
:
1
,
"limit"
:
0
}
}
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"Array of results"
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"TTL in seconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
],
"reply_schema"
:
{
"oneOf"
:
[
{
"description"
:
"Key does not exist."
,
"type"
:
"null"
},
{
"description"
:
"Array of results"
,
"type"
:
"array"
,
"minItems"
:
1
,
"maxItems"
:
4294967295
,
"items"
:
{
"oneOf"
:
[
{
"description"
:
"The field does not exist."
,
"const"
:
-2
},
{
"description"
:
"The field exists but has no associated expire."
,
"const"
:
-1
},
{
"description"
:
"TTL in seconds."
,
"type"
:
"integer"
,
"minimum"
:
1
}
]
}
}
]
}
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
},
"arguments"
:
[
{
"name"
:
"key"
,
"type"
:
"key"
,
"key_spec_index"
:
0
},
{
"name"
:
"numfields"
,
"type"
:
"integer"
},
{
"name"
:
"field"
,
"type"
:
"string"
,
"multiple"
:
true
}
]
}
}
tests/unit/type/hash-field-expire.tcl
View file @
03cd525f
...
...
@@ -88,41 +88,63 @@ start_server {tags {"external:skip needs:debug"}} {
# Currently listpack doesn't support HFE
r config set hash-max-listpack-entries 0
test
{
HPEXPIRE - Test 'NX' flag
}
{
test
{
HPEXPIRE
(
AT
)
- Test 'NX' flag
}
{
r del myhash
r hset myhash field1 value1 field2 value2 field3 value3
assert_equal
[
r hpexpire myhash 1000 NX 1 field1
]
[
list $E_OK
]
assert_equal
[
r hpexpire myhash 1000 NX 2 field1 field2
]
[
list $E_FAIL $E_OK
]
r del myhash
r hset myhash field1 value1 field2 value2 field3 value3
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1000
)
*1000
}]
NX 1 field1
]
[
list $E_OK
]
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1000
)
*1000
}]
NX 2 field1 field2
]
[
list $E_FAIL $E_OK
]
}
test
{
HPEXPIRE - Test 'XX' flag
}
{
test
{
HPEXPIRE
(
AT
)
- Test 'XX' flag
}
{
r del myhash
r hset myhash field1 value1 field2 value2 field3 value3
assert_equal
[
r hpexpire myhash 1000 NX 2 field1 field2
]
[
list $E_OK $E_OK
]
assert_equal
[
r hpexpire myhash 1000 XX 2 field1 field3
]
[
list $E_OK $E_FAIL
]
r del myhash
r hset myhash field1 value1 field2 value2 field3 value3
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1000
)
*1000
}]
NX 2 field1 field2
]
[
list $E_OK $E_OK
]
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1000
)
*1000
}]
XX 2 field1 field3
]
[
list $E_OK $E_FAIL
]
}
test
{
HPEXPIRE - Test 'GT' flag
}
{
test
{
HPEXPIRE
(
AT
)
- Test 'GT' flag
}
{
r del myhash
r hset myhash field1 value1 field2 value2
assert_equal
[
r hpexpire myhash 1000 NX 1 field1
]
[
list $E_OK
]
assert_equal
[
r hpexpire myhash 2000 NX 1 field2
]
[
list $E_OK
]
assert_equal
[
r hpexpire myhash 1500 GT 2 field1 field2
]
[
list $E_OK $E_FAIL
]
r del myhash
r hset myhash field1 value1 field2 value2
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1000
)
*1000
}]
NX 1 field1
]
[
list $E_OK
]
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+2000
)
*1000
}]
NX 1 field2
]
[
list $E_OK
]
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1500
)
*1000
}]
GT 2 field1 field2
]
[
list $E_OK $E_FAIL
]
}
test
{
HPEXPIRE - Test 'LT' flag
}
{
test
{
HPEXPIRE
(
AT
)
- Test 'LT' flag
}
{
r del myhash
r hset myhash field1 value1 field2 value2
assert_equal
[
r hpexpire myhash 1000 NX 1 field1
]
[
list $E_OK
]
assert_equal
[
r hpexpire myhash 2000 NX 1 field2
]
[
list $E_OK
]
assert_equal
[
r hpexpire myhash 1500 LT 2 field1 field2
]
[
list $E_FAIL $E_OK
]
r del myhash
r hset myhash field1 value1 field2 value2
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1000
)
*1000
}]
NX 1 field1
]
[
list $E_OK
]
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+2000
)
*1000
}]
NX 1 field2
]
[
list $E_OK
]
assert_equal
[
r hpexpireat myhash
[
expr
{([
clock seconds
]
+1500
)
*1000
}]
LT 2 field1 field2
]
[
list $E_FAIL $E_OK
]
}
test
{
HPEXPIREAT - field not exists or TTL is in the past
}
{
r del myhash
r hset myhash f1 v1 f2 v2 f4 v4
r hexpire myhash 1000 NX 1 f4
assert_equal
[
r hexpireat myhash
[
expr
{[
clock seconds
]
- 1
}]
NX 4 f1 f2 f3 f4
]
"
$
E_DELETED
$
E_DELETED
$
E_NO_FIELD
$
E_FAIL"
assert_equal
[
r h
p
expireat myhash
[
expr
{
(
[
clock seconds
]
-1
)
*1000
}]
NX 4 f1 f2 f3 f4
]
"
$
E_DELETED
$
E_DELETED
$
E_NO_FIELD
$
E_FAIL"
assert_equal
[
r hexists myhash field1
]
0
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment