共计 5681 个字符,预计需要花费 15 分钟才能阅读完成。
本文首发于公众号:Hunter 后端
原文链:Redis 根底命令汇总,看这篇就够了
本篇笔记将汇总 Redis 根底命令,包含几个罕用的通用命令,和各个类型的数据的操作,包含字符串、哈希、列表、汇合、有序汇合等在内的基本操作。
以下是本篇笔记目录:
- 通用命令
- 字符串命令
- 哈希命令
- 列表命令
- 汇合命令
- 有序汇合命令
1、通用命令
keys *
返回所有 key,能够应用通配符来查问。
# 查看所有 key
keys *
# 查看以 hel 结尾的 key
keys hel*
# 查看 ph + 一个字符
keys ph?
留神:个别不要应用 keys 这个操作,Redis 是单线程,执行之后如果耗时过久会造成阻塞。
dbsize
统计以后 db key 的总数:
select 1
dbsize
exists key
查看某个 key 是否存在,存在则返回 1,不存在返回 0
exists key
# 1
del key [key …]
删除一个或多个 key:
# 删除 key
del key1
# 删除 key1、key2
del key1 key2
胜利删除 n 个 key,返回整数 n
expire key n
给 key 设置 n 秒后过期
假如给 key 为 hello 的数据设置 3 秒后过期:
expire hello 3
三秒后,咱们尝试获取 hello 数据,就会发现返回空了。
# after 3 seconds ...
get hello
ttl key
查看 key 残余过期工夫,假如咱们后面设置的过期工夫很长,在数据未过期的时候应用这个命令:
ttl hello
就会返回 hello 残余的过期工夫。
persist key
在 key 还未过期的时候,应用这个命令,能够去除 key 上的过期工夫:
persist hello
type key
返回 key 的类型,前面咱们会介绍 Redis 的几种根本数据类型。
Redis 几种数据类型是:字符串、哈希、列表、汇合、有序汇合
2、字符串命令
在 Redis 中存储字符串,就是一个 key-value 的构造。
其中,value 能够是字符串,也能够是数字,对于数字 Redis 会自动识别,且能够应用一些字符串没有的操作,比方减少、缩小等。
但在设置和存储的过程中,字符串和数字都是一样的应用形式。
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.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。
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
4. 小数的操作
对应于整数,小数也能够进行自增的操作
incrbyfloat 自增某个小数
incrbyfloat a 3.4
然而,并没有相应的小数数自减操作,然而咱们能够通过在 value 加负号来示意自减操作:
incrbyfloat a -3.4
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"
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
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"
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
}
}
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
2. hexists 和 hlen
hexists 是用于查看 key 下某个 field 属性是否存在,假如后面的 student 数据没有删除,咱们这样应用:
hexists student name
# 1
返回的后果是 1 则示意 name 这个 field 存在,不存在的话会返回 0
hlen
用于查看 key 下存在多少个 field 属性:
hlen student
3. hmget 和 hmset
批量查看和设置哈希数据下的属性。
比方咱们想一次性查看 student 下的 name 和 number 属性的值,能够应用 hmget
:
hmget student name number
#1) "Hunter"
#2) "00001"
也能够应用 hmset
来批量设置:
hmset student name "Jack" rank "2"
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 顺次返回。
4、列表命令
对于 Redis 中的列表数据,个别是以 l
结尾,为了不便记忆,能够了解成是 List,或者是 Left 中的 L,为什么要提 Left 以及说个别是以 l
结尾呢,因为有一些操作是 r
结尾,这个示意是对列表的左边进行数据操作。
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
如果列表中有反复数据怎么办?
零碎会从右边开始寻找,找到的第一个指标数据的地位就进行查找,而后插入。
2. 列表数据的查看
lrange
通过下标查看数据范畴,比方咱们想查看第二个到第五个之间的数据:
lrange rank 1 4
如果想查看全副列表数据:
lrange rank 0 -1
lindex
通过下标索引获取数据,比方想查看第三个数据:
lindex rank 2
llen
获取列表长度:
llen rank
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. 列表数据的批改
lset
批改某个索引的数据,比方批改第三个位子的数据:
lset a 2 8
5、汇合命令
汇合中的数据是无序的,无反复的。
汇合相干的命令都是以 s
结尾的
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
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
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
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 3
返回有序汇合中分数在 1 和 3 之间的元素
zscore
返回指定元素的分数:
zscore a Python
zrank
返回指定元素的排名秩序:
zrank a Python
zcard
返回元素的总个数:
zcard a
zcount
返回指定分数区间元素个数,比方返回分数在 1 到 3 之间,包含 1 和 3 的元素个数:
zcount a 1 3
3. 元素分数操作
zincrby
指定元素减少 / 缩小分数
比方指定元素为 Python 的分数 +1
zincrby a 1 Python
4. 删除操作
zrem
删除某个元素:
zrem a Java
zremrangebyrank
删除指定排名內的元素
后面咱们通过 zrank 返回指定元素的排名,这里是删除操作:
zremrangebyrank a 1 3
zremrangebyscore
删除指定分数段内的元素
zremrangebyscore a 1 3
如果想获取更多相干文章,可扫码关注浏览: