文章目录
  1. 1 命令概述
  2. 2 连接(Connection)
  3. 3 操作数据
    1. 3.1 Key(键)
    2. 3.2 String(字符串)
    3. 3.3 Hash(哈希表)
    4. 3.4 List(列表)
    5. 3.5 Set(集合)
    6. 3.6 ZSet(SortedSet, 有序集合)
    7. 3.7 GEO(地理位置)
    8. 3.8 通用操作
      1. 3.8.1 不存在时设置(SETNX)
      2. 3.8.2 游标遍历(SCAN)
  4. 4 操作服务器(Server)
    1. 4.1 服务器配置
    2. 4.2 客户端信息
    3. 4.3 服务器信息
    4. 4.4 主从同步
    5. 4.5 数据备份
    6. 4.6 数据重置
    7. 4.7 慢日志
  5. 5 高级用法
    1. 5.1 事务(Transaction)
    2. 5.2 发布/订阅

Redis 命令可以直接在 Redis 命令行中执行,用于管理员维护服务器或开发人员维护数据。Redis 命令很庞杂,本文把它们按用途分类并进行了关键说明,便于对比记忆,也便于管理人员和开发人员有选择地查阅,也便于开发人员掌握第三方 Redis 开发包提供的接口。

作者:王克锋
出处:https://kefeng.wang/2017/08/16/redis-command/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 命令概述

参考资料: Redis 命令清单(英文)Redis 命令(中文)
启动客户端: redis-cli -a passwd
下面所有命令不区分大小写。

2 连接(Connection)

  • AUTH password: 向服务器认证。如果服务器设置了密码,客户端连接后必须认证才能继续(除非 redis-cli 中指定了密码);
  • PING: 测试与服务器连接是否正常,正常时输出 PONG;
  • ECHO message: 原样回显信息,测试用;
  • SELECT dbIdx: 切换至指定的数据库(默认为 0~15);
  • SWAPDB index1 index2: 交换两个数据库的所有存储数据;
  • QUIT: 从服务器断开连接。

3 操作数据

3.1 Key(键)

常规命令:

  • KEYS pattern: 列出所有匹配键名;
  • EXISTS key: 检查指定的 KEY 是否存在,返回0/1;
  • TYPE key: 查询指定 KEY 的数据类型(none/string/list/set/zset/hash);
  • RENAME key newkey: KEY 不存在,或者 KEY==newKEY时,报错;newKEY存在时,会被覆盖;
  • SORT key [ASC | DESC]: 对 List/Set/ZSet 中的元素排序;
  • DEL key [key ...]: 删除指定的 KEY(可多个);

有效期相关命令:

  • TTL key: 查询指定 KEY 的剩余时间,单位是秒(KEY 为永久时返回 -1,KEY 不存在时返回 -2);
  • EXPIRE key seconds: 设置 KEY 有效期(剩余的时长),到期后自动删除,单位是“秒”;
  • EXPIREAT key seconds: 与命令 EXPIRE 相似,但指定的是超时时的时间点(Unix时间戳);
  • PERSIST key: 删除过期时间,把该 KEY 由易失变为持久;

维护相关命令:

  • DUMP key: 序列化指定的 KEY,返回序列化之后的内容;
  • RESTORE key ttl serialized-value [REPLACE]: 序列化后的内容,反序列化赋给 KEY;
  • MOVE key db: 同一个 Redis 实例中的两个数据库间,转移指定的 KEY;
  • MIGRATE host port key db2 timeout [COPY] [REPLACE]: 不同 Redis 实例间转移指定的 KEY;

3.2 String(字符串)

  • GET key / MGET key1 key2 ...: 获取单个或多个键的值;
  • MSET key value [key value ...]: 设置键值对,一对或多对,TTL 会被重置;
  • APPEND key value: 向指定 KEY 值末尾追加内容;
  • STRLEN key: 查询字符串长度;
  • GETRANGE key start end: 获取字符串子串(可指定负值,表示从尾部偏移);
  • DECR key / DECRBY key decrement: 存储值减少1或减少指定值;
  • INCR key / INCRBY key increment: 存储值增加1或增加指定值;

SET key value [EX seconds] [PX milliseconds] [NX|XX],设置键值,会覆盖 value 并重置 TTL:

  • EX second: 设置过期时间为 second 秒(等同于命令 SETEX);
  • PX millisecond: 设置过期时间为 millisecond 毫秒(等同于命令 PSETEX);
  • NX: 只有键不存在时,才对修改值(等同于命令 SETNX);
  • XX: 只在键已经存在时,才对键进行设置操作。

3.3 Hash(哈希表)

