Redis官方文档
redis官方文档
核心命令
set
将key和value存储到Redis中,key和value都是字符串
set key value
Redis中不区分大小写,字符串类型也不需要添加单引号或者双引号
get
根据key读取value,如果当前key不存在,则返回nil(等同于NULL)
get key
全局命令
Redis中有多种数据结构——字符串,哈希表,列表,集合,有序集合,不同的命令操作不同的数据结构。而全局命令可以操作任意一个数据结构
keys
通过通配符描述key的模样,匹配上的key就会查询出来,时间复杂度为O(n)
keys pattern
其中的pattern就是包含特殊符号的字符串
通配符 | 作用 |
---|---|
? | 匹配任意一个字符 |
* | 匹配0个或多个任意字符 |
[a,b,c,d] | 匹配a,b,c,d中的字符,其他的不可以 |
[^a] | 只有a不能被匹配 |
[a-z] | 匹配a-z之间的任意字符,包含a和z |
?
*
[a,b,c]
[^a]
[a-z]
exists
判断key是否存在,返回key存在的个数,时间复杂度为O(N),N是检查key的个数
exists key [key ...]
之所以要同时判断多个key是否存在,是因为Redis是一个客户端,服务器结构的程序,其交流通过网络通信。而网络通信的效率是很慢的,需要经过层层封装和分用。因此Redis中的很多命令都支持多个key同时操作
del
删除指定的key,返回删除成功的key的个数,语法和exists类似,可以删除一个或多个key
del key [key ...]
expire
给指定的key设置过期时间(key的存活时间超过这个指定的时间就会自动删除),单位是秒,需要注意的是,设定的key必须存在
返回值:设置成功返回1,设置失败返回0
expire key seconds
如果想要设置精确值更小的过期时间,可以使用pexpire,单位是毫秒
ttl
查询当前key剩余的过期时间,单位是秒
返回值:剩余的过期时间, -1:没有关联过期时间,-2:key不存在
ttl key
同样,要有pttl命令,单位是毫秒
ip协议的报头中也有一个ttl字段,代表过期时间,单位是次数
Redis的key过期策略
Redis中存储了大量的key,那么他是如何知道哪些key已经过期了要被删除,哪些key还没过期呢?
显然,一次次遍历所有的key,确定key是否过期,效率非常慢,并且占用系统的资源
在Redis中,主要采用了下面两种策略
- 定期删除:每次抽取一部分,验证过期时间,并且需要保证这个过程足够快(Redis是单线程的程序,删除操作不能阻塞正常的处理请求命令)
- 惰性删除:key虽然到达了过期时间,但是还没删除,后面一次访问用到了这个key,Redis会先触发删除这个key的操作,然后返回nil
其实,Redis可以基于优先级队列或者时间轮实现一个定时器,来清理过期的key,但是Redis并没有采取这种措施,因为定时器的实现需要引入多线程,而Redis作者早期就奠定了单线程的基调
type
返回key对应的value的数据类型
例如:none,string,list,set,zset,hash,stream
type key