Redis 命令
Redis 命令用于在 redis 服务上执行操作。
要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。
本地客户端连接
$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
该命令用于检测 redis 服务是否启动。
在远程服务上执行命令
$redis-cli -h 127.0.0.1 -p 6379 -a "abc123"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
key命令
key命令用于管理 redis 的键。
语法
Redis 键命令的基本语法如下:
COMMAND KEY_NAME
实例
127.0.0.1:6379> SET msg helloworld
OK
127.0.0.1:6379> GET msg
"helloworld"
127.0.0.1:6379> del msg
(integer) 1
DEL key
该命令用于在 key 存在时删除 key
127.0.0.1:6379> SET msg helloworld
OK
127.0.0.1:6379> GET msg
"helloworld"
127.0.0.1:6379> del msg
(integer) 1
DUMP key
序列化给定 key ,并返回被序列化的值。
127.0.0.1:6379> SET msg helloworld
OK
127.0.0.1:6379> DUMP msg
"\x00\nhelloworld\x06\x00'$'\x1c\xb3\xf7\bJ"
EXISTS key
检查给定 key 是否存在。
127.0.0.1:6379> EXISTS msg
(integer) 1
返回1,表示存在
EXPIRE key seconds
为给定 key 设置过期时间,单位秒。
127.0.0.1:6379> EXPIRE msg 10
(integer) 1
127.0.0.1:6379> TTL msg
(integer) 1
127.0.0.1:6379> TTL msg
(integer) 0
127.0.0.1:6379> TTL msg
(integer) -2
127.0.0.1:6379> GET msg
(nil)
TTL用于检查指定key有效时间,返回-2负数表示过期。
EXPIREAT key timestamp
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
127.0.0.1:6379> EXPIREAT msg 1000000
(integer) 1
PEXPIRE key milliseconds
设置 key 的过期时间以毫秒计
127.0.0.1:6379> PEXPIRE msg 1000
(integer) 1
127.0.0.1:6379> PTTL msg
(integer) 66
127.0.0.1:6379> PTTL msg
(integer) -2
PTTL命令用于检查指定key的有效期,单位毫秒,返回-2表示已过期。
KEYS pattern
查找所有符合给定模式( pattern)的 key 。
127.0.0.1:6379> SET name1 zhangsan
OK
127.0.0.1:6379> set name2 lisi
OK
127.0.0.1:6379> set name3 wangwu
OK
127.0.0.1:6379> KEYS *
1) "name2"
2) "name1"
3) "name3"
127.0.0.1:6379> KEYS n*
1) "name2"
2) "name1"
3) "name3"
MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。
127.0.0.1:6379> KEYS *
1) "name2"
2) "name1"
3) "name3"
127.0.0.1:6379> MOVE name1 1
(integer) 1
127.0.0.1:6379> KEYS *
1) "name2"
2) "name3"
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
1) "name1"
上面示例中的SELECT 指令用于选择要操作的redis db(redis默认有16个db,索引为0-15)
PERSIST key
移除 key 的过期时间,key 将持久保持。
127.0.0.1:6379> PERSIST User:0
(integer) 0
PTTL key
以毫秒为单位返回 key 的剩余的过期时间,返回-1表示永久有效。
127.0.0.1:6379> PTTL name3
(integer) -1
TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live),返回-1 表示永久有效。
127.0.0.1:6379> TTL name3
(integer) -1
RANDOMKEY
从当前数据库中随机返回一个 key 。
127.0.0.1:6379> RANDOMKEY
"name3"
RENAME key newkey
修改 key 的名称,neweky 存在则覆盖
127.0.0.1:6379> SET name1 zhangsan
OK
127.0.0.1:6379> SET name2 lisi
OK
127.0.0.1:6379> KEYS *
1) "name2"
2) "name1"
127.0.0.1:6379> GET name1
"zhangsan"
127.0.0.1:6379> GET name2
"lisi"
127.0.0.1:6379> RENAME name2 name1
OK
127.0.0.1:6379> GET name1
"lisi"
127.0.0.1:6379> GET name2
(nil)
上面的操作可以看到修改key为name2为name1后,name1被覆盖,name2则被删除掉了。
RENAMENX key newkey
仅当 newkey 不存在时,将 key 改名为 newkey 。
127.0.0.1:6379> SET name1 zhangsan
OK
127.0.0.1:6379> set name2 lisi
OK
127.0.0.1:6379> KEYS *
1) "name2"
2) "name1"
127.0.0.1:6379> GET name1
"zhangsan"
127.0.0.1:6379> GET name2
"lisi"
127.0.0.1:6379> RENAMENX name2 name1
(integer) 0
127.0.0.1:6379> RENAMENX name2 name3
(integer) 1
127.0.0.1:6379> KEYS *
1) "name1"
2) "name3"
上面的例子可以看到,修改name2位name1时,name1已存在,则无法修改,修改为name3时,name3不存在,修改成功!
TYPE key
返回 key 所储存的值的类型。
127.0.0.1:6379> SET strTest hello
OK
127.0.0.1:6379> HMSET hashTest name zhangsan age 20
OK
127.0.0.1:6379> LPUSH listTest element1
(integer) 1
127.0.0.1:6379> SADD setTest element1
(integer) 1
127.0.0.1:6379> ZADD zsetTest 0 element1
(integer) 1
127.0.0.1:6379> TYPE strTest
string
127.0.0.1:6379> TYPE hashTest
hash
127.0.0.1:6379> TYPE listTest
list
127.0.0.1:6379> TYPE setTest
set
127.0.0.1:6379> TYPE zsetTest
zset
Redis 字符串命令
SET key value
设置指定 key 的值
127.0.0.1:6379> SET msg helloworld
OK
GET key
获取指定 key 的值
127.0.0.1:6379> GET msg
"helloworld"
GETRANGE key start end
返回 key 中字符串值的子字符
127.0.0.1:6379> GETRANGE msg 0 4
"hello"
GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
127.0.0.1:6379> GETSET msg hellozhangsan
"helloworld"
127.0.0.1:6379> GET msg
"hellozhangsan"
SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
127.0.0.1:6379> SET msg hello
OK
127.0.0.1:6379> GET msg
"hello"
127.0.0.1:6379> GETBIT msg 1
(integer) 1
127.0.0.1:6379> SETBIT msg 1 0
(integer) 1
127.0.0.1:6379> GETBIT msg 1
(integer) 0
127.0.0.1:6379> GET msg
"(ello"
GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
当 offset 比字符串值的长度大,或者 key 不存在时,返回 0 。
127.0.0.1:6379> SET msg hello
OK
127.0.0.1:6379> GET msg
"hello"
127.0.0.1:6379> GETBIT msg 1
(integer) 1
127.0.0.1:6379> SETBIT msg 1 0
(integer) 1
127.0.0.1:6379> GETBIT msg 1
(integer) 0
127.0.0.1:6379> GET msg
"(ello"
MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。
127.0.0.1:6379> SET name1 zhangsan
OK
127.0.0.1:6379> SET name2 lisi
OK
127.0.0.1:6379> SET name3 wang
OK
127.0.0.1:6379> MGET name1 name2 name3
1) "zhangsan"
2) "lisi"
3) "wang"
SETEX key seconds value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
127.0.0.1:6379> SETEX msg 10 helloworld
OK
127.0.0.1:6379> GET msg
"helloworld"
127.0.0.1:6379> TTL msg
(integer) 4
SETNX key value
只有在 key 不存在时设置 key 的值。
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> SET msg1 helloworld
OK
127.0.0.1:6379> SETNX msg1 hellozhangsan
(integer) 0
127.0.0.1:6379> SETNX msg2 hellozhangsan
(integer) 1
127.0.0.1:6379> KEYS *
1) "msg2"
2) "msg1"
127.0.0.1:6379> GET msg1
"helloworld"
127.0.0.1:6379> GET msg2
"hellozhangsan"
SETRANGE key offset value
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
127.0.0.1:6379> set msg helloworld
OK
127.0.0.1:6379> GET msg
"helloworld"
127.0.0.1:6379> SETRANGE msg 6 zhangsan
(integer) 14
127.0.0.1:6379> GET msg
"hellowzhangsan"
STRLEN key
返回 key 所储存的字符串值的长度
127.0.0.1:6379> SET msg helloworld
OK
127.0.0.1:6379> STRLEN msg
(integer) 10
MSET key value [key value …]
同时设置一个或多个 key-value 对。
127.0.0.1:6379> MSET name1 zhangsan name2 lisi name3 wang
OK
127.0.0.1:6379> KEYS name*
1) "name2"
2) "name1"
3) "name3"
MSETNX key value [key value …]
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
127.0.0.1:6379> MSETNX name1 zhangsan name2 lisi name3 wang
(integer) 0
127.0.0.1:6379> MSETNX name4 zhangsan name5 lisi name6 wang
(integer) 1
127.0.0.1:6379> KEYS name*
1) "name5"
2) "name4"
3) "name3"
4) "name2"
5) "name6"
6) "name1"
PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
127.0.0.1:6379> PSETEX msg 12345 helloworld
OK
127.0.0.1:6379> PTTL msg
(integer) 6708
INCR key
将 key 中储存的数字值增一。
127.0.0.1:6379> SET num 1
OK
127.0.0.1:6379> INCR num
(integer) 2
127.0.0.1:6379> INCR num
(integer) 3
127.0.0.1:6379> GET num
"3"
DECR key
将 key 中储存的数字值减一。
127.0.0.1:6379> GET num
"3"
127.0.0.1:6379> DECR num
(integer) 2
127.0.0.1:6379> DECR num
(integer) 1
127.0.0.1:6379> GET num
"1"
DECRBY key decrement
key 所储存的值减去给定的减量值(decrement) 。
127.0.0.1:6379> SET num 10
OK
127.0.0.1:6379> GET num
"10"
127.0.0.1:6379> DECRBY num 5
(integer) 5
127.0.0.1:6379> GET num
"5"
APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
127.0.0.1:6379> SET msg hello
OK
127.0.0.1:6379> GET msg
"hello"
127.0.0.1:6379> APPEND msg world
(integer) 10
127.0.0.1:6379> GET msg
"helloworld"
Redis hash 命令
HDEL key field1 [field2]
删除一个或多个哈希表字段
127.0.0.1:6379> HMSET user name zhagsan age 20
OK
127.0.0.1:6379> HGETALL user
1) "name"
2) "zhagsan"
3) "age"
4) "20"
127.0.0.1:6379> HDEL user age
(integer) 1
127.0.0.1:6379> HGETALL user
1) "name"
2) "zhagsan"
HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
127.0.0.1:6379> HEXISTS user name
(integer) 1
127.0.0.1:6379> HGET user name
"zhagsan"
HGET key field
获取存储在哈希表中指定字段的值。
127.0.0.1:6379> HGET user name
"zhagsan"
HGETALL key
获取在哈希表中指定 key 的所有字段和值
127.0.0.1:6379> HGETALL user
1) "name"
2) "zhagsan"
3) "age"
4) "20"
HKEYS key
获取所有哈希表中的字段
127.0.0.1:6379> HKEYS user
1) "name"
2) "age"
HLEN key
获取哈希表中字段的数量
127.0.0.1:6379> HLEN user
(integer) 2
HMGET key field1 [field2]
获取所有给定字段的值
127.0.0.1:6379> HMGET user name age
1) "zhagsan"
2) "20"
HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
127.0.0.1:6379> HMSET user name lisi age 30
OK
127.0.0.1:6379> HGETALL user
1) "name"
2) "lisi"
3) "age"
4) "30"
HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
127.0.0.1:6379> HGETALL user
1) "name"
2) "lisi"
3) "age"
4) "30"
127.0.0.1:6379> HSET user age 20
(integer) 0
127.0.0.1:6379> HGETALL user
1) "name"
2) "lisi"
3) "age"
4) "20"
HVALS key
获取哈希表中所有值
127.0.0.1:6379> HVALS user
1) "lisi"
2) "20"
Redis 列表命令
LINDEX key index
通过索引获取列表中的元素
127.0.0.1:6379> LRANGE names1 0 5
1) "lisi"
2) "zhaoliu"
3) "wang"
127.0.0.1:6379> LINDEX names1 1
"zhaoliu"
LLEN key
获取列表长度
127.0.0.1:6379> LLEN names
(integer) 3
LPOP key
移出并获取列表的第一个元素
127.0.0.1:6379> LPOP names
"wang"
127.0.0.1:6379> LLEN names
(integer) 2
LPUSH key value1 [value2]
将一个或多个值插入到列表头部
127.0.0.1:6379> LPUSH names zhangsan lisi wang
(integer) 3
LPUSHX key value
将一个值插入到已存在的列表头部
127.0.0.1:6379> LPUSHX names zhaoliu
(integer) 3
LRANGE key start stop
获取列表指定范围内的元素
127.0.0.1:6379> LRANGE names 0 5
1) "zhaoliu"
2) "lisi"
3) "zhangsan"
LREM key count value
移除列表元素
LSET key index value
通过索引设置列表元素的值
127.0.0.1:6379> LRANGE names1 0 5
1) "lisi"
2) "zhangsan"
3) "wang"
127.0.0.1:6379> LSET names1 1 zhaoliu
OK
127.0.0.1:6379> LRANGE names1 0 5
1) "lisi"
2) "zhaoliu"
3) "wang"
LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
127.0.0.1:6379> LRANGE names2 0 5
1) "zhangsan"
2) "xiaoming"
3) "xiaobai"
4) "xiaohei"
127.0.0.1:6379> LTRIM names2 3 5
OK
127.0.0.1:6379> LRANGE names2 0 5
1) "xiaohei"
RPOP key
移除并获取列表最后一个元素
127.0.0.1:6379> RPOP names1
"lisi"
RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
127.0.0.1:6379> LRANGE names1 0 5
1) "wang"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> LRANGE names2 0 5
1) "xiaoming"
2) "xiaobai"
3) "xiaohei"
127.0.0.1:6379> RPOPLPUSH names1 names2
"zhangsan"
127.0.0.1:6379> LRANGE names1 0 5
1) "wang"
2) "lisi"
127.0.0.1:6379> LRANGE names2 0 5
1) "zhangsan"
2) "xiaoming"
3) "xiaobai"
4) "xiaohei"
RPUSH key value1 [value2]
在列表中添加一个或多个值
127.0.0.1:6379> RPUSH names xiaoming xiaobai
(integer) 6
RPUSHX key value
为已存在的列表添加值
127.0.0.1:6379> RPUSHX names wangwu
(integer) 4
127.0.0.1:6379> LRANGE names 0 5
1) "zhaoliu"
2) "lisi"
3) "zhangsan"
4) "wangwu"
Redis 集合命令
SADD key member1 [member2]
向集合添加一个或多个成员
127.0.0.1:6379> SADD color red blue green
(integer) 3
SCARD key
获取集合的成员数
127.0.0.1:6379> SCARD color
(integer) 3
SDIFF key1 [key2]
返回给定所有集合的差集
127.0.0.1:6379> SDIFF color1
1) "red"
2) "green"
3) "blue"
127.0.0.1:6379> SDIFF color2
1) "red"
2) "orange"
3) "yellow"
127.0.0.1:6379> SDIFF color1 color2
1) "green"
2) "blue"
SINTER key1 [key2]
返回给定所有集合的交集
127.0.0.1:6379> SINTER color1
1) "red"
2) "green"
3) "blue"
127.0.0.1:6379> SINTER color2
1) "orange"
2) "red"
3) "yellow"
127.0.0.1:6379> SINTER color1 color2
1) "red"
SISMEMBER key member
判断 member 元素是否是集合 key 的成员,如果是返回1,反之0
127.0.0.1:6379> SISMEMBER color1 red
(integer) 1
127.0.0.1:6379> SISMEMBER color1 yellow
(integer) 0
SMEMBERS key
返回集合中的所有成员
127.0.0.1:6379> SMEMBERS color1
1) "red"
2) "green"
3) "blue"
SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合
127.0.0.1:6379> SMOVE color1 color2 blue
(integer) 1
127.0.0.1:6379> SMEMBERS color1
1) "red"
2) "green"
127.0.0.1:6379> SMEMBERS color2
1) "orange"
2) "red"
3) "yellow"
4) "blue"
SPOP key
移除并返回集合中的一个随机元素
127.0.0.1:6379> SPOP color1
"red"
SRANDMEMBER key [count]
返回集合中一个或多个随机数
127.0.0.1:6379> SRANDMEMBER color2 2
1) "red"
2) "orange"
SREM key member1 [member2]
移除集合中一个或多个成员
127.0.0.1:6379> SMEMBERS color2
1) "orange"
2) "red"
3) "yellow"
4) "blue"
127.0.0.1:6379> SREM color2 red blue
(integer) 2
127.0.0.1:6379> SMEMBERS color2
1) "orange"
2) "yellow"
SUNION key1 [key2]
返回所有给定集合的并集
127.0.0.1:6379> SMEMBERS color1
1) "green"
127.0.0.1:6379> SMEMBERS color2
1) "orange"
2) "yellow"
127.0.0.1:6379> SUNION color1 color2
1) "orange"
2) "yellow"
3) "green"
Redis 有序集合命令
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
127.0.0.1:6379> ZADD color 0 red 0 blue 0 green
(integer) 3
ZCARD key
获取有序集合的成员数
127.0.0.1:6379> ZCARD color
(integer) 3
ZCOUNT key min max
计算在有序集合中指定区间分数的成员数
127.0.0.1:6379> ZCOUNT color 0 2
(integer) 3
ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment
127.0.0.1:6379> ZINCRBY color 1 red
"1"
ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量
127.0.0.1:6379> ZLEXCOUNT color - +
(integer) 3
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合成指定区间内的成员
127.0.0.1:6379> ZRANGE color 0 3
1) "blue"
2) "green"
3) "red"
127.0.0.1:6379> ZRANGE color 0 3 withscores
1) "blue"
2) "0"
3) "green"
4) "0"
5) "red"
6) "0"
ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员
127.0.0.1:6379> ZRANGEBYLEX color - + limit 0 2
1) "blue"
2) "green"
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员
127.0.0.1:6379> ZRANGEBYSCORE color 0 7
1) "blue"
2) "green"
3) "red"
127.0.0.1:6379> ZRANGEBYSCORE color 0 7 withscores
1) "blue"
2) "0"
3) "green"
4) "0"
5) "red"
6) "0"
127.0.0.1:6379> ZRANGEBYSCORE color 0 7 withscores limit 0 2
1) "blue"
2) "0"
3) "green"
4) "0"
ZRANK key member
返回有序集合中指定成员的索引
127.0.0.1:6379> ZRANK color green
(integer) 1
ZREM key member [member …]
移除有序集合中的一个或多个成员
127.0.0.1:6379> ZREM color blue
(integer) 1
ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员
127.0.0.1:6379> ZREMRANGEBYLEX color - +
(integer) 2
ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员
127.0.0.1:6379> ZREMRANGEBYRANK color 1 3
(integer) 0
ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员
127.0.0.1:6379> ZREMRANGEBYSCORE color 0 2
(integer) 3
ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高到底
127.0.0.1:6379> ZREVRANGE color 0 2
1) "red"
2) "green"
3) "blue"
ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分数区间内的成员,分数从高到低排序
ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
127.0.0.1:6379> ZREVRANK color blue
(integer) 2
ZSCORE key member
返回有序集中,成员的分数值
127.0.0.1:6379> ZSCORE color blue
"0"
ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)
127.0.0.1:6379> ZSCAN color 0
1) "0"
2) 1) "blue"
2) "0"
3) "green"
4) "0"
5) "red"
6) "1"
127.0.0.1:6379> ZSCAN color 0 Match b*
1) "0"
2) 1) "blue"
2) "0"
127.0.0.1:6379> ZSCAN color 0 Match b* Count 1
1) "0"
2) 1) "blue"
2) "0"