Redis命令(上)

Redis客户端命令

redis-cli -h host -p port -a password

Redis键命令

Redis 键命令的基本语法

COMMAND KEY_NAME

基本命令

描述

DEL KEY_NAME

key存在时删除key

DUMP KEY_NAME

序列化给定 key ,并返回被序列化的值

EXISTS KEY_NAME

检查给定 key 是否存在

Expire KEY_NAME TIME_IN_SECONDS

设置 key 的过期时间,单位秒

Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP

以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间

PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS

设置 key 的过期时间亿以毫秒计

PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP

设置 key 过期时间的时间戳(unix timestamp) 以毫秒计

KEYS PATTERN

查找所有符合给定模式 pattern 的 key(模糊查询)

MOVE KEY_NAME DESTINATION_DATABASE

将当前数据库的 key 移动到给定的数据库

PERSIST KEY_NAME

移除给定 key 的过期时间

PTTL KEY_NAME

以毫秒为单位返回 key 的剩余过期时间

TTL KEY_NAME

以秒为单位返回 key 的剩余过期时间

TYPE KEY_NAME

返回 key 所储存的值的类型

RENAMENX OLD_KEY_NAME NEW_KEY_NAME

在新的 key 不存在时修改 key 的名称

RENAME OLD_KEY_NAME NEW_KEY_NAME

修改 key 的名称

RANDOMKEY

从当前数据库中随机返回一个 key

Redis字符串命令

  • string是redis最基本的类型,可以理解成与Memcached一模一样的类型,一个key对应一个value。
  • string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
  • string类型是Redis最基本的数据类型,一个键最大能存储512MB。
COMMAND KEY_NAME

基本命令

描述

SET KEY_NAME VALUE

设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型

GET KEY_NAME

获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误

GETRANGE KEY_NAME start end

获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(左开右开)

GETSET KEY_NAME VALUE

用于设置指定 key 的值,并返回 key 旧的值

GETBIT KEY_NAME OFFSET

对 key 所储存的字符串值,获取指定偏移量上的位(bit)

MGET KEY1 KEY2 … KEYN

返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil

Setbit KEY_NAME OFFSET

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)

SETEX KEY_NAME TIMEOUT VALUE

为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值

SETNX KEY_NAME VALUE

在指定的 key 不存在时,为 key 设置指定的值

SETRANGE KEY_NAME OFFSET VALUE

用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始

STRLEN KEY_NAME

获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误

MSET key1 value1 key2 value2 … keyN valueN

同时设置一个或多个 key-value 对

MSETNX key1 value1 key2 value2 … keyN valueN

用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对

PSETEX key1 EXPIRY_IN_MILLISECONDS value1

以毫秒为单位设置 key 的生存时间

INCR KEY_NAME

将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内

INCRBY KEY_NAME INCR_AMOUNT

将 key 中储存的数字加上指定的增量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内

INCRBYFLOAT KEY_NAME INCR_AMOUNT

为 key 中所储存的值加上指定的浮点数增量值。如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作

DECR KEY_NAME

将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内

DECRBY KEY_NAME DECREMENT_AMOUNT

将 key 所储存的值减去指定的减量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内

APPEND KEY_NAME NEW_VALUE

为指定的 key 追加值。如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样

Redis哈希命令

  • Redis hash 是一个键值对集合。
  • Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 每个 hash 可以存储 2 32 - 1 个键值对。

基本命令

描述

HMSET KEY_NAME VALUE

设置给定 key 的值

HDEL KEY_NAME FIELD1… FIELDN

删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略

HEXISTS KEY_NAME FIELD_NAME

查看哈希表的指定字段是否存在

HGET KEY_NAME FIELD_NAME

返回哈希表中指定字段的值

HGETALL KEY_NAME

用于返回哈希表中,所有的字段和值。在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍

HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER

用于为哈希表中的字段值加上指定增量值,用法类似INCRBY

HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER

用于为哈希表中的字段值加上指定浮点数增量值。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0

HKEYS KEY_NAME FIELD_NAME INCR_BY_NUMBER

获取哈希表中的所有字段名

HLEN KEY_NAME

获取哈希表中字段的数量

HMGET KEY_NAME FIELD1…FIELDN

返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值

HMSET KEY_NAME FIELD1 VALUE1 …FIELDN VALUEN

同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段

HSET KEY_NAME FIELD VALUE

用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖

HSETNX KEY_NAME FIELD VALUE

为哈希表中不存在的的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令

HVALS KEY_NAME FIELD VALUE

返回哈希表所有字段的值

HSCAN key cursor [MATCH pattern] [COUNT count]

迭代哈希表中的键值对

Redis列表命令

  • Redis 列表是简单的字符串列表,按照插入顺序排序。可以在列表的头部或者尾部添加一个元素
  • 一个列表最多可以包含 232 - 1 个元素

基本命令

描述

