Redis API-全局命令
一.遍历键
1.1 Keys pattern
keys命令会遍历所有键,时间复杂度是O(n),当Redis保存大量键时,使用keys命令会造成redis拥塞,正式环境上禁止使用。
Pattern使用的是glob风格的通配符:
l * 表示匹配任意字符
l .代表匹配一个字符
l []代表匹配部分字符,例如[1,3]代表匹配1,3,[1-10]代表匹配1到10
l \x用来做转义,例如要匹配*号,?号需要做转义
例如:keys \?*
返回:所有?开头的键
1.2渐进式遍历 scan|hscan|sscan|zscancursor
命令:scan cursor [match pattern] [count number]
选项:cursor:游标,每次遍历都会返回当前的游标值,做为下一次遍历的起始游标,直到返回0,则遍历结束。
matchpattern:匹配模式,通keys命令的pattern
count number每次遍历键的个数,默认是10
例如:scan 0 match set* count 2 从游标0开始遍历查找set开头的键,每次遍历2个键
返回:1) "83"
2) "set5"
scan命令的优点:
scan命令采用渐进式遍历的方式来解决keys命令可能带来的阻塞问题,每次scan命令的时间复杂度是O(1),要真正实现keys命令的功能,需要执行多次scan命令。
scan命令的缺点:
由于scan命令需要分多次执行才能遍历完毕所有键,当在scan命令执行的过程中发生了键的操作,如增,删,改,会造成新增的键没遍历到或者遍历到重复的键的情况,也就是说scan命令并不能完整的遍历出所有的键。
二. 键总数dbsize
dbsize命令不会遍历所有键,而是直接获取Redis内置的键总数变量,所以dbsize命令的时间复杂度是O(1).
三. 检查指定的键是否存在exists key
检查指定的键是否存在,如存在返回1.不存在则返回0.
四. 删除键del key
,支持同时删除多个key。如成功返回成功删除key的个数。
集群中对多key操作需要确保多个key在同一个slot中,才可以被执行。
五. 设置键过期时间
Redis提供了四种设置过期时间的命令,分别为:
expire, expireat,pexpire, pexpireat,最终都会转变为pexpireat来执行。当key不存在时会返回0,当过期时间为负值时,当前key会被立即删除。
5.1 设置键在second秒后过期expire key seconds
设置键过期时间。单位是秒。如果过期时间是负值,则键会被立即删除。如:expire mykey 3
5.2 设置键在秒级时间戳timestamp后过期 expireat key timestamp
设置键在秒级时间戳timestamp后过期,如果过期时间是负值,则键会被立即删除。
例如:EXPIREAT cache 1355292000 # 这个 key 将在 2012.12.12 过期
5.3设置键在second豪秒后过期pexpire key millseconds
设置键过期时间。单位是豪秒。如果过期时间是负值,则键会被立即删除。如:pexpire mykey 3
5.4设置键在豪秒级时间戳timestamp后过期pexpireat key millseconds
设置键在豪秒级时间戳timestamp后过期,如果过期时间是负值,则键会被立即删除。
例如:EXPIREAT cache 1355292000 # 这个 key 将在毫秒级时间戳1355292000过期
六.返回键的剩余过期时间
6.1 返回键的剩余过期时间,单位:秒:ttl key
ttl key。返回键的剩余过期时间,单位秒。
返回值如下:
返回值>0,返回值为此键的剩余过期时间,单位秒。
返回值 = -1,此键没有设置过期时间
返回值 = -2,键不存在
6.2 返回键的剩余过期时间,单位:豪秒:pttlkey
pttl key。返回键的剩余过期时间,单位豪秒。
返回值如下:
返回值>0,返回值为此键的剩余过期时间,单位豪秒。
返回值 = -1,此键没有设置过期时间
返回值 = -2,键不存在
七. 将键的过期时间清除persist key
注:执行set命令,如果不设置过期时间也会将key的过期时间清楚
八. 键的数据结构类型 type key
Type key返回键的数据结构类型,包括:string,hash,set,zset,list。如mykey是string型则返回string。如mylist是list型则返回list。
九. 重命名键
9.1 重命名键 rename keynewkey
命令:
(1)rename key newkey
重命名键名,如果重命名后的键已经存在,则覆盖。
例如:set k1 v1
set k2 v2
rename k1 k2
get k2
返回:v1
再次执行:get k1
返回:nil
9.2 当指定键不存在时重命名键 renamenxkey newkey
只有newkey不存在时,才覆盖
需要注意的是:由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞redis的可能性
十. 随机返回一个键randomkey
randomkey命令会随机从库中选一个key返回
知识小贴士:作者尽心运营的知识星球社群【请点击:简道源码&&架构分析 加入】(可添加运营同学WX:wx454876882)持续拉新中...,定期的jdk与核心框架源码解析,主流行业解决方案与架构设计资料查阅与下载尽在其中。帮助行业新人和有志于技术的专业人士体系化的学习源码与系统架构,获取业界知名技术峰会和厂商对外公布的主流业务场景的解决方案。同时这个星球也是一个社群,大家可以在社群中结识有识之士,共同探讨,答疑解惑。希望可以通过这个星球帮助大家每日进步一点点,一年持续365天,共勉
本星球 聚焦于Java源码分析,架构解析。低代码,可扩展和高可用架构设计。帮助你更好地学编程,欢迎想进步的同学!仅精品案例的资料整理即物超所值。让我们大家一起每日进步一点点~~,你可以:
1. 阅读星球专属的编程知识和优质文章
2.JAVA知识从点和面,深度挖掘。通过点,形成面。提升自身的技术广度和深度。
3. 加入星球专属交流群,帮你找到学习伙伴、获取每日优质文章推送等
4.业界优秀案例资料学习及下载
5. 和伙伴们一起学习打卡,增加动力,共同进步
6.工作、学习和方法论。如何提升软实力,比如写文章、画架构图、技术产品的营销、社区的运营等等。
7.招聘、面试和晋升。如何提前准备面试,有什么套路?如何提升硬实力,少走弯路?
8.提供简历优化服务哟。本人常年招聘,也就面试了1000+程序员和架构师~~
9.解答你的疑问。
10.每日进步一点点(最重要的一点): 让自己与众不同,每天学习1-2小时源码和架构知识,365天后再回首,1年前的自己可能是个SB吧。用通勤的时间让自己成长,让优秀变成一种习惯。