Redis 客户端命令参考
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
表示返回结果带上经纬度|距离|hash
,ASC|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]
: 对应于 HashSSCAN key cursor [MATCH pattern] [COUNT count]
: 对应于 SetZSCAN 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
: 返回订阅模式的数量