-
Notifications
You must be signed in to change notification settings - Fork 42
Hash类型field字段支持过期设计
Daoguang Dong edited this page Jul 27, 2019
·
1 revision
hash对应的每条field记录中加入过期时间,每次获取到field后先判断是否已经过期,如果已经过期则删除该记录并返回空,如果没有过期则返回field对应的value;删除过期field时间时需要将删除操作写入binlog,并传递到slave。
- 每个hash表的meta_key和meta_value的落盘方式:
- hash表中data_key和data_value的落盘方式:
- 每个hash表的meta_key和meta_value的落盘方式不变:
- hash表中data_key和data_value的落盘方式,在原有的data_value前增加过期时间的一个时间戳字段:
在pika中增加一种新的数据类型ehash,支持对ehash中field设置过期时间
命令格式 | EHSET hash field value |
---|---|
命令描述 | 将哈希表 hash 中域 field 的值设置为 value。 如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 EHSET 操作。如果域 field 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖。如果旧值存在过期时间,那么过期时间会被移除。 |
返回值 | 当 EHSET 命令在哈希表中新创建 field 域并成功为它设置值时, 命令返回 1 ; 如果域 field 已经存在于哈希表, 并且 HSET 命令成功使用新值覆盖了它的旧值, 那么命令返回 0 。 |
命令格式 | EHSETNX hash field value |
---|---|
命令描述 | 当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value 。 如果给定域已经存在于哈希表当中, 那么命令将放弃执行设置操作。 如果哈希表 hash 不存在, 那么一个新的哈希表将被创建并执行 EHSETNX 命令。 |
返回值 | EHSETNX 命令在设置成功时返回 1 , 在给定域已经存在而放弃执行设置操作时返回 0 。 |
命令格式 | EHSETEX hash field value seconds |
---|---|
命令描述 | 将哈希表 hash 中域 field 的值设置为 value。并将键 field 的生存时间设置为 seconds 秒钟。 如果给定的哈希表并不存在, 那么一个新的哈希表将被创建并执行 EHSETEX 操作。 如果域 field 已经存在于哈希表中, 那么它的旧值将被新值 value 覆盖。 |
返回值 | 命令在设置成功时返回 OK 。 当 seconds 参数不合法时, 命令将返回一个错误。 |
命令格式 | EHEXPIRE key field seconds |
---|---|
命令描述 | 将哈希表 key中域 field 的生存时间设置为 seconds 秒钟。 可以对一个已经带有生存时间的 field 执行 EHEXPIRE命令,新指定的生存时间会取代旧的生存时间。 |
返回值 | 设置成功返回 1 , 当 key 或field不存时返回 0 。当 seconds 参数不合法时, 命令将返回一个错误。 |
命令格式 | EHEXPIREAT key field timestamp |
---|---|
命令描述 | EHEXPIREAT的作用和 EHEXPIRE类似,都用于为 field 设置生存时间。 不同在于 EHEXPIREAT命令接受的时间参数是 UNIX 时间戳(unix timestamp)。 |
返回值 | 设置成功返回 1 , 当 key 不存时返回 0 。当 timestamp参数不合法时, 命令将返回一个错误。 |
命令格式 | EHTTL key field |
---|---|
命令描述 | 以秒为单位,返回给定的哈希表key中field的剩余生存时间(TTL, time to live) |
返回值 | 当 key或field不存在时,返回 -2 。 当 field存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 field的剩余生存时间。 |
命令格式 | EHPERSIST key field |
---|---|
命令描述 | 移除给定哈希表key中field 的生存时间,将这个 field从"易失的"(带生存时间)转换成"持久的"(不带生存时间、永不过期)。 |
返回值 | 当生存时间移除成功时,返回 1 . 如果 hash或field不存在,或 field 没有设置生存时间,返回 0 。 |
命令格式 | EHGET key field |
---|---|
命令描述 | 返回哈希表key中给定域的值。 |
返回值 | EHGET 命令在默认情况下返回给定域的值。 如果给定域不存在于哈希表中, 又或者给定的哈希表并不存在, 那么命令返回 nil 。 |
命令格式 | EHEXISTS key field |
---|---|
命令描述 | 检查给定域 field 是否存在于哈希表 key当中。 |
返回值 | EHEXISTS命令在给定域存在时返回 1 , 在给定域不存在时返回 0 。 |
命令格式 | EHDEL key field [field…] |
---|---|
命令描述 | 删除哈希表key中的一个或多个指定域,不存在的域将被忽略。 |
返回值 | 被成功移除的域的数量,不包括被忽略的域。 |
命令格式 | EHLEN key [force] |
---|---|
命令描述 | 返回哈希表key中域的数量。如果没有force选项,则返回的len不精准(包含过期field);如果有force选项,则获取精准的len数量,但会比较耗时,因为是遍历整个hash表。 |
返回值 | 哈希表中域的数量。当key不存在时,返回 0 。 |
命令格式 | EHSTRLEN key field |
---|---|
命令描述 | 返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。 |
返回值 | 默认返回field的字符串长度。 如果给定的键或者域不存在, 那么命令返回 0 。 |
命令格式 | EHINCRBY key field increment |
---|---|
命令描述 | 为哈希表 key 中的域 field 的值加上增量 increment 。 增量也可以为负数,相当于对给定域进行减法操作。 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。 如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。 对一个储存字符串值的域 field 执行 EHINCRBY 命令将造成一个错误。 本操作的值被限制在 64 位(bit)有符号数字表示之内。 |
返回值 | 执行 EHINCRBY 命令之后,哈希表 key 中域 field 的值。 |
命令格式 | EHINCRBYFLOAT key field increment |
---|---|
命令描述 | 为哈希表 key 中的域 field 加上浮点数增量 increment 。 如果哈希表中没有域 field ,那么 EHINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。 如果键 key 不存在,那么 EHINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作 |
返回值 | 执行加法操作之后 field 域的值。 |
命令格式 | EHMSET key field value [field value …] |
---|---|
命令描述 | 同时将多个 field-value (域-值)对设置到哈希表key中。 此命令会覆盖哈希表中已存在的域。 如果哈希表不存在,一个空哈希表被创建并执行 EHMSET 操作。该命令会移除原有field的过期时间。 |
返回值 | 如果命令执行成功,返回 OK 。当 key不是哈希表(hash)类型时,返回一个错误。 |
命令格式 | EHMSETEX key field value seconds [field value seconds …] |
---|---|
命令描述 | 同时将多个 field-value-seconds(域-值-生存时间)设置到哈希表key中。 此命令会覆盖哈希表中已存在的域。 如果哈希表不存在,一个空哈希表被创建并执行 EHMSETEX 操作。如果seconds小于等于0,表示没有设置过期时间。 |
返回值 | 如果命令执行成功,返回 OK 。当 key不是哈希表(hash)类型时,返回一个错误。 |
命令格式 | EHMGET key field [field …] |
---|---|
命令描述 | 返回哈希表 key 中,一个或多个给定域的值。 如果给定的域不存在于哈希表,那么返回一个 nil 值。 因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 EHMGET 操作将返回一个只带有 nil 值的表。 |
返回值 | 一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。 |
命令格式 | EHKEYS key |
---|---|
命令描述 | 返回哈希表 key 中的所有域。 |
返回值 | 一个包含哈希表中所有域的表。当 key 不存在时,返回一个空表。 |
命令格式 | EHVALS key |
---|---|
命令描述 | 返回哈希表 key 中所有域的值。 |
返回值 | 一个包含哈希表中所有值的表。当 key 不存在时,返回一个空表。 |
命令格式 | EHGETALL key [WITHTTL] |
---|---|
命令描述 | 当不加可选参数WITHTTL时,返回哈希表 key 中,所有的域和值。 当加可选参数WITHTTL时,返回哈希表 key 中,所有的域,值和生存时间。 |
返回值 | 以列表形式返回哈希表的域和域的值以及生存时间。若 key 不存在,返回空列表。 |
命令格式 | EHSCAN key cursor [MATCH pattern] [COUNT count] |
---|---|
命令描述 | 同SCAN命令 |
返回值 | 以列表形式返回哈希表的域和域的值以及生存时间。若 key 不存在,返回空列表。 |