在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

Redis命令详解:Keys

大哥们,打扰一下,Redis命令详解:Keys
最新回答
有杀气的萝莉

2025-03-01 03:41:24

Redis命令详解:Keys


介绍完Redis连接相关命令后,我们接下来将重点介绍与Key相关的命令。Redis作为一款key-value数据库,对Key的操作是不可或缺的。接下来,我们将逐一解析与Key操作相关的Redis命令。


DEL:最早可用版本为1.0.0。用于删除指定的键值对。若指定的key不存在,则忽略。命令时间复杂度为O(N)。对于除字符串外的其他数据类型,命令的时间复杂度为O(M),M为值的元素个数。在生产环境中,应避免一次性删除过多复杂数据类型的操作。


DUMP:最早可用版本为2.6.0。用于以Redis格式序列化指定键存储的值,可用RESTORE命令将序列化值反序列化。序列化格式有以下3个特点:不包含过期时间信息,使用PTTL命令获取存活时间;访问时间复杂度为O(1),序列化值时间复杂度为O(N*M),N为组成值的元素数量,M为元素平均大小;序列化较短字符串时,时间复杂度可看做O(1)。


EXISTS:最早可用版本为1.0.0。用于判断key是否存在。自3.0.3版本后,支持多参数,即一次性判断多个key,返回存在的key数量。单个key存在的判断返回1或0,向后兼容。注意,参数中有重复存在命令时,返回结果不进行去重。


EXPIRE:最早可用版本为1.0.0。用于为指定的key设置存活时间。存活时间会被DEL、SET、GETSET和所有STORE命令删除或覆盖。修改key值而不修改存活时间或保存到新key中,key的存活时间保持不变。使用RENAME重命名key时,原有key的存活时间会赋给新key。使用PERSIST命令清除存活时间,将key变为永久。如果设置存活时间非正数或过期时间,则key直接被删除。再次设置存活时间更新key的存活时间,在应用中常见。


关于时间精度,Redis2.1.3版本之前修改带有存活时间的key值时,会删除整个key;2.4版本后,过期时间在key过期一秒内仍可访问,2.6版本精确到1毫秒。存活时间保存为Unix时间戳,要求计算机时间可靠,加载RDB文件到另一台机器时,时间差距可能导致key被删除或存活时间延长。


Redis过期策略有两种:被动过期和主动过期。被动过期在客户端访问时检查key的存活时间,可能无法及时发现长时间未访问的过期key。Redis定期随机检查被设置过存活时间的key,过期后及时清理。每秒执行10次检查操作。


EXPIREAT:最早可用版本为1.2.0。作用与EXPIRE相同,参数需要传Unix时间戳。


KEYS:最早可用版本为1.0.0。返回匹配所有key的命令,时间复杂度为O(N)。在官方文档中建议避免在生产环境中使用,尤其是不要使用KEYS *命令,以免导致生产环境长时间不可用。推荐使用SCAN或sets命令查找key。


匹配策略介绍:?匹配单个字符,*匹配任意数量字符,[ae]匹配a或e,^e不匹配e,a-c匹配a、b、c,特殊符号使用\隔开。


MIGRATE:最早可用版本为2.6.0。将源实例的key以原子操作传输到目标实例,删除源实例key。相当于执行DUMP+DEL操作在目标实例执行RESTORE操作。此操作会阻塞源实例和目标实例,直到传输完成。3.2版本后支持一次性传输多个key。


执行MIGRATE命令时需设置超时时间,超时未完成抛出IOERR。两个实例状态可能两种:均存在指定key或仅源实例存在,key不会丢失。3.0.6版本后支持一次传输多个key,使用KEYS参数,源key参数设置为空字符串。COPY参数传输后不删除源实例key,REPLACE参数替换目标实例已存在的key。这两个参数自3.0版本开始可用。


MOVE:最早可用版本为1.0.0。将当前数据库key移动到指定数据库。如果目标数据库已存在key或当前数据库不存在key,命令不做任何操作。


OBJECT:最早可用版本为2.2.3。用于查看Redis对象内部信息,调试时常用。具体用法如下:查看对象编码格式。


PERSIST:最早可用版本为2.2.0。删除指定key的过期时间,使之变为永久key。


PEXPIRE:最早可用版本为2.6.0。与EXPIRE作用相同,参数时间单位为毫秒。


PEXPIREAT:最早可用版本为2.6.0。与EXPIREAT作用相同,参数同样是毫秒。


PTTL:最早可用版本为2.6.0。返回指定key剩余存活时间的毫秒数。3.0版本后,key不存在返回-2,永久key返回-1。


RANDOMKEY:最早可用版本为1.0.0。从当前数据库返回一个随机key。


RENAME:最早可用版本为1.0.0。重命名key。若key不存在,返回错误。新key已存在时,覆盖原key(隐式执行DEL命令,操作延时较高)。3.2版本前,源key和目标key相同会报错。


RENAMENX:若新key不存在,则重命名key;新key已存在返回0;成功返回1。


RESTORE:最早可用版本为2.6.0。使用RESTORE key ttl serialized-value [REPLACE]命令将序列化值反序列化存储到key,ttl为0则key永久存在。3.0版本后,未使用REPLACE参数且key已存在时返回错误“Target key name is busy”。


SCAN:最早可用版本为2.8.0。使用SCAN cursor MATCH pattern COUNT count命令,返回小部分数据,不会阻塞Redis。基于游标操作,每次调用返回游标用于下一次迭代。游标返回0表示迭代结束。


每次返回数量不固定,可能为空。SCAN命令支持匹配。


测试存储10000个key:


返回结果表明,虽然设置count为1000,但每次返回的值只有10个左右。


SORT:最早可用版本为1.0.0。用于返回或保存list、set和sorted set的键,默认对数字或排序key排序,视为双精度浮点数。按字典顺序排序使用ALPHA参数;按外部字段排序使用BY参数。


TOUCH:最早可用版本为3.2.1。修改key最后访问时间,key不存在忽略。


TTL:最早可用版本为1.0.0。返回指定key的剩余存活时间,单位为秒。2.6版本及以前,key不存在或永久key返回-1。从2.8版本开始,key不存在返回-2,永久key返回-1。


TYPE:最早可用版本为1.0.0。返回key存储值的类型。


UNLINK:最早可用版本为4.0.0。删除key,时间复杂度O(1),先从keyspace中删除key,指定key已删除,内存未释放。在另一个线程中执行内存释放操作,时间复杂度O(N)。


WAIT:最早可用版本为3.0.0。阻塞客户端,直至所有写操作完成并保存指定数量副本。总会返回副本数量或超时。