Redis常见命令总结

一、Key命令

命令描述
type返回 key 所储存的值的类型。
pexpireat设置 key 的过期时间亿以毫秒计。
rename修改 key 的名称
persist移除 key 的过期时间,key 将持久保持。
move将当前数据库的 key 移动到给定的数据库 db 当中。
randomkey从当前数据库中随机返回一个 key 。
dump序列化给定 key ,并返回被序列化的值。
ttl以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
expireseconds 为给定 key 设置过期时间。
del该命令用于在 key 存在是删除 key。
pttl以毫秒为单位返回 key 的剩余的过期时间。
renamenx仅当 newkey 不存在时,将 key 改名为 newkey 。
exists检查给定 key 是否存在。
expireatexpireat 的作用和 expire 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
keys查找所有符合给定模式( pattern)的 key 。

1.1 keys *

# 返回所有 key,可以使用通配符来查询。
keys *

# 查看以 hel 开头的 key
keys hel*

# 查看 ph + 一个字符
keys ph?

注意:一般不要使用 keys 这个操作,Redis 是单线程,执行之后如果耗时过久会造成阻塞。

1.2 exists key

查看某个 key 是否存在,存在则返回 1,不存在返回 0

exists key
# 1

1.3 del key [key …]

删除一个或多个 key:

# 删除 key
del key1

# 删除 key1、key2
del key1 key2

成功删除 n 个 key,返回整数 n

1.4 expire key n

给 key 设置 n 秒后过期

假设给 key 为 hello 的数据设置 3 秒后过期:

expire hello 3

三秒后,我们尝试获取 hello 数据,就会发现返回空了。

# after 3 seconds ...
get hello

1.5 ttl key

查看 key 剩余过期时间,假设我们前面设置的过期时间很长,在数据未过期的时候使用这个命令:

ttl hello

就会返回 hello 剩余的过期时间。

1.6 persist key

在 key 还未过期的时候,使用这个命令,可以去除 key 上的过期时间:

persist hello

1.7 type key

返回 key 的类型,后面我们会介绍 Redis 的几种基本数据类型。

Redis 几种数据类型是:字符串、哈希、列表、集合、有序集合

二、字符串命令

在 Redis 中存储字符串,就是一个 key-value 的结构。

其中,value 可以是字符串,也可以是数字,对于数字 Redis 会自动识别,且可以使用一些字符串没有的操作,比如增加、减少等。

但在设置和存储的过程中,字符串和数字都是一样的使用方式。

命令描述
setnx只有在 key 不存在时设置 key 的值。
getrange返回 key 中字符串值的子字符
mset同时设置一个或多个 key-value 对。
mget获取所有(一个或多个)给定 key 的值。
setex将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
psetex这个命令和 setex 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
set设置指定 key 的值
get获取指定 key 的值。
getbit对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
setbit对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
decr将 key 中储存的数字值减一。
decrbykey 所储存的值减去给定的减量值(decrement) 。
strlen返回 key 所储存的字符串值的长度。
msetnx同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
incrby将 key 所储存的值加上给定的增量值(increment) 。
incrbyfloat将 key 所储存的值加上给定的浮点增量值(increment) 。
setrange用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
append如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
getset将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
incr将 key 中储存的数字值增一。

2.1 字符串的增删改查

字符串的增删改查操作是 get、set、del。其中 set 操作可以是增加数据,也可以是更新数据。

接下来我们对 key 为 hello 的数据进行操作:

# 增加 hello 的值为 world
set hello world

# 获取 hello 的值
get hello

# 更新 hello 的值为 "new world"
set hello "new world"

# 删除 hello
del hello

2.2 set 操作数据的几种用法

前面介绍的 set,如果存在则更新,不存在则增加,如果我们想要实现存在 key 就更新,以及不存在 key 则创建的逻辑,可以如此操作:

不存在则设置,存在则不操作
setnx 可以实现我们这个逻辑:

if not exists:
    insert
else:
    pass

比如我们执行:

del a
setnx a 1
setnx a 2

上面的操作之后,尽管我们的 setnx 执行了两遍,但前面已经设置过了 a 的值,所以第二个操作不会执行了。

