Redis数据结构和主要命令( 三 )


HGET:返回指定 Hash 中 field 字段的值 , 时间复杂度 O(1)
HMSET/HMGET:同 HSET 和 HGET , 可以批量操作同一个 key 下的多个 field , 时间复杂度:O(N) , N 为一次操作的 field 数量
HSETNX:同 HSET , 但如 field 已经存在 , HSETNX 不会进行任何操作 , 时间复杂度 O(1)
HEXISTS:判断指定 Hash 中 field 是否存在 , 存在返回 1 , 不存在返回 0 , 时间复杂度 O(1)
HDEL:删除指定 Hash 中的 field(1 个或多个) , 时间复杂度:O(N) , N 为操作的 field 数量
HINCRBY:同 INCRBY 命令 , 对指定 Hash 中的一个 field 进行 INCRBY , 时间复杂度 O(1)
应谨慎使用的 Hash 相关命令:
HGETALL:返回指定 Hash 中所有的 field-value 对 。
返回结果为数组 , 数组中 field 和 value 交替出现 。时间复杂度 O(N)
HKEYS/HVALS:返回指定 Hash 中所有的 field/value , 时间复杂度 O(N)
上述三个命令都会对 Hash 进行完整遍历 , Hash 中的 field 数量与命令的耗时线性相关 , 对于尺寸不可预知的 Hash , 应严格避免使用上面三个命令 , 而改为使用 HSCAN 命令进行游标式的遍历 。
常用命令五:Set
Redis Set 是无序的 , 不可重复的 String 集合 。
与 Set 相关的常用命令:
SADD:向指定 Set 中添加 1 个或多个 member , 如果指定 Set 不存在 , 会自动创建一个 。时间复杂度 O(N) , N 为添加的 member 个数
SREM:从指定 Set 中移除 1 个或多个 member , 时间复杂度 O(N) , N 为移除的 member 个数
SRANDMEMBER:从指定 Set 中随机返回 1 个或多个 member , 时间复杂度 O(N) , N 为返回的 member 个数
SPOP:从指定 Set 中随机移除并返回 count 个 member , 时间复杂度 O(N) , N 为移除的 member 个数
SCARD:返回指定 Set 中的 member 个数 , 时间复杂度 O(1)
SISMEMBER:判断指定的 value 是否存在于指定 Set 中 , 时间复杂度 O(1)
SMOVE:将指定 member 从一个 Set 移至另一个 Set
慎用的 Set 相关命令:
SMEMBERS:返回指定 Hash 中所有的 member , 时间复杂度 O(N)
SUNION/SUNIONSTORE:计算多个 Set 的并集并返回 / 存储至另一个 Set中 , 时间复杂度 O(N) , N 为参与计算的所有集合的总 member 数 。
SINTER/SINTERSTORE:计算多个 Set 的交集并返回 / 存储至另一个 Set 中 , 时间复杂度 O(N) , N 为参与计算的所有集合的总 member 数 。
SDIFF/SDIFFSTORE:计算 1 个 Set 与 1 或多个 Set 的差集并返回 / 存储至另一个 Set 中 , 时间复杂度 O(N) , N 为参与计算的所有集合的总 member 数 。
上述几个命令涉及的计算量大 , 应谨慎使用 , 特别是在参与计算的 Set 尺寸不可知的情况下 , 应严格避免使用 。
可以考虑通过 SSCAN 命令遍历获取相关 Set 的全部 member 。
如果需要做并集 / 交集 / 差集计算 , 可以在客户端进行 , 或在不服务实时查询请求的 Slave 上进行 。
常用命令六:Sorted Set
Redis Sorted Set 是有序的、不可重复的 String 集合 。
Sorted Set 中的每个元素都需要指派一个分数 (score) , Sorted Set 会根据 score 对元素进行升序排序 。
如果多个 member 拥有相同的 score , 则以字典序进行升序排序 。
Sorted Set 非常适合用于实现排名 。
Sorted Set 的主要命令:
ZADD:向指定 Sorted Set 中添加 1 个或多个 member , 时间复杂度 O(Mlog(N)) , M 为添加的 member 数量 , N 为 Sorted Set 中的 member 数量
ZREM:从指定 Sorted Set 中删除 1 个或多个 member , 时间复杂度 O(Mlog(N)) , M 为删除的 member 数量 , N 为 Sorted Set 中的 member 数量
ZCOUNT:返回指定 Sorted Set 中指定 score 范围内的 member 数量 , 时间复杂度:O(log(N))
ZCARD:返回指定 Sorted Set 中的 member 数量 , 时间复杂度 O(1)
ZSCORE:返回指定 Sorted Set 中指定 member 的 score , 时间复杂度 O(1)
ZRANK/ZREVRANK:返回指定 member 在 Sorted Set 中的排名 , ZRANK 返回按升序排序的排名 , ZREVRANK 则返回按降序排序的排名 。
时间复杂度 O(log(N))
ZINCRBY:同 INCRBY , 对指定 Sorted Set 中的指定 member 的 score 进行自增 , 时间复杂度 O(log(N))


推荐阅读