今天我们简单介绍一些关于redis的基础命令。
目录
get 和 set
全局命令
keys
EXISTS
del(delete)
expire
TTL
Redis的key过期策略是怎么实现的?
type
get 和 set
连接到云服务器后,通过redis-cli命令进入到redis客户端,我们就可以通过get和set命令来存储相关的信息了:
跟hash表类似的方式,set的格式为: set key value
而get的时候,只需要get key则可以拿到属性。如果是不存在该值,则返回的是nil,类似于null,也就是提示我们这个值不存在。
全局命令
Redis支持很多种数据结构,Redis是键值对结构,key固定就是字符串,而value实际上会有很多种类型,全局命令,就是能够搭配任意一个数据结构来使用的命令。
keys
用来查询当前服务器上匹配的key,通过一些特殊符号(通配符),来描述key的样子,就能够查询匹配到key的样子。
patten:包含特殊符号的字符串
为了方便演示,我们提前增加好一些keys和value:
具体来说,包括了一下多种:
- ? 匹配任意一个字符
- * 匹配0个或多个任意字符
- [abcdef] 只能匹配到abcde
- [^e]排除e,只有e匹配不了,其他的都能匹配
- [a-e]匹配a-e这个范围内的字符,包含两侧边界
EXISTS
判断某个key是否存在。
请注意,尽量使用EXISTS hello hallo这样的命令,而不是 EXISTS hello 和EXISTS hallo
分开来,会让网络IO量增大,增加成本,所以尽量还是一行操作就完成。
del(delete)
删除指定的key,可以一次删除一个或者多个。
expire
给指定的key设置过期时间,key存活时间超出这个指定的值,就会被自动删除。
expire的单位是秒,pexpire的单位是毫秒。
例如很多业务场景,如手机验证码、外卖优惠券,只在指定时间内有效。
此处我们设置一个hello为10,那么在短时间内get,是可以得到结果的,等过了十秒后再get,就发现这个key已经过期了。
TTL
获取指定key的过期时间,秒级。(pTTL则是毫秒级)
Redis的key过期策略是怎么实现的?
一个redis中可以同时存在很多很多的key,这些key中可能有很大一部分key都有过期时间,此时redis服务器是怎么知道哪些key已经过期要被删除,哪些还没过期呢?
redis整体的策略是:
- 定期删除:每次抽取一部分,进行验证过期时间,保证这个抽取检查的过程足够快
- 惰性删除:假设这个key已经到过期时间了,但是暂时还没有删除它,key还存在,后面又一次的访问正好用到了这个key,于是这次访问就会让redis服务器触发删除key的操作,同时返回一个nil。
type
redis所有的key都是string类型,key对应的value可能会存在多种类型,type的作用就是返回key对应的数据类型。
在遇到不认识的key之前,我们可以查询一下key的类型,以帮助我们了解。