相当于 Java 中的 Map<String,String>
下面命令都是针对哈希表(名字是 key)操作:

  • HEXISTS key subKey: 查询是否存在指定的域;
  • HDEL key subKey1 subKey2 ...: 删除指定的域(subKey);
  • HLEN key: 查询域的个数;

  • HKEYS key: 查询所有域的名称(不包括值);

  • HGET key subKey: 查询指定域的值;
  • HMGET key subKey1 subKey2 ...: 查询指定域的值;
  • HGETALL key: 查询所有域及其值;

  • HSET key subKey value: 对指定域设置新值;

  • HMSET key subKey value [subKey value ...]: 对指定多个域设置新值;
  • HSTRLEN key subKey: 查询指定域值的长度;
  • HINCRBY key subKey increment: 对指定域作增量操作;

3.4 List(列表)

相当于 Java 中的 List<String>

  • LPUSH|RPUSH key value [value ...]: 向表头(逐个向0位置插入,结果倒序)或表尾(逐个向尾部插入,结果为正序)插入多个值;
  • LPOP|RPOP key: 从表头或表尾弹出单个值;
  • LSET key index value: 对指定下标设置新值;
  • LLEN key: 查询列表长度;
  • LINSERT key BEFORE|AFTER pivot value: 在参照值 pivot 的前面或后面插入新值;
  • LINDEX key index: 查询指定下标的元素;
  • LRANGE key start stop: 返回指定下标范围[start,stop]内的元素;
  • LTRIM key start stop: 只保留下标范围[start,stop]的元素,其他的全部移除;
  • LREM key count value: 从列表移除 count(零为全部/正数从头/负数从尾) 个值为 value 的元素;

3.5 Set(集合)

下面命令中,key 表示集合的名称,member表示集合中成员的值。

  • SCARD key: 查询集合中的元素个数;
  • SADD key member [member ...]: 批量添加元素(已存在的被忽略);
  • SREM key member [member ...]: 从集合中删除指定元素;
  • SPOP key: 随机移出并返回一个元素;
  • SRANDMEMBER key [count]: 随机返回指定个数(默认为1)的元素,但不移出;
  • SMOVE key1 key2 member: 将集合 key1 中的元素 member 移至集合 key2;
  • SISMEMBER key member: 判断某元素是否属于某个集合;
  • SMEMBERS key: 返回集合中所有元素;
  • SDIFF|SINTER|SUNION key [key ...]: 生成指定集合的差集|交集|并集,返回新集合所有元素;
  • SDIFFSTORE|SINTERSTORE|SUNIONSTORE dest key [key ...]: 生成指定集合的差集|交集|并集,新集合所有元素存入集合 dest;

3.6 ZSet(SortedSet, 有序集合)