存在则更新,不存在则不操作
set key value xx,注意,xx 是固定用法,比如我们想 a 的值如果存在于系统,则更新 a 的值为 2,不存在的话则不操作,可以如下:

set a 2 xx

那么如果系统之前没有 a 的值存在,那么执行这个命令之后,系统也不会有 a 这个 key。

2.3 整数的操作

对于字符串类型的数据,可以存储字符串也可以存储整数,对于整数,有一些额外的操作,比如自增1,自减1,自增n,自减n。

incr 自增 1

# 为 a 初始化设置值为 3
set a 3

# 进行自增 1 的操作
incr a

decr 自减 1

decr a

注意:如果 incr 和 decr 的 key 之前在 Redis 中不存在,那么系统会默认先 set key 0,然后进行自增自减的操作

incrby 自增 n

# 对 a 进行自增 5
incrby a 5

decrby 自减 n

# 对 a 进行自减 5
decrby a 5

2.4 小数的操作

对应于整数,小数也可以进行自增的操作

incrbyfloat 自增某个小数

incrbyfloat a 3.4

但是,并没有相应的小数数自减操作,但是我们可以通过在 value 加负号来表示自减操作:

incrbyfloat a -3.4

2.5 字符串的范围操作

对于一个字符串,比如我们设置:

set a "this is a string"

getrange
我们通过 get 可以获取 a 的全量字符串,也可以通过 getrange 下标来指定范围获取:

getrange a 1 3

表示获取从 1 开始到 3 之间的字符串,下标从 0 开始。

setrange
也可以通过下标设置字符串内容:

setrange a 5 xxxx 

上面的操作表示将 a 字符串在第 6 个的位置的字符串替换成 xxxx,那么 a 的结果应该是:

get a 
# "this xxxx string"

2.6字符串的字符操作

getset
先获取 key 的 value,然后对 key 设置新的 value:

getset a "new value"

append
将 value 追加到 key 的旧 value 的末尾:

set a "abc"
append a "def"
get a
# "abcdef"

strlen
获取字符串的长度:

strlen a
# 6

2.7 批量操作

mget
批量获取 key 列表的值,比如我们有 a,b,c 三个 key,我们想同时返回三个 key 的数据:

mget a b c
# 以下是返回:
#1) "abcdef"
#2) "1"
#3) "world"

mset
批量设置 key 列表的值,一个 key 后跟一个 value,比如我们设置三个 key,a、b、c 的 value 分别是 1,2,3:

mset a "1" b "2" c "3"

三、哈希命令

因为 Redis 存储的数据类型是一个 key-value 的结构,而哈希本身的数据类型也是一个 key-value 的类型,所以哈希数据相当于是一个嵌套的类型,这个地方需要了解清楚它的概念。

在下面的例子中,我们将 Redis 中的 key 称为 key,而哈希中的 key-value 中对应的 key 称为 field 以示区分。

哈希命令的前面都带一个 h,这是哈希命令的一个特点。

接下来,我们以一个例子来介绍哈希命令,我们想要存入一个这样的数据,key 为 student,它有 name,number,rank 三个 field 属性,大致如下:

{
    "student":
        {
            "name": "Hunter",
            "number": "00001",
            "rank": 1
        }
}
命令描述
hmset同时将多个 field-value (域-值)对设置到哈希表 key 中。
hmget获取所有给定字段的值
hset将哈希表 key 中的字段 field 的值设为 value 。
hgetall获取在哈希表中指定 key 的所有字段和值
hget获取存储在哈希表中指定字段的值/td>
hexists查看哈希表 key 中,指定的字段是否存在。
hincrby为哈希表 key 中的指定字段的整数值加上增量 increment 。
hlen获取哈希表中字段的数量
hdel删除一个或多个哈希表字段
hvals获取哈希表中所有值
hincrbyfloat为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
hkeys获取所有哈希表中的字段
hsetnx只有在字段 field 不存在时,设置哈希表字段的值。

3.1 哈希数据的增删改查

这里我们要设置 student 的几个属性值,创建和更新都用 heset:

hset student name "Hunter"
hset student number "00001"
hset student rank 1

使用 hget 查询数据:

hget student name

使用 hdel 删除数据:

hdel student name