LPUSH KEY_NAME VALUE1… VALUEN

将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误

LPUSHX KEY_NAME VALUE1… VALUEN

将一个或多个值插入到已存在的列表头部,列表不存在时操作无效

RPUSH KEY_NAME VALUE1…VALUEN

将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误

RPUSHX KEY_NAME VALUE1…VALUEN

将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效

LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE

在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误

LINDEX KEY_NAME INDEX_POSITION

通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推

LLEN KEY_NAME

返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误

LPOP KEY_NAME

移出并获取列表的第一个元素

LRANGE KEY_NAME START END

返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推

LREM KEY_NAME COUNT VALUE

根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。COUNT 的值可以是以下几种:count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。count = 0 : 移除表中所有与 VALUE 相等的值

LSET KEY_NAME INDEX VALUE

通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误

LTRIM KEY_NAME START STOP

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推

RPOP KEY_NAME

移除并返回列表的最后一个元素

RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

BLPOP LIST1 LIST2 … LISTN TIMEOUT

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

BRPOP LIST1 LIST2 … LISTN TIMEOUT

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT

列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

Redis集合命令

  • Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
  • Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
  • 集合中最大的成员数为 232 - 1

基本命令

描述

SADD KEY_NAME VALUE1…VALUEN

将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误

SCARD KEY_NAME

返回集合中元素的数量

SDIFF FIRST_KEY OTHER_KEY1…OTHER_KEYN

返回给定集合之间的差集。不存在的集合 key 将视为空集

SDIFFSTORE DESTINATION_KEY KEY1…KEYN

将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖

SINTER KEY KEY1…KEYN

返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集

SINTERSTORE DESTINATION_KEY KEY KEY1…KEYN

给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖

SISMEMBER KEY VALUE

判断成员元素是否是集合的成员

SMEMBERS KEY VALUE

返回集合中的所有的成员。 不存在的集合 key 被视为空集合

SMOVE SOURCE DESTINATION MEMBER

将指定成员 member 元素从 source 集合移动到 destination 集合。SMOVE 是原子性操作。如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。当 source 或 destination 不是集合类型时,返回一个错误

SPOP KEY

移除并返回集合中的一个随机元素

SRANDMEMBER KEY [count]

返回集合中的一个随机元素。从 Redis 2.6 版本开始, Srandmember 命令接受可选的 count 参数:如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动

SREM KEY MEMBER1…MEMBERN

移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。当 key 不是集合类型,返回一个错误

SUNION KEY KEY1…KEYN

返回给定集合的并集。不存在的集合 key 被视为空集

SUNIONSTORE DESTINATION KEY KEY1…KEYN

将给定集合的并集存储在指定的集合 destination 中

SSCAN KEY [MATCH pattern] [COUNT count]

迭代集合键中的元素

Redis有序集合命令

  • Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员
  • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序
  • 有序集合的成员是唯一的,但分数(score)却可以重复。
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
  • 集合中最大的成员数为 232 - 1

基本命令

描述

ZADD KEY_NAME SCORE1 VALUE1… SCOREN VALUEN

用于将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误

ZCARD KEY_NAME

计算集合中元素的数量

ZINCRBY key increment member

对有序集合中指定成员的分数加上增量 increment。可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误

ZCOUNT key min max

计算有序集合中指定分数区间的成员数量

ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和

ZLEXCOUNT KEY MIN MAX

计算有序集合中指定字典区间内成员数量

ZRANGE key start stop [WITHSCORES]

返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列。如果你需要成员按值递减(从大到小)来排列,使用 ZREVRANGE 命令。下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推

ZRANGEBYLEX key min max [LIMIT offset count]

通过字典区间返回有序集合的成员

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算

ZRANK key member

返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列

ZREM key member

移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误

ZREMRANGEBYLEX key min max

移除有序集合中给定的字典区间的所有成员

ZREMRANGEBYRANK key start stop

移除有序集中,指定排名(rank)区间内的所有成员

ZREMRANGEBYSCORE key min max

移除有序集中,指定分数(score)区间内的所有成员

ZREVRANGE key start stop [WITHSCORES]

返回有序集中,指定区间内的成员。其中成员的位置按分数值递减(从大到小)来排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。除了成员按分数值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样

ZREVRANK key member

返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名

ZSCORE key member

返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil

ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]

算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和

ZSCAN key cursor [MATCH pattern] [COUNT count]

迭代有序集合中的元素(包括元素成员和元素分值)

RedisHyperLogLog命令

  • Redis 在 2.8.9 版本添加了 HyperLogLog 结构
  • Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的
  • 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 264 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比
  • 因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素

这里是引用
数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数

基本命令

描述

PFADD key element [element …]

将所有元素参数添加到 HyperLogLog 数据结构中

PFCOUNT key [key …]

返回给定 HyperLogLog 的基数估算值

PFMERGE destkey sourcekey [sourcekey …]

将多HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的