前言
本文包含 Redis 中罕用的一些命令,包含针对所有的键相干的命令,以及 5 种罕用数据类型:字符串、哈希、列表、汇合以及有序汇合的一些命令。
鉴于集体程度无限,文章中若有不对之处,烦请大家留言斧正。
键相干
查看所有的键
keys 会遍历所有的键,它的工夫复杂度是 O(n),因而当 Redis 保留了大量的键时,这个命令会十分耗时,因而生产环境下禁止应用该命令。
keys *
// 初始化数据
study:0>set zhangsan 20
"OK"
study:0>get zhangsan
"20"
study:0>set lisi 25
"OK"
study:0>set wangwu 30
"OK"
// 应用
study:0>keys *
1) "lisi"
2) "zhangsan"
3) "wangwu"
keys 命令也反对含糊匹配,比方咱们想获取所有以 zhang 结尾的键,能够这样写:
keys zhang*
study:0>keys zhang*
1) "zhangsan"
获取键的总数
dbsize
study:0>dbsize
"3"
dbsize 命令在计算键总数时不会遍历所有的键,而是间接获取 Redis 内置的键总数变量,所以 dbsize 命令的工夫复杂度是 O(1)
查看键是否存在
exists key
这个命令返回 1 或者 0,1 示意键存在,0 示意键不存在
study:0>exists zhangsan
"1"
study:0>exists dalao
"0"
删除键
del key [key2, key3....]
这个命令返回删除胜利的键总数,如果删除的键都不存在,则返回 0
study:0>del zhangsan
"1"
study:0>del dalao
"0"
设置键的过期工夫
Redis 反对给键设置过期工夫,当键过期后,该键会在 Redis 中被主动删除。
// 初始化键
study:0>set hello world
"OK"
// 给键设置 50 秒的过期工夫
study:0>expire hello 50
"1"
设置过期工夫之后,咱们也能够通过 ttl 命令返回键的残余过期工夫,ttl 命令有 3 种返回值:
- 大于等于 0 的整数:键的残余过期工夫
- - 1 示意键没有设置过期工夫
- - 2 示意键不存在(有可能是最开始就不存在,有可能是键的过期工夫到了被主动删除了)
study:0>ttl hello
"10"
study:0>ttl hello
"3"
study:0>ttl hello
"-2"
键的数据类型
type key
study:0>set hello world
"OK"
study:0>type hello
"string"
若 key 的类型是字符串类型, 则返回 string。若 key 的类型是列表类型,则返回 list。
若 key 不存在,则返回 none
study:0>type abc
"none"
字符串类型
设置值
set key value [ex seconds] [px milliseconds] [nx|xx]
study:0>set me water76016
"OK"
set 命令的选项阐明
- ex seconds:为键设置秒级过期工夫
- px milliseconds:为键设置毫秒级过期工夫
- nx:键必须不存在能力设置胜利,用于新增
- xx:键必须存在能力设置胜利,用于更新
其余 set 命令
Redis 提供了 setnx 和 setex 两个命令,作用和 ex 和 nx 参数是一样的。
// 命令格局
setex key seconds value
setnx key value
//setex 应用范例(设置键为 hello,20 秒的过期工夫)study:0>setex hello 20 world
"OK"
//setnx 应用范例(第一次键不存在设置胜利,第二次键曾经存在设置失败)study:0>setnx me water76016
"1"
study:0>setnx me water76016
"0"
获取值
get key
如果获取的键不存在,则会返回 null(空)
study:0>get me
"water76016"
study:0>get abcd
null
批量设置值
mset key value [key value ...]
//mset 应用范例
study:0>mset one 1, two 2, three 3
"OK"
批量获取值
mget key1 [key2 key3]
//mget 应用范例
study:0>mget one two three
1) "1,"
2) "2,"
3) "3"
Redis 每次执行时两头须要消耗网络工夫,应用批量操作有利用缩小网络工夫的损耗,但每次放入的批量操作的 key 不是无节制的,一次太多有可能导致 Redis 短时间阻塞。
计数
//key 值自增 1
incr key
//key 值自减 1
decr key
// 自增指定数字
incrby key increment
// 自减指定数字
incrby key decrment
上面以 incr 命令进行具体阐明:
incr 命令能够对值进行自增,应用该命令存在 3 种状况:
- 值如果不是整数,返回谬误
- 值是整数,返回自增后的后果
- 键不存在,认为该键的初始化为 0,会新增一个键进去,并返回 1
// 值不是整数示例
study:0>set hello world
"OK"
study:0>incr hello
"ERR value is not an integer or out of range"
// 值是整数示例
study:0>set me 20
"OK"
study:0>incr me
"21"
// 键不存在示例
study:0>get you
null
study:0>incr you
"1"
study:0>get you
"1"
哈希类型
设置值
hset key field value
如果设置胜利,会返回 1。设置失败会返回 0
// 应用示例
study:0>hset user:1 one zhangsan
"1"
获取值
hget key field
// 应用示例
study:0>hset user:1 one zhangsan
"1"
study:0>hget user:1 one
"zhangsan"
删除 field
hdel 命令反对同时删除多个 field,返回的后果是删除胜利的 field 的个数
hdel key field [field ...]
// 应用示例
study:0>hdel user:1 one
"1"
批量设置和获取值
// 批量设置值
hmset key field value [field value...]
// 批量获取值
hmget key field [field2...]
// 应用示例
study:0>hmset user:2 id 2 name zhangsan age 20
"OK"
study:0>hmget user:2 id name age
1) "2"
2) "zhangsan"
3) "20"
判断 field 是否存在
hexists key field
// 应用示例
study:0>hexists user:2 id
"1"
study:0>hexists user:2 school
"0"
获取所有的 field
hkeys key
// 应用示例
study:0>hkeys user:2
1) "id"
2) "name"
3) "age"
获取所有的 value
hvals key
// 应用示例
study:0>hvals user:2
1) "2"
2) "zhangsan"
3) "20"
获取所有的 field-value
注意事项:如果获取的值较多,有可能会阻塞 Redis。如果获取局部值,能够应用 hmget 命令。如果肯定要获取全副的键值,能够应用 hscan 命令,该命令会渐进式地获取所有的键值,并不是一次全副获取。
hgetall key
// 应用示例
study:0>hgetall user:2
1) "id"
2) "2"
3) "name"
4) "zhangsan"
5) "age"
6) "20"
列表类型
Redis 中的列表类型有两个特点,别离是:
- 列表中的元素是有序的
- 列表中的元素是能够反复的
增加元素
增加元素增加胜利后,返回的是以后 List 中元素的总数
从左边增加元素
rpush key value [value...]
// 增加元素示例
study:0>rpush my_list 1 2 3
"3"
从右边增加元素
lpush key value[value...]
// 增加元素示例
study:0>lpush my_list 1 2 3
"6"
查找
获取指定范畴内的元素
lrange key start end
留神,索引的下标从左到右别离是:0 到 N -1,然而从右到左是 - 1 到 -N。
// 应用范例
study:0>lrange my_list 0 5
1) "3"
2) "2"
3) "1"
4) "1"
5) "2"
6) "3"
获取指定索引下标的元素
lindex key index
// 应用示例
study:0>lindex my_list 3
"1"
获取列表长度
llen key
// 应用示例
study:0>llen my_list
"6"
删除元素
从列表左侧弹出元素
lpop key
// 应用示例
study:0>lpop my_list
"3"
从列表右侧弹出元素
rpop key
// 应用示例
study:0>rpop my_list
"3"
删除指定元素
lrem key count value
lrem 命令会从列表中找到等于 value 的元素进行删除,依据 count 的不同,可能存在以下 3 种状况:
- count > 0。从左到右,删除最多 count 个元素
- count < 0。从右到左,删除最多 count 个元素
- count = 0。删除所有等于 value 的元素
// 应用示例
study:0>lpush temp_list 3 3 3 3
"4"
study:0>lrem temp_list 1 3
"1"
study:0>lrem temp_list -1 3
"1"
study:0>lrem temp_list 0 3
保留指定索引范畴的元素列表
ltrim key start end
列表的下标从 0 开始,这个命令会保留下标从 start 到 end 的所有元素。
// 应用示例
study:0>lpush temp_list 1 2 3 4 5
"5"
study:0>ltrim temp_list 2 3
"OK"
批改元素
lset key index newValue
// 应用示例
// 批改列表的第一个元素为 10
study:0>lset temp_list 0 10
"OK"
// 查看列表的第一个元素是否为 10,看是否批改胜利
study:0>lindex temp_list 0
"10"
// 设置的索引超过列表范畴会报错
study:0>lset temp_list 10 100
"ERR index out of range"
阻塞操作
blpop key [key...] timeout
brpop key [key...] timeout
key [key…] 示意能够同时传入多个键进行解决
timeout 示意阻塞的超时工夫。
blpop 是从左弹出元素,brpop 是从右弹出元素,两个除了弹出方向不同,其余基本相同。上面次要以 brpop 进行阐明:
- 当列表为空的时候,退出 timeout=3, 那么客户端会期待 3 秒后进行返回。如果 timeout=0。那么客户端会始终期待上来。
- 当列表不为空的时候,会立刻返回相应的值
- 如果是多个键,那么 brpop 会从左到右遍历键,一旦某个键有元素,则立刻返回
- 如果是多个客户端同时执行雷同的阻塞命令,那么最先执行的那个客户端,能够获取到对应的值
汇合类型
汇合也是用来保留多个元素的,但其中的元素是无序的,并且不可能反复。
增加元素
sadd key element[element...]
返回后果是增加胜利的元素个数
// 应用示例
study:0>sadd temp_set 1 2 3 4 5
"5"
删除元素
srem key element [element...]
返回后果为胜利删除元素的个数
// 应用示例
study:0>sadd temp_set 1 2 3 4 5
"5"
study:0>srem temp_set 2 3
"2"
计算元素个数
scard key
// 应用示例
study:0>scard temp_set
"3"
判断元素是否在汇合中
sismember key element
// 应用示例
study:0>sismember temp_set 3
"0"
study:0>sismember temp_set 1
"1"
随机返回元素
srandmember key [count]
srandmember 命令会随机从汇合中返回 count 个元素,如果 count 不填写,则默认为 1
// 应用示例
study:0>srandmember temp_set 2
1) "5"
2) "1"
study:0>srandmember temp_set
"1"
随机弹出元素
spop key
spop 会随机从汇合中弹出一个元素,并把该元素从汇合中删除
// 应用示例
study:0>spop temp_set
"1"
获取汇合所有元素
smembers key
study:0>smembers temp_set
1) "4"
2) "5"
求多个汇合的交加
sinter key [key2 key3...]
交加:顾名思义,就是每个汇合所共有的元素。如果入参是 2 个汇合,那么就是 2 个汇合独特领有的元素。如果入参是 3 个汇合,那么入参就是 3 个汇合独特领有的元素
// 应用示例
// 汇合 one 中具备元素 1,one_two 中具备元素 1 和 2,three 中具备元素 3
study:0>sadd one 1
"1"
study:0>sadd one_two 1 2
"2"
study:0>sadd three 3
"1"
// 取交加(one one_two three 三个汇合没有独特元素,返回空)study:0>sinter one one_two three
// 取交加(one two 中具备独特元素,返回)study:0>sinter one one_two
1) "1"
求多个汇合的并集
sunion key [key2 key3...]
并集,顾名思义,就是每个汇合所有的元素合并起来进行返回。示例和取交加相似,这里不再过多赘述。
求多个汇合的差集
sdiff key [key2 key3...]
差集,就是取本身有,但其他人没有的那局部元素。如果传入多个汇合,那么就是取本人有,但所有其他人都没有的那局部元素。大家了解意思即可,这里不再过多赘述。
有序汇合
有序汇合中的元素能够排序,但它并不是按索引下标进行排序,而是给每个元素都指定了一个分数,依照分数来进行排序。
有序汇合中的元素不能够反复,然而分数是能够反复的。
增加元素
zadd key score member [score member...]
// 应用示例
study:0>zadd class_grade 88 xiaoming
"1"
计算成员个数
zscard key
// 应用示例
study:0>zcard class_grade
"1"
获取某个成员的分数
zscore key member
// 应用示例
study:0>zscore class_grade xiaoming
"88"
计算成员的排名
// 从低到高排名
zrank key member
// 从高到低排名
zrerank key member
删除成员
zrem key member [member...]
减少某个成员的分数
zincrby key incrment member