redis存储数据是通过“键值对”形式,key固定是字符串,value有很多类型,例如:字符串,哈希表,列表,集合,有序集合等等。操作上述不同的数据结构的命令是不同的,而全局命令,能够搭配任意一个数据结构来使用。
keys 查询当前服务器上匹配的key
通过通配符来描述key的模样,匹配上述模样的key就能被查出来
?
匹配任意一个字符
*
匹配0个或者多个任意字符
abcd
只能匹配有a b c中的一个
[^e]
排除e,其他都能匹配到
[a-e]
匹配a-e范围内的字符(闭区间)
:::info
keys命令的时间复杂度O(N),所以,在生产环境上禁止使用keys *
查询出所有的key。在生产环境上key是非常多的,而redis是一个单线程服务器,执行keys *
的时间就会很长,redis服务器会被阻塞,无法给其他客服端提供服务。
:::
exists 判定key是否存在
语法格式:exists key [key...]
,返回值:key存在的个数,时间复杂度:O(1),(redis组织这些key是按照哈希表的方式)
另外一种写法:
这种写法一般不采用,因为redis是客服端服务器结构,需要通过网络通信,分开写会产生更多轮次的网络通信,效率低,成本高。因此redis的很多命令都支持一次就能操作多个key的操作。
del 删除指定的key
语法格式:del key [key...]
,时间复杂度:O(1),返回值:删掉掉key的个数
expire 给指定的key设置时间
语法格式:expire key seconds
设置过期时间是几秒,pexpire key milliseconds
设置过期时间是几毫秒。 一旦key的存活时间超过这个指定时间,就会自动删除。
ttl 查看当前key的过期时间还剩多少
语法格式:ttl key
返回过期时间还剩几秒,如果返回-1说明没给这个key设置过期时间,返回-2说明这个key已经被自动删除了。使用pttl key
返回的是毫秒
redis的过期策略
redis中存在很多很多的key,这些key中可能有很大一部分都有过期时间,此时,redis服务器怎么知道哪些key已经过期了?哪些还未过期?
- 定期删除:
- 惰性删除
- 内存淘汰(后面篇章再细说)
type 返回key对应的value的数据结构
value可能的类型有:none
,string
,list
, set
, zset
, hash
等,时间复杂度:O(1)