前言

本文包含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种返回值:

  1. 大于等于0的整数:键的残余过期工夫
  2. -1示意键没有设置过期工夫
  3. -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 valuesetnx 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 abcdnull

批量设置值

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值自增1incr key//key值自减1decr key//自增指定数字incrby key increment//自减指定数字incrby key decrment

上面以incr命令进行具体阐明:

incr命令能够对值进行自增,应用该命令存在3种状况:

  1. 值如果不是整数,返回谬误
  2. 值是整数,返回自增后的后果
  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 younullstudy: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中的列表类型有两个特点,别离是:

  1. 列表中的元素是有序的
  2. 列表中的元素是能够反复的

增加元素

增加元素增加胜利后,返回的是以后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
//应用示例//批改列表的第一个元素为10study: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...] timeoutbrpop key [key...] timeout

key [key...]示意能够同时传入多个键进行解决

timeout示意阻塞的超时工夫。

blpop是从左弹出元素,brpop是从右弹出元素,两个除了弹出方向不同,其余基本相同。上面次要以brpop进行阐明:

  1. 当列表为空的时候,退出timeout=3,那么客户端会期待3秒后进行返回。如果timeout=0。那么客户端会始终期待上来。
  2. 当列表不为空的时候,会立刻返回相应的值
  3. 如果是多个键,那么brpop会从左到右遍历键,一旦某个键有元素,则立刻返回
  4. 如果是多个客户端同时执行雷同的阻塞命令,那么最先执行的那个客户端,能够获取到对应的值

汇合类型

汇合也是用来保留多个元素的,但其中的元素是无序的,并且不可能反复。

增加元素

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中具备元素3study: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