Redis 客户端命令总结
注意:括号里是参数,具体使用的时候不需要括号和逗号,直接使用空格分隔命令以及各个参数即可。
1、对Key操作的命令
exists(key):确认一个key是否存在。存在返回1,不存在返回0。
del(key):删除一个 key。key 存在返回1,不存在返回0。
expire(key, seconds):为给定 key 设置过期时间,以秒计。key 存在返回1,不存在返回0。
expireat(key, seconds-timestamp):为给定 key 设置过期时间。以秒计,时间参数是 unix 时间戳。key 存在返回1,不存在返回0。(不清楚)
pexpire(key, milliseconds):为给定 key 设置过期时间,以毫秒计。key 存在返回1,不存在返回0。
pexpireat(key, milliseconds-timestamp):为给定 key 设置过期时间。以毫秒计,时间参数是 unix 时间戳。key 存在返回1,不存在返回0。(不清楚)
ttl(key):以秒为单位返回 key 的剩余生存时间。永久 key 的返回-1。
pttl(key):以毫秒为单位返回 key 的剩余生存时间。永久 key 的返回-1。
persist(key):移除 key 的过期时间,key 将持久保持。
keys(pattern):返回所有符合给定模式( pattern)的 key 。
move(key, dbindex):将当前数据库中的 key 转移到 dbindex 数据库,dbindex 为0到15。
rename(oldname, newname):将 key 由 oldname 重命名为 newname。若 newname 的 key 存在则删除 newname 表示的 key,然后再将 key 由 oldname 重命名为 newname。
rnamenx(oldname, newname):将 key 由 oldname 重命名为 newname。若 newname 的 key 存在则不做操作。
type(key):返回 key 所储存的值的类型。
dump(key):序列化给定 key ,并返回被序列化的值。(不清楚)
randomkey:从当前数据库中随机返回一个 key。
2、对String操作的命令
set(key, value):给名称为 key 的 string 赋予值 value。
get(key):返回名称为 key 的 string 的 value。
substr(key, start, end):返回名称为 key 的 string 的子字符串(start 到 end 之间,包括 start 和 end),start 和 end 为字符索引,从0开始。
getrange(key, start, end):返回名称为 key 的 string 的子字符串(start 到 end 之间,包括 start 和 end),start 和 end 为字符索引,从0开始。
getset(key, value):将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
mset(key1, value1, key2, value2, …, keyN, valueN):同时给多个 string 赋值,名称为 key i 的 string 赋值 value i。
mget(key1, key2,…, keyN):返回名称为 key1 到 keyN 的 string 的 value。
setex(key, seconds, value):给名称为 key 的 string 赋予值 value。同时设定过期时间 seconds,以秒计。
psetex(key, milliseconds, value):给名称为 key 的 string 赋予值 value。同时设定过期时间 milliseconds,以毫秒计。
setnx(key, value):如果不存在名称为 key 的 string,则向库中添加 string,名称为 key,值为 value。key 存在则不添加。
msetnx(key1, value1, key2, value2, …, keyN, valueN):同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。只要有一个 key 存在,所有的 key 都不会设置。
strlen(key):返回 key 所储存的字符串值 value 的长度。
incr(key):名称为 key 的 value 增1操作。该 value 必须为整数,否则报错。
incrby(key, integer):名称为 key 的 value 增加 integer。该 value 必须为整数,否则报错。
incrbyfloat(key, float):名称为 key 的 value 增加 float。该 value 必须为数字,否则报错。这个主要是能添加浮点量。
decr(key):名称为 key 的 value 减1操作。该 value 必须为整数,否则报错。
decrby(key, integer):名称为 key 的 value 减少 integer。该 value 必须为整数,否则报错。
append(key, value):名称为 key 的 string 的值末尾附加 value。返回新 value 字符串的长度。
3、对List操作的命令
有序可重复
rpush(key, value1, ..., valueN):在名称为 key 的 list 尾添加值为 value1 到 valueN 的元素。
lpush(key, value1, ..., valueN):在名称为 key 的 list 头添加值为 value1 到 valueN 的元素。
rpushx(key, value):为已存在的列表 key 尾部添加 value,返回添加后列表的长度。不存在则不添加,返回0。
lpushx(key, value):为已存在的列表 key 头部添加 value,返回添加后列表的长度。不存在则不添加,返回0。
linsert(key, before|after, pivot, value):在名称为 key 的 list 指定元素 pivot 的前面或者后面插入元素 value。如果指定元素 pivot 不存在,则返回-1,存在则返回插入元素后列表的总元素个数。
llen(key):返回名称为 key 的 list 的长度。
lrange(key, start, end):返回名称为 key 的 list 中 start 至 end 之间的元素(包括 start 和 end,下标从0开始。下同)。
ltrim(key, start, end):截取名称为 key 的 list,保留 start 至 end 之间的元素,对原列表进行了修改。
lindex(key, index):返回名称为 key 的 list 中 index 位置的元素。
lset(key, index, value):给名称为 key 的 list 中 index 位置的元素赋值为 value,index 必须为列表中已有的下标。
lrem(key, count, value):在名称为 key 的 list 中 删除 count 个值为 value 的元素。count 为 0,删除所有值为value的元素,count > 0 从头至尾删除 count 个值为 value 的元素,count < 0 从尾到头删除 |count| 个值为 value 的元素。
lpop(key):返回并删除名称为 key 的 list 中的首元素。也就是将该列表中第一个元素返回,并且在列表中删除该元素。
rpop(key):返回并删除名称为 key 的 list 中的尾元素。也就是将该列表中最后一个元素返回,并且在列表中删除该元素。
blpop(key1, key2, …, keyN, timeout):lpop 命令的 block 版本。即当 timeout 为 0 时,若遇到名称为 key i 的 list 不存在或该 list 为空,则命令结束。如果 timeout > 0,则遇到上述情况时,等待 timeout 秒,如果问题没有解决,则对 key i+1 开始的 list 执行 lpop 操作。
brpop(key1, key2,… keyN, timeout):rpop 命令的 block 版本。参考上一命令。
rpoplpush(srckey, dstkey):返回并删除名称为 srckey 的 list 的尾元素,并将该元素添加到名称为 dstkey 的 list 的头部。
brpoplpush(srckey, dstkey, timeout):返回并删除名称为 srckey 的 list 的尾元素,并将该元素添加到名称为 dstkey 的 list 的头部。 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4、对Set操作的命令
无序不可重复
sadd(key, member1, ..., memberN):向名称为 key 的 set 中添加元素 member1 到 memberN。
srem(key, member1, ..., memberN):删除名称为 key 的 set 中的元素 member1 到 memberN。
srandmember(key, count):随机返回名称为 key 的 set 的一个或多个(count)元素。不写 count 时默认为1。
spop(key):随机返回并删除名称为 key 的 set 中一个元素。
scard(key):返回名称为 key 的 set 的元素个数。
smembers(key):返回名称为 key 的 set 的所有元素。
smove(srckey, dstkey, member):将 member 元素从名称为 srckey 的 set 集合移到名称为 dstkey 的 set 集合。
sismember(key, member):测试 member 是否是名称为 key 的 set 的元素,是的话返回1,不是的话返回0。
sinter(key1, key2, …, keyN):返回名称为key1 到 keyN 的 set 集合的交集。
sinterstore(dstkey, key1, key2, …, keyN):求名称为key1 到 keyN 的 set 集合的交集并将交集保存到名称为 dstkey 的 set 集合。返回交集元素的个数。
sunion(key1, key2, …, keyN):返回名称为key1 到 keyN 的 set 集合的并集。
sunionstore(dstkey, key1, key2, …, keyN):求名称为key1 到 keyN 的 set 集合的并集并将并集保存到名称为 dstkey 的 set 集合。返回并集元素的个数。
sdiff(key1, key2, …, keyN):返回名称为key1 到 keyN 的 set 集合的差集。
sdiffstore(dstkey, key1, key2, …, keyN) :求名称为key1 到 keyN 的 set 集合的差集并将差集保存到名称为 dstkey 的 set 集合。返回差集元素的个数。
5、对Zset操作的命令
有序不可重复(sorted set)
zadd(key, score1, member1, ..., scoreN, memberN):向名称为 key 的 zset 中添加元素 member1 到 memberN。如果该元素已经存在,则该元素的 score 更新为新的score。(score用于排序,为数字),返回新加元素的个数。
zincrby(key, increment, member):向名称为 key 的 zset 中添加元素 member,其 score 值为 increment,返回 score。如果该元素已经存在,则该元素的 score 增加 increment,返回更新后的 score。
zrem(key, member1, ... memberN):删除名称为 key 的 zset 中的元素 member1 到 memberN。
zcard(key):返回名称为 key 的 zset 元素的个数。
zscore(key, element):返回名称为 key 的 zset 中元素 element 的 score。元素不存在返回 null。
zcount(key, min, max):计算名称为 key 的 zset 中 score >= min 且 score <= max 的所有元素的总数。
zrank(key, member):返回名称为 key 的 zset(元素已按 score 从小到大排序)中 member 元素的 rank(即 index,从0开始),若没有 member 元素,返回 null。
zrevrank(key, member):返回名称为 key 的 zset(元素已按 score 从大到小排序)中 member 元素的 rank(即 index,从0开始),若没有 member 元素,返回 null。
zrange(key, start, end):返回名称为 key 的 zset(元素已按 score 从小到大排序)中的 index 从 start 到 end 的所有元素。
zrevrange(key, start, end):返回名称为 key 的 zset(元素已按 score 从大到小排序)中的 index 从 start 到 end 的所有元素。
zrangebyscore(key, min, max):返回名称为 key 的 zset 中 score >= min 且 score <= max 的所有元素。
zremrangebyrank(key, min, max):删除名称为 key 的 zset(元素已按 score 从小到大排序) 中 rank >= min 且 rank <= max 的所有元素。
zremrangebyscore(key, min, max):删除名称为 key 的 zset 中 score >= min 且 score <= max 的所有元素。
zunionstore / zinterstore(dstkeyN, key1, …, keyN, WEIGHTS w1, …, wN, AGGREGATE SUM|MIN|MAX):对 N 个 zset 求并集/交集,并将最后的集合保存在 dstkeyN 中。对于集合中每一个元素的 score,在进行 AGGREGATE 运算前,都要乘以对应的 WEIGHTS 参数。如果没有提供WEIGHTS,默认为1。默认的 AGGREGATE 是 SUM,即结果集合中元素的 score 是所有集合对应元素进行 SUM 运算的值,而 MIN 和 MAX 是指结果集合中元素的 score 是所有集合对应元素中最小值和最大值。
6、对Hash操作的命令
hset(key, field, value):向名称为 key 的 hash 中添加元素 field<—>value。
hget(key, field):返回名称为 key 的 hash 中 field 对应的 value。
hsetnx(key, field, value):在名称为 key 的 hash 中如果不存指定的 field,则添加元素 field<—>value。反之不添加。
hmset(key, field1, value1, …, fieldN, valueN):向名称为 key 的 hash 中添加元素 field1<—>value1 到 fieldN<—>valueN。
hmget(key, field1, …, fieldN):返回名称为 key 的 hash 中 field1 到 findN 对应的value。
hincrby(key, field, integer):将名称为 key 的 hash 中 field 的 value 增加 integer,注意 value 类型必须为 integer。
hincrbyfloat(key, field, float):将名称为 key 的 hash 中 field 的 value 增加 float,注意 value 类型必须为数字。和上面的区别是能增加浮点量。
hexists(key, field):判断名称为 key 的 hash 中是否存在键为 field 的域,返回 0 或者 1。
hdel(key, field):删除名称为 key 的 hash 中键为 field 的域,返回删除的数量。
hlen(key):返回名称为 key 的 hash 中元素个数。
hkeys(key):返回名称为 key 的 hash 中所有键 field。
hvals(key):返回名称为 key 的 hash 中所有值 value。
hgetall(key):返回名称为 key 的 hash 中所有的键 field 及其对应的值 value。
7、对HyperLogLog操作的命令
描述
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
命令
pfadd(key, element1, ..., elementN):添加指定元素到 HyperLogLog 中。
l-zcgredis5:1>pfadd runoobkey "redis" "mongodb" "mysql" "1"
l-zcgredis5:1>pfadd runoobkey1 "redis" "mongodb" "mysql" "mysql" "1"
pfcount(key1, ..., keyN):返回给定的 HyperLogLog 的基数估算值。
l-zcgredis5:1>pfcount runoobkey1 runoobkey "3"
pfmerge(destkey, sourcekey1, ..., sourcekeyN):将多个 HyperLogLog 合并为一个 HyperLogLog。
l-zcgredis5:1>pfmerge myhll runoobkey runoobkey1 "OK"
8、发布订阅命令
psubscribe(pattern1, ..., patternN):订阅一个或者多个给定模式的频道。
punsubscribe(pattern1, ..., patternN):退订所有给定模式的频道。
subscribe(channel1, ..., channelN):订阅给定的一个或多个频道。
unsubscribe(channel1, ..., channelN):退订给定的一个或多个频道。
pubsub(subcommand, argument):查看订阅与发布系统状态。
publish(channel, message):将信息发送到指定的频道。
9、事务命令
描述
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
命令
discard:取消事务,放弃执行事务块内的所有命令。
exec:执行所有事务块内的命令。
multi:标记一个事务块的开始。
unwatch:取消 WATCH 命令对所有 key 的监视。
watch(key1, ..., keyN):监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
示例
如果在 set b 处失败,set a 已成功不会回滚,set c 还会继续执行。
l-zcgredis5:1>multi "OK" l-zcgredis5:1>set a aaa "QUEUED" l-zcgredis5:1>set b bbb "QUEUED" l-zcgredis5:1>set c ccc "QUEUED" l-zcgredis5:1>exec 1) "OK" 2) "OK" 3) "OK" l-zcgredis5:1>
10、脚本命令
描述
Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
命令
eval(script, numkeys, key1, ..., keyN, arg1, ..., argN):执行Lua脚本。
evalsha(sha1, numkeys, key1, ..., keyN, arg1, ..., argN):执行 Lua 脚本。
script exists(script1, ..., scriptN):查看指定的脚本是否已经被保存在缓存当中。
script flush:从脚本缓存中移除所有脚本。
script kill:杀死当前正在运行的 Lua 脚本。
script load(script):将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。
示例
l-zcgredis5:1>EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second" l-zcgredis5:1>
11、连接命令
quit:关闭当前连接
auth(password):验证密码是否正确。
echo(message):打印 message 字符串。
select(index):切换到指定的数据库。
ping:查看服务是否运行。
l-zcgredis5:1>ping "PONG"
12、服务器命令
client kill(ip:port):关闭客户端连接。
client list:获取连接到服务器的客户端连接列表。
client setname(connection-name):设置当前连接的名称。
client getname:获取连接的名称。
client pause(timeout):在指定时间内终止运行来自客户端的命令。
cluster slots:获取集群节点的映射数组。
command:获取 Redis 命令详情数组。
command count:获取 Redis 命令总数。
command getkeys:获取给定命令的所有键。(不清楚)
command info(command-name1, ..., command-nameN):获取指定Redis命令描述的数组。
time:返回当前服务器时间。一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数。
config get(parameter):获取指定配置参数的值,parameyer 为 * 的时候,获取所有配置信息。
config rewrite:对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写。
config set(parameter, value):修改 redis 配置参数,无需重启。
config resetstat:重置 INFO 命令中的某些统计数据。
dbsize:返回当前数据库中 key 的数量。
debug object(key):获取 key 的调试信息。
debug segfault:执行一个非法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 调试。
flushdb:删除当前数据库中的所有 key。
flushall:删除所有数据库中的所有key。
info(section):获取Redis服务器的各种信息和统计数值。section 为空的话会显示所有信息,section 值为 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace。
save:将数据同步保存到磁盘。
lastsave:返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。
bgsave:将数据异步保存到磁盘。
bgrewriteaof:异步执行一个 AOF(AppendOnly File) 文件重写操作。
monitor:实时打印出 Redis 服务器接收到的命令,调试用。实时转储收到的请求。
role:返回主从实例所属的角色。
shutdown:将数据同步保存到磁盘,然后关闭服务。
slaveof(ip:port):改变复制策略设置。将当前服务器转变为指定服务器的从属服务器(slave server)。如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
slave no one:对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
slowlog :管理 redis 的慢日志。
sync:用于复制功能(replication)的内部命令。用于同步主从服务器。