第3章 Redis 命令
Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令, 对 Key 的操作命令,对 Value 的操作命令。
3.1Redis 基本命令
首先通过 redis-cli 命令进入到 Redis 命令行客户端,然后再运行下面的命令。
3.1.1 心跳命令
ping 键入 ping 命令,会看到 PONG 响应,则说明该客户端与 Redis 的连接是正常的。该命令 亦称为心跳命令。
3.1.2 读写键值命令
set key value 会将指定 key-value 写入到 DB。get key 则会读取指定 key 的 value 值。关于 更多 set 与 get 命令格式,后面会详细学习。
3.1.3 DB 切换 select
Redis 默认有 16 个数据库。这个在 Redis Desktop Manager(RDM)图形客户端中可以直 观地看到。
默认使用的是 0 号 DB,可以通过 select db 索引来切换 DB。例如,如下命令会切换到 DB3,并会将 age-23 写入到 DB3 中。
3.1.4 查看 key 数量 dbsize
dbsize 命令可以查看当前数据库中 key 的数量
从以上查看情况看,DB0 中有 2 个 key,DB1 中没有 key,DB3 中有 1 个 key。
3.1.5 退出客户端命令
使用 exit 或 quit 命令均可退出 Redis 命令行客户端。
3.2Key 操作命令
Redis 中存储的数据整体是一个 Map,其 key 为 String 类型,而 value 则可以是 String、 Hash 表、List、Set 等类型
3.2.1 keys
格式:KEYS pattern 功能:查找所有符合给定模式 pattern 的 key,pattern 为正则表达式。 说明:KEYS 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令,而使用 scan 命令代替。
3.2.2 exists
格式:EXISTS key 功能:检查给定 key 是否存在。 说明:若 key 存在,返回 1 ,否则返回 0 。
3.2.3 del
格式:DEL key [key ...] 功能:删除给定的一个或多个 key 。不存在的 key 会被忽略。 说明:返回被删除 key 的数量。
3.2.4 rename
格式:RENAME key newkey 功能:将 key 改名为 newkey。
说明:当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经 存在时, RENAME 命令将覆盖旧值。改名成功时提示 OK ,失败时候返回一个错误。
3.2.5 move
格式:MOVE key db 功能:将当前数据库的 key 移动到给定的数据库 db 当中。
说明:如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key , 或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。移动成功返回 1 ,失败 则返回 0 。
3.2.6 type
格式:TYPE key 功能:返回 key 所储存的值的类型。 说明:返回值有以下六种
3.2.7 expire 与 pexpire
格式:EXPIRE key seconds
功能:为给定 key 设置生存时间。当 key 过期时(生存时间为 0),它会被自动删除。 expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key 被称为“易失的”(volatile)。
说明:生存时间设置成功返回 1。若 key 不存在时返回 0 。rename 操作不会改变 key 的生存时间。
3.2.8 ttl 与 pttl 格式:TTL key 功能:TTL, time to live,返回给定 key 的剩余生存时间。
说明:其返回值存在三种可能:
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,返回 key 的剩余生存时间。ttl 命令返回的时间单位为秒,而 pttl 命令 返回的时间单位为毫秒。
3.2.9 persist
格式:PERSIST key
功能:去除给定 key 的生存时间,将这个 key 从“易失的”转换成“持久的”。
说明:当生存时间移除成功时,返回 1;若 key 不存在或 key 没有设置生存时间,则 返回 0。
3.2.10 randomkey
格式:RANDOMKEY 功能:从当前数据库中随机返回(不删除)一个 key。 说明:当数据库不为空时,返回一个 key。当数据库为空时,返回 nil。
3.2.11 scan
格式:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
功能:用于迭代数据库中的数据库键。其各个选项的意义为:
cursor:本次迭代开始的游标。
pattern :本次迭代要匹配的 key 的模式。
count :本次迭代要从数据集里返回多少元素,默认值为 10 。
type:本次迭代要返回的 value 的类型,默认为所有类型。 SCAN 命令是一个基于游标 cursor 的迭代器:SCAN 命令每次被调用之后,都会向用 户返回返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。用户在下次迭代 时需要使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代。如果新游标返回 0 表示迭代已结束。
说明:使用间断的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成 服务器崩溃。 当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍 历数目。由于 scan 命令每次执行都只会返回少量元素,所以该命令可以用于生产环境, 而不会出现像 KEYS 命令带来的服务器阻塞问题。 增量式迭代命令所使用的算法只保证在数据集的大小有界的情况下迭代才会停止, 换句话说,如果被迭代数据集的大小不断地增长的话,增量式迭代命令可能永远也无法 完成一次完整迭代。即当一个数据集不断地变大时,想要访问这个数据集中的所有元素 就需要做越来越多的工作, 能否结束一个迭代取决于用户执行迭代的速度是否比数据 集增长的速度更快。
相关命令:另外还有 3 个 scan 命令用于对三种类型的 value 进行遍历。
hscan:属于 Hash 型 Value 操作命令集合,用于遍历当前 db 中指定 Hash 表的 所有 field-value 对。
sscan:属于 Set 型 Value 操作命令集合,用于遍历当前 db 中指定 set 集合的所 有元素 zscan:属于 ZSet 型 Value 操作命令集合,用于遍历当前 db 中指定有序集合的 所有元素(数值与元素值)