目录
1.set & get
set & get指令中key和value都是字符串,但是不需要加单引号或双引号。
需要补充的是我们输入的value对于redis服务器而言是字符串,但是在存储时服务器会按内容找合适的类型存储。比如说当value是hello时,redis直接按短字符串(embstr)存;而value是数字时,redis服务器会把字符串转化为对应整数类型(int)存储。
①set指令
set用于设置key和value对应关系。使用时一个key只能对应一个value,其用法如下:
set key value [ex t | px t] [nx | xx]
举例如下(未加可选字段):
可选字段中ex和px用于设置过期时间,类比expire指令;ex以秒为单位,px以毫秒为单位。
使用时操作如下:
可选字段中nx代表当前数据库中该key不存在时,可以设置该KV并返回1,若key已存在则不设置并返回0。xx与nx正相反,若数据库中key存在则设置value并返回1,若key不存在则不设置并返回0。
简单说就是nx用于创建KV,xx用于更新KV。举例如下:
当然,对同一个key进行多次set会更新对应value:
②get指令
get是根据key来获取value。其用法如下:
get key
返回:当KV映射关系存在时,自然是返回对应的value;当redis中没有此映射时会返回nil,即空,可以类比C++中的NULL。需要注意的是,get要求value必须是string类型,否则报错。
当存在对应KV映射时, 返回对应的value :
当不存在对应KV映射时,返回nil:
当value非string类型时,报错:
2.keys
keys指令用于查询key值,其使用方式如下:
keys pattern
所谓pattern就是描述我想查询的key是什么样。如果是某个具体的key,那直接传名字就好;如果是范围查询,那就通过通配符进行模糊匹配。
常见的通配符如下:
通配符 | 含义 | 使用方式 | 可匹配示例 |
? | 匹配任意一个或零个字符 | keys ap?le | apple aple |
* | 匹配任意多个字符 | keys a*le | apaale apable |
[^ae] | 排除字符a和e | keys ap[^p]le | aple apple |
[a-e] | 匹配a到e范围内的任意一个字符 | keys ap[a-z]le | apale apele |
[acexz] | 只能匹配acexz中任意一个字符 | keys ap[puqt]le | apple app |
示例如下:
这里我们需要重点强调一下,keys * 操作可以查询当前Redis中所有的key,但是,在实际工作中,keys *极其危险。因为这是一个o(n)的操作,而Redis是一个单线程服务器,所以当Redis中有大量的key时,进行全局查询势必会消耗大量时间,影响其他客户端的操作请求,尤其是在生产环境中,这可能造成灾难性的后果。比如说,当进行keys *操作后,其他客户端随后访问Redis而发生超时,那么就会直接访问mysql,但mysql运载能力有限,若访问量太大很有可能直接就崩了。
3.del
del指令用于删除指定的KV键值对。在使用时可以一次性删除多个key。
del key1 key2 ...
返回值是本次操作所删key的个数。
对于del需要说明的是,相比于mysql数据库,对Redis中的数据发生del误操作的后果并没有那么重,因为Redis可以理解为是mysql中部分数据在内存中的拷贝,只要“根基”还在就能恢复。当然,对任何数据库中数据进行删除都应三思后行。
4.expire & setex & psetex
①expire指令用于设置特定key的过期时间。设置成功返回,失败返回0.
②setex指令是在设置KV时直接指定过期时间(秒为单位)。类比set的ex可选字段。
③psetex指令与setex相同,但过期时间以毫秒为单位。
expire key time
setex key time vlaue #一定要注意time 在前value在后
psetex key time value
使用示例如下:
相比而言,setex和psetex用于既需要更新过期时间又需要更新(或创建KV)value的场景,而expire用于更新过期时间但不需要更新value的场景。
5.ttl
ttl指令用于查询特定key的过期时间。
返回值有三种类型,返回0及以上正数代表剩余时间,返回-2代表已经过期,返回-1代表所查询的key没有设置过期时间。
ttl key
使用示例如下:
6.exists
exists指令用于查询key在数据库中是否存在,查询的时间复杂度是o(1)。该指令支持批量查询,可一次性查询多个key。其返回值是所查询到存在的key的数量。
exists key1 key2 ...
使用示例如下:
7.setnx
setnx指令即set指令+可选字段nx,用于确保所设置的KV在指令之前不存在。
当setnx执行成功时会返回1,失败则返回0。
setnx key value
使用示例如下:
8.flushall
flushall指令一键删除所有键值对。用前三思哦~
flushall
9.object encoding
该指令用于查询value的编码方式。(而非类型,类型用type查)
object encoding key
使用示例如下:
10. type
用于查询value的类型。
type key
使用示例如下:
如有错误,敬请斧正