如果是直接删除 student 这个 key 呢,直接使用 del:

del student

3.2 hexists 和 hlen

hexists 是用于查看 key 下某个 field 属性是否存在,假设前面的 student 数据没有删除,我们这样使用:

hexists student name
# 1

返回的结果是 1 则表示 name 这个 field 存在,不存在的话会返回 0

hlen 用于查看 key 下存在多少个 field 属性:

hlen student

3.3 hmget 和 hmset

批量查看和设置哈希数据下的属性。

比如我们想一次性查看 student 下的 name 和 number 属性的值,可以使用 hmget:

hmget student name number
#1) "Hunter"
#2) "00001"

也可以使用 hmset 来批量设置:

hmset student name "Jack" rank "2"

3.4 查看某个 key 下所有数据

如果我们想查看某个 key 下所有的 field 属性,可以使用 hkeys:

hkeys student
#1) "name"
#2) "number"
#3) "rank

返回的是所有 field 属性

如果我们想查看某个 key 下所有的 field 属性下的值,可以使用 hvals

hvals student
#1) "Jack"
#2) "00001"
#3) "2"

如果我们想查看某个 key 下所有的 field 属性和对应的值,可以使用 hgetall:

hgetall student
#1) "name"
#2) "Jack"
#3) "number"
#4) "00001"
#5) "rank"
#6) "2"

会将 field-name 依次返回。

四、列表命令

对于 Redis 中的列表数据,一般是以 l 开头,为了方便记忆,可以理解成是 List,或者是 Left 中的 L,为什么要提 Left 以及说一般是以 l 开头呢,因为有一些操作是 r 开头,这个表示是对列表的右边进行数据操作。

命令描述
lindex通过索引获取列表中的元素
rpush在列表中添加一个或多个值
lrange获取列表指定范围内的元素
rpoplpush移除列表的最后一个元素,并将该元素添加到另一个列表并返回
blpop移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
brpop移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
brpoplpush从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
lrem移除列表元素
llen获取列表长度
ltrim对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
lpop移出并获取列表的第一个元素
lpushx将一个或多个值插入到已存在的列表头部
linsert在列表的元素前或者后插入元素
rpop移除并获取列表最后一个元素
lset通过索引设置列表元素的值
lpush将一个或多个值插入到列表头部
rpushx为已存在的列表添加值

4.1 列表数据的增加

lpush
从列表左边添加一个或多个数据:

lpush rank 1
lpush rank 2 8

rpush
从列表右边添加一个或多个数据:

rpush rank 3
rpush rank 4 5

linsert
在指定的 value 前或者后面插入一个 new_value,比如我们在 2 前插入 1.5

linsert rank before 2 1.5

或者在 2后面插入 2.5:

linsert rank after 2 2.5

如果列表中有重复数据怎么办?

系统会从左边开始寻找,找到的第一个目标数据的位置就停止查找,然后插入。

4.2 列表数据的查看

lrange
通过下标查看数据范围,比如我们想查看第二个到第五个之间的数据:

lrange rank 1 4

如果想查看全部列表数据:

lrange rank 0 -1

lindex
通过下标索引获取数据,比如想查看第三个数据:

lindex rank 2

llen
获取列表长度:

llen rank

4.3 列表数据的删除

lpop
从列表左边弹出一个数据:

lpop rank

rpop
从列表右边弹出一个数据:

rpop rank

lrem
这是一个遍历删除的操作,它的命令示例如下:

lrem key count value

当 count 大于 0 时,表示从左到右删除最多 count 个值为 value 的数据 当 count 小于 0 时,表示从右到左删除最多 count 个值为 value 的数据 当 count 等于 0 时,表示删除列表中全部值为 value 的数据

比如我们设置 rem_list 的值如下:

lpush rem_list 1 3 3 5 3 8 5

接下来我们从左到右删除两个 value 等于 3 的数据:

lrem rem_list 2 3

执行之后,rem_list 中应该还剩一个 3

如果我们想删除 rem_list 中全部 value 等于 5 的数据:

lrem rem_list 0 5

ltrim
按照索引范围修剪列表:

ltrim key start end

比如我们只保留从最开始到第四个元素的数据:

rpush trim_list 0 1 2 3 4
ltrim trim_list 0 3

4.4 列表数据的修改

lset
修改某个索引的数据,比如修改第三个位子的数据:

lset a 2 8

五、集合命令

集合中的数据是无序的,无重复的。

集合相关的命令都是以 s 开头的

命令描述
sunion返回所有给定集合的并集
scard获取集合的成员数
srandmember返回集合中一个或多个随机数
smembers返回集合中的所有成员
sinter返回给定所有集合的交集
srem移除集合中一个或多个成员
smove将 member 元素从 source 集合移动到 destination 集合
sadd向集合添加一个或多个成员
sismember判断 member 元素是否是集合 key 的成员
sdiffstore返回给定所有集合的差集并存储在 destination 中
sdiff返回给定所有集合的差集
sscan迭代集合中的元素
sinterstore返回给定所有集合的交集并存储在 destination 中
sunionstore所有给定集合的并集存储在 destination 集合中
spop移除并返回集合中的一个随机元素

5.1 集合的增删改查

sadd
向集合中添加数据,可添加单个或多个元素

del a
sadd a 1 
sadd a 2 3 4

smembers
查看集合中所有元素:

smembers a

sismember
查看元素是否在集合中,这个命令就是 is member:

sismember a 2

scard
获取集合中元素的总数:

scard a

srandmember
使用命令示例为 srandmember key [count]

表示从 key 中获取 count 个元素,如果不定义 count,则默认取出一个元素

# 取出一个元素
srandmember a

# 取出两个元素
srandmember a 2

注意:这个命令为获取元素,但是并非从集合中弹出,而是单纯的获取,原集合不会变

srem
从集合中弹出一个或多个指定元素:

# 从集合中弹出 2 4 8 三个元素
srem a 2 4 8

spop
从集合中弹出一个或多个元素,这个命令执行之后集合中就会将该元素剔除:

spop a

# 从集合中弹出两个元素
spop a 2

5.2 集合间操作

sdiff
求取两个集合的差值,比如两个集合为 a 和 b,结果即为 a - b:

sadd a 1 2 3
sadd b 3 4 5

sdiff a b
# 1 2

sinter
求取两个集合交集:

sinter a b
# 3

sunion
两个集合并集:

sunion a b
# 1 2 3 4 5

六、有序集合命令

有序集合兼具了列表和集合的特点,它是无重复的,但是是有序的

我们通过给元素添加额外的分数属性来实现元素的有序操作。

命令描述
zrevrank返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
zlexcount在有序集合中计算指定字典区间内成员数量
zunionstore计算给定的一个或多个有序集的并集,并存储在新的 key 中
zremrangebyrank移除有序集合中给定的排名区间的所有成员
zcard获取有序集合的成员数
zrem移除有序集合中的一个或多个成员
zinterstore计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
zrank返回有序集合中指定成员的索引
zincrby有序集合中对指定成员的分数加上增量 increment
zrangebyscore通过分数返回有序集合指定区间内的成员
zrangebylex通过字典区间返回有序集合的成员
zscore返回有序集中,成员的分数值
zremrangebyscore移除有序集合中给定的分数区间的所有成员
zscan迭代有序集合中的元素(包括元素成员和元素分值)
zrevrangebyscore返回有序集中指定分数区间内的成员,分数从高到低排序
zremrangebylex移除有序集合中给定的字典区间的所有成员
zrevrange返回有序集中指定区间内的成员,通过索引,分数从高到底
zrange通过索引区间返回有序集合成指定区间内的成员
zcount计算在有序集合中指定区间分数的成员数
zadd向有序集合添加一个或多个成员,或者更新已存在成员的分数

6.1 元素的增加

zadd
命令示例为:

zadd key score element

假设我们要实现 Python、Java、Golang 三个元素的排名分别在 1、2、3,可以这样操作:

del a
zadd a 2 Java
zadd a 1 Python 3 Golang

6.2 元素的查看

zrange
查看元素指定索引范围元素,可以通过 WITHSCORES 参数决定是否返回对应的排名分值:

zrange a 0 2
#1) "Python"
#2) "Java"
#3) "Golang"

返回排名 score:

