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 进行并集计算得出的 |