Redis Key操作命令全面解析
Redis命令详解:Keys
Redis命令详解:keys
介绍完Redis连接相关的命令,我们重点介绍一下key相关的命令。
Redis作为一个key-value数据库,对于键操作是必不可少的。
接下来我们将主要操作相关的Redis命令一一分析。
DEL:最旧的可用版本是1.0.0。
用于删除指定的键值对。
如果指定的键不存在,则忽略它。
该命令的时间复杂度为O(N)。
对于字符串以外的数据类型,命令的时间复杂度为O(M),其中M是值中的元素数量。
在生产环境中,应避免一次性删除过多复杂数据类型的操作。
转储:最旧的可用版本是2.6.0。
用于将指定key中存储的值以Redis格式序列化,可以使用RESTORE命令对序列化后的值进行反序列化。
序列格式具有以下三个特点:不包含过期时间信息、使用PTTL命令获取生存时间、访问时间复杂度为O(1)、序列值的时间复杂度为O(N*M),N为分量值和元素个数,M为序列化较短字符串时元素的平均大小,时间复杂度可以认为是O(1)。
现有:最旧的可用版本是1.0.0。
用于判断key是否存在。
从3.0.3版本开始,支持多参数化,即同时判断多个key,并返回找到的key的个数。
判断单个key是否存在返回1或0,向后兼容。
注意,当参数中有重复命令时,返回结果不会进行去重。
到期:最旧的可用版本是1.0.0。
用于设置所选键的停留时间。
停留时间将被删除或替换为DEL、SET、GETSET和所有STORE命令。
修改密钥值而不修改生存期或保存到新密钥,密钥生存期保持不变。
当您使用RENAME重命名密钥时,将为新密钥设置原始密钥的生命周期。
使用PERSIST命令清除停留时间并使密钥永久化。
如果生存时间设置为非正数或者过期时间,则该key将被直接删除。
再次设置停留时间以更新按键的停留时间,这在应用中很常见。
关于时间精度,Redis2.1.3版本之前用生存时间修改key值时,2.4版本之后key会被彻底删除,过期时间依然可以达到1秒过期之内关键,2.6版本精确到1毫秒。
生存时间保存为Unix时间戳,这就要求计算机的时间可靠。
当将RDB文件上传到另一台机器时,时间间隙可能会导致key被删除或延长生存时间。
Redis的过期策略有两种:被动过期和主动过期。
被动过期会检查客户访问密钥时密钥的剩余时间,并且可能无法检测到长时间未访问的过期密钥。
Redis定期随机检查设置有生命周期的key,并在过期后及时清理。
每秒执行10次扫描。
已完成:最早可用的版本是1.2.0。
功能与EXPIRE相同,参数需要传递Unix时间戳。
键:最旧的可用版本是1.0.0。
返回匹配所有按键的命令,时间复杂度为O(N)。
官方文档中建议避免在生产环境中使用,尤其是不要使用KEYS*命令,以免导致生产环境长时间不可用。
建议使用SCAN或SET命令来查找密钥。
匹配策略介绍:?匹配一个字母,*匹配任意数量的字母,[ae]匹配a或e,^e不匹配e,a-c匹配a,b,c,特殊符号用\分隔。
迁移:最旧的可用版本是2.6.0。
通过原子操作将源实例密钥移动到目标实例并删除源实例密钥。
相当于执行DUMP+DEL操作对目标实例执行RESTORE操作。
此过程会阻止源实例和目标实例,直到传输完成。
3.2版本之后,支持同时发送多个密钥。
执行relay命令时,需要设置超时时间。
如果超时没有完成,则会抛出IOERR。
两个实例有两种可能的情况:指定的key在两个实例中都存在或者只有源实例存在,并且key不会丢失。
在版本3.0.6之后,可以使用KEYS参数并将源密钥参数设置为空字符串,同时发送多个密钥。
发送COPY参数后源实例的key并没有被删除,REPLACE参数替换目标实例已有的key。
这两个参数从3.0版本开始可用。
MOVE:最旧的可用版本是1.0.0。
将当前数据库密钥移动到选定的数据库。
如果目标数据库中已存在该密钥或当前数据库中不存在该密钥,则该命令将不执行任何操作。
对象:最旧的可用版本是2
redis如何count某字符开头的的key
统计Redis中以某个字母开头的key的数量;您可以将SCAN命令与符号结合使用。
具体步骤如下:
使用Redis客户端连接Redis服务器。
输入命令SCAN0MATCHprefix*COUNT10000;prefix是你要匹配的前缀,10000是一次扫描的最大键数。
0表示从Redis数据库中的第一个key开始扫描。
如果你需要找到所有的钥匙。
您可以将COUNT设置为一个较大的值,例如1000000。
在Redis中,第一个值是需要发送到下一个SCAN命令的游标,第二个值是代表所有匹配键的字符串。
第二个值的长度是以前一个字母开头的键的数量。
例如,如果要查找以user_开头的键的总数,可以运行以下命令:
SCAN0MATCHuser_*COUNT10000
Redis返回类似于以下结果的内容:
1)"5"
2)1)"user_1"
2)"user_2"
3)"user_3"
...
其中,第一个值5表示下一次扫描的起始位置,第二个值是包含所有以user_开头的键的字符串数组。
如果你想知道匹配键的数量,您只需要计算第二个值的长度。
因为SCAN命令扫描整个数据库的速度很慢;在大型Redis数据库中;执行该命令可能需要很长时间并且消耗大量资源当心。