zrange a 0 2 WITHSCORES
#1) "Python"
#2) "1"
#3) "Java"
#4) "2"
#5) "Golang"
#6) "3"

zrangebyscore
通过分数区间返回元素:

zrangebyscore a 1 

返回有序集合中分数在 1 和 3 之间的元素

zscore
返回指定元素的分数:

zscore a Python

zrank
返回指定元素的排名次序:

zrank a Python

zcard
返回元素的总个数:

zcard a

zcount
返回指定分数区间元素个数,比如返回分数在 1 到 3 之间,包括 1 和 3 的元素个数:

zcount a 1 3

6.3 元素分数操作

zincrby
指定元素增加/减少分数
比如指定元素为 Python 的分数 +1

zincrby a 1 Python 

6.4 删除操作

zrem
删除某个元素:

zrem a Java

zremrangebyrank
删除指定排名內的元素

前面我们通过 zrank 返回指定元素的排名,这里是删除操作:

zremrangebyrank a 1 3

zremrangebyscore
删除指定分数段内的元素

zremrangebyscore a 1 3

七、其他命令

7.1 连接命令

命令描述
echo打印字符串
select切换到指定的数据库
ping查看服务是否运行
quit关闭当前连接
auth验证密码是否正确

7.2 服务器命令

命令描述
client pause在指定时间内终止运行来自客户端的命令
debug object获取 key 的调试信息
flushdb删除当前数据库的所有key
save异步保存数据到硬盘
showlog管理 redis 的慢日志
lastsave返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示
config get获取指定配置参数的值
command获取 Redis 命令详情数组
slaveof将当前服务器转变为指定服务器的从属服务器(slave server)
debug segfault让 Redis 服务崩溃
flushall删除所有数据库的所有key
dbsize返回当前数据库的 key 的数量
bgrewriteaof异步执行一个 AOF(AppendOnly File) 文件重写操作
cluster slots获取集群节点的映射数组
config cet修改 redis 配置参数,无需重启
command info获取指定 Redis 命令描述的数组
shutdown异步保存数据到硬盘,并关闭服务器
sync用于复制功能(replication)的内部命令
client kill关闭客户端连接
role返回主从实例所属的角色
monitor实时打印出 Redis 服务器接收到的命令,调试用
command getkeys获取给定命令的所有键
client getname获取连接的名称
config resetstat重置 INFO 命令中的某些统计数据
command count获取 Redis 命令总数
time返回当前服务器时间
info获取 Redis 服务器的各种信息和统计数值
config rewrite对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写
client list获取连接到服务器的客户端连接列表
client setname设置当前连接的名称
bgsave在后台异步保存当前数据库的数据到磁盘

7.3 脚本命令

命令描述
script kill杀死当前正在运行的 Lua 脚本。
script load将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。
eval执行 Lua 脚本。
evalsha执行 Lua 脚本。
script exists查看指定的脚本是否已经被保存在缓存当中。
script flush从脚本缓存中移除所有脚本。

7.4 事务命令

命令描述
exec执行所有事务块内的命令。
watch监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
dscard取消事务,放弃执行事务块内的所有命令。
unwatch取消 WATCH 命令对所有 key 的监视。
multi标记一个事务块的开始。

7.5 HyperLogLog命令

命令描述
pgmerge将多个 HyperLogLog 合并为一个 HyperLogLog
pfadd添加指定元素到 HyperLogLog 中。
pfcount返回给定 HyperLogLog 的基数估算值。

7.6 发布订阅命令

命令描述
unsubscribe指退订给定的频道。
subscribe订阅给定的一个或多个频道的信息。
pubsub查看订阅与发布系统状态。
punsubscribe退订所有给定模式的频道。
publish将信息发送到指定的频道。
psubscribe订阅一个或多个符合给定模式的频道。

7.7 地理位置(geo)命令

命令描述
GEOHASH返回一个或多个位置元素的 Geohash 表示
GEOPOS从key里返回所有给定位置元素的位置(经度和纬度)
GEODIST返回两个给定位置之间的距离
GEORADIUS以给定的经纬度为中心, 找出某一半径内的元素
GEOADD将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
GEORADIUSBYMEMBER找出位于指定范围内的元素,中心点是由给定的位置元素决定
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上生花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值