下列命令中,key 为集合名称,各成员 member 都有 score 属性,各成员存储下标用 index 表示;
member 的值在集合中不会重复,重复写入时会更新同成员的 score(index 也可能变化);
score 是各个成员的排序依据(score 相同时,按 member 字典顺序排序),查询结果以升序排列,score1/score2 数值前加符号 “[“(可默认不加)表示闭区间,加 “(“ 时表示开区间,还可以用 -inf 和 +inf 表示负无穷和正无穷;
index 是各成员的下标,从 0 开始,也可以用 -1/-2/… 表示倒数第 1/2/… 个成员;

  • ZADD key score member [score member] ...: 批量添加元素;
  • ZCARD key: 统计集合中元素个数;
  • ZCOUNT key score1 score2: 统计 score 在 [score1,score2] 区间上的元素个数;
  • ZRANGE key index1 index2 [WITHSCORES]: 根据下标区间 [index1,index2] 返回元素(升序排列),WITHSCORES 表示连同 score 一并返回;
  • ZRANGEBYSCORE key score1 score2 [WITHSCORES] [LIMIT offset count]: 根据 score 区间 [score1,score2] 返回元素(升序排列),可指定是否连同返回 score、偏移和个数;
  • ZRANGEBYLEX key member1 member2 [LIMIT offset count]: 根据 member 区间(可指定开闭区别,正负无穷)返回元素,可指定偏移和个数;
  • ZREVRANGE key index1 index2 [WITHSCORES]: 与命令 ZRANGE 功能相同,只是结果降序排列;
  • ZREVRANGEBYSCORE key score1 score2 [WITHSCORES] [LIMIT offset count]: 与命令 ZRANGEBYSCORE 功能相同,只是结果为降序排列;
  • ZREM key member [member ...]: 批量删除元素;
  • ZREMRANGEBYRANK key index1 index2: 根据下标区间 [index1,index2] 删除元素;
  • ZREMRANGEBYSCORE key score1 score2: 根据 score 区间 [score1,score2] 删除元素;
  • ZREMRANGEBYLEX key score1 score2: 根据 member 区间(可指定开闭区间、正负无穷)删除元素;
  • ZLEXCOUNT key member1 member2: 统计 member 区间(可指定开闭区间、正负无穷)元素个数;
  • ZRANK key member: 查询成员 member 的下标 index;
  • ZREVRANK key member: 成员按 score 倒序排列的情况下,返回 member 的下标 index;
  • ZINCRBY key increment member: 使成员 member 的 score 增加 increment(负数则减小);
  • ZSCORE key member: 返回成员 member 的 score;
  • ZUNIONSTORE destination numkeys key ... [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]: 把多个集合(参数 key)的并集,存入集合 destination,可指定最终成员的score算法为各源score的SUM(默认)/MIN/MAX,WEIGHTS选项表示各源集合中元素的score在被引用前乘以相应权重;
  • ZINTERSTORE destination numkeys key ... [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]: 把多个集合(参数 key)的并集,存入集合 destination,参数含义与 ZUNIONSTORE 命令相同。

3.7 GEO(地理位置)

此处坐标标准为 WGS84(World Geodetic System 1984),也就是 GPS(全球定位系统) 坐标系。
GEO 使用有序集合(zset)保存“geohash + 经纬度坐标”的集合。
以下各命令中,key 为坐标点集合的名称,一个集合包含多个坐标点;
每个坐标点有 longitude(经度)/latitude(纬度)/member(坐标点的名称) 三个属性。

  • GEOADD key longitude latitude member [longitude latitude member ...]: 批量添加坐标点;
  • GEOPOS key member [member ...]: 批量获取点的坐标;
  • GEODIST key member1 member2 [m|km|ft|mi]: 获取两点间距离,单位可以是 m(米为默认)/km(千米)/ft(英尺)/mi(英里)
  • GEORADIUS key longitude latitude radius [m|km|ft|mi] [ASC|DESC] [COUNT count]: 获取某圆心点(经纬度坐标)某距离内的所有坐标点,可指定选项 WITHCOORD|WITHDIST|WITHHASH 表示返回结果带上经纬度|距离|hashASC|DESC表示返回结果按照距离升序|降序排序,COUNT count表示返回结果的最大个数;
  • GEORADIUSBYMEMBER key member radius [m|km|ft|mi] [ASC|DESC] [COUNT count]: 获取某圆心点(坐标点名称)某距离内的所有坐标点,其他参数与 GEODIST 相同;
  • GEOHASH key member [member ...]: 获取坐标点的 HASH 值(将经纬度转换成字符串 HASH 值)

3.8 通用操作

3.8.1 不存在时设置(SETNX)

SETNX 的含义为 SET if Not eXists。
不存在时才设置(当作成功,返回1),存在时不作任何操作(当作失败,返回0)。

  • SETNX key value: 对应于普通 key 单对;
  • MSETNX key value [key value ...]: 对应于普通 key 多对,所有 key 都不存在时才去设置并返回1,只要一个 key 存在就不作任何操作,并返回0;
  • HSETNX key field value: 对应于哈希表 key;

3.8.2 游标遍历(SCAN)

SCAN/HSCAN/SSCAN/ZSCAN 用于增量地迭代集合中的元素,每次执行都只会返回一小批元素,不像 KEYS/SMEMBERS 返回所有元素。
其操作步骤为:首次迭代指定 cursor=0 表示从头开始,每次迭代都会返回新 cursor 作为下次迭代的起始 cursor,直至返回 cursor=0 表示结束。
MATCH表示只匹配的指定模式的元素,COUNT表示返回元素个数的上限。
如果两次迭代间的空档时间里,集合被修改,那么返回的元素会有偏差。

  • SCAN cursor [MATCH pattern] [COUNT count]: 对应于当前库中的所有键(包括所有数据类型)
  • HSCAN key cursor [MATCH pattern] [COUNT count]: 对应于 Hash
  • SSCAN key cursor [MATCH pattern] [COUNT count]: 对应于 Set
  • ZSCAN key cursor [MATCH pattern] [COUNT count]: 对应于 ZSet

4 操作服务器(Server)

4.1 服务器配置

  • CONFIG GET pattern: 查询匹配的参数配置;
  • CONFIG SET name value: 设置特定的参数,无需重启立即生效;
  • CONFIG REWRITE: 把最新配置(含 CONFIG SET 修改的)保存至服务启动时引用的配置文件中。
  • CONFIG RESETSTAT: 重置INFO命令涉及的统计信息;

4.2 客户端信息

  • CLIENT SETNAME connection-name: 设定本连接名字(初始连接名为空),显示于CLIENT LIST
  • CLIENT GETNAME: 获取当前连接的名字。
  • CLIENT LIST: 所有连接的客户端的信息;
  • CLIENT KILL ip:port: 关闭地址为 ip:port 的客户端;

4.3 服务器信息

  • TIME: 查询当前服务器时间,返回 Unix 时间戳(秒和微秒两个值);
  • MONITOR: 实时打印出 Redis 服务器接收到的命令(调试用);
  • INFO [default]: 返回默认选择的信息,”default” 可缺省
  • INFO ALL: 返回所有信息
  • INFO CPU: CPU 的计算量统计信息
  • INFO Clients: 已连接客户端的信息
  • INFO Cluster: 集群有关的信息
  • INFO Commandstats: 各种不同类型的命令的执行统计信息
  • INFO Keyspace: 数据库相关的统计信息
  • INFO Memory: 服务器的内存信息
  • INFO Persistence: RDB/AOF 持久化的信息
  • INFO Replication: 主从复制信息
  • INFO Server: 服务器的信息
  • INFO Stats: 一般统计信息

4.4 主从同步

  • SLAVEOF host port: 将当前服务器转变为指定服务器的从属服务器;
  • SYNC: 用于复制功能(replication)的内部命令。
  • PSYNC <MASTER_RUN_ID> <OFFSET>: 用于复制功能(replication)的内部命令。

4.5 数据备份

  • SHUTDOWN [SAVE|NOSAVE]: 停止客户端,可选保存(SAVE|NOSAVE)RDB/AOF 文件,停止服务器;
  • SAVE: 同步保存数据至磁盘 RDB 文件,注意不要用在生产环境操作,它会阻塞所有客户端;
  • BGSAVE: 后台异步保存数据至磁盘文件;
  • BGREWRITEAOF: 后台重写 AOF 文件;
  • LASTSAVE: 查看最近一次成功保存磁盘文件的时间(Unix时间戳);

4.6 数据重置

  • FLUSHDB: 清空当前数据库;
  • FLUSHALL: 清空当前 Redis 实例的所有数据库;
  • DBSIZE: 查询当前数据库的 KEY 的数量;

4.7 慢日志

  • SLOWLOG LEN: 查询当前记录的慢操作条数;
  • SLOWLOG GET [count]: 查看慢操作详情,每个详情包括执行时间点、耗时、命令及其参数;
  • SLOWLOG RESET: 清空当前记录的慢操作。

5 高级用法

5.1 事务(Transaction)

  • WATCH key [key ...]: 监视多个key,若事务结束(EXEC/DISCARD)前key被修改,则事务中断;
  • UNWATCH: 取消 WATCH 命令对所有 key 的监视
  • MULTI: 事务块的开始
  • EXEC: 原子性地执行事务块内的所有命令,会自动执行 UNWATCH 命令;
  • DISCARD: 放弃事务块内的所有命令,会自动执行 UNWATCH 命令;

5.2 发布/订阅

  • PUBLISH channel message: 向指定频道发送消息;
  • SUBSCRIBE channel [channel ...]: 订阅给定的多个频道的信息
  • UNSUBSCRIBE [channel [channel ...]]: 退订指定的频道(不指定表示退订所有已订阅的频道)
  • PSUBSCRIBE pattern [pattern ...]: 与命令SUBSCRIBE类似,只是以通配符模式指定频道
  • PUNSUBSCRIBE [pattern [pattern ...]]: 与命令UNSUBSCRIBE类似,只是以通配符模式指定频道
  • PUBSUB CHANNELS [pattern]: 列出当前的活跃频道(至少有一个订阅者的)
  • PUBSUB NUMSUB [channel ...]: 返回指定频道的订阅者数量
  • PUBSUB NUMPAT: 返回订阅模式的数量
文章目录
  1. 1 命令概述
  2. 2 连接(Connection)
  3. 3 操作数据
    1. 3.1 Key(键)
    2. 3.2 String(字符串)
    3. 3.3 Hash(哈希表)
    4. 3.4 List(列表)
    5. 3.5 Set(集合)
    6. 3.6 ZSet(SortedSet, 有序集合)
    7. 3.7 GEO(地理位置)
    8. 3.8 通用操作
      1. 3.8.1 不存在时设置(SETNX)
      2. 3.8.2 游标遍历(SCAN)
  4. 4 操作服务器(Server)
    1. 4.1 服务器配置
    2. 4.2 客户端信息
    3. 4.3 服务器信息
    4. 4.4 主从同步
    5. 4.5 数据备份
    6. 4.6 数据重置
    7. 4.7 慢日志
  5. 5 高级用法
    1. 5.1 事务(Transaction)
    2. 5.2 发布/订阅