Redis GETRANGE命令

Redis GETRANGE命令教程

Redis GETRANGE 命令用于返回 RedisKEY字符串值 的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内),第一个字符 start 参数为 0。

负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。当 end 参数超过字符串的长度时,超过部分会被忽略,而不会报错。

Redis GETRANGE命令详解

语法

192.168.98.70:6379> GETRANGE KEY start end

参数

参数 作用
KEY 要获取的 KEY
start 要截取的字符串的开始索引。
end 要截取的字符串的结束索引。

返回值

截取得出的子字符串。

时间复杂度

O(N), N 为要返回的字符串的长度。

复杂度最终由字符串的返回值长度决定,但因为从已有字符串中取出子字符串的操作非常廉价,所以对于长度不大的字符串,该操作的复杂度也可看作 O(1)。

可用版本

>= 2.4.0

技术细节

在 <= 2.0 的版本里,GETRANGE 被叫作 SUBSTR。

案例

在值范围内

参数在值的长度范围内,返回正确的子串

192.168.98.70:6379> SET haicoder.net "Welcome to HaiCoder!" OK 192.168.98.70:6379> GETRANGE haicoder.net 2 10 "lcome to " 192.168.98.70:6379> GETRANGE haicoder.net 11 19 "HaiCoder!" 192.168.98.70:6379> DEL haicoder.net (integer) 1

首先,我们使用 GETRANGE 命令,获取 haicoder.net 偏移量从 2 开始到偏移量 10 结束。接着再次使用 GETRANGE 命令,获取 haicoder.net 偏移量从 11 开始到偏移量 19 结束。

使用逆序索引

使用逆序索引,返回子串

192.168.98.70:6379> SET haicoder.net "Welcome to HaiCoder!" OK 192.168.98.70:6379> GETRANGE haicoder.net -9 -1 "HaiCoder!" 192.168.98.70:6379> GETRANGE haicoder.net -1 -9 "" 192.168.98.70:6379> DEL haicoder.net (integer) 1

首先,我们使用 GETRANGE 命令,获取 haicoder.net 偏移量从 -9 开始到偏移量 -1 结束。接着再次使用 GETRANGE 命令,获取 haicoder.net 偏移量从 -1 开始到偏移量 -9 结束,此时获取的子串为空。

获取整个串

使用索引 0 到 -1 获取整个子串

192.168.98.70:6379> SET haicoder.net "Welcome to HaiCoder!" OK 192.168.98.70:6379> GETRANGE haicoder.net 0 -1 "Welcome to HaiCoder!" 192.168.98.70:6379> DEL haicoder.net (integer) 1

我们使用索引 0 到 -1 获取整个子串,索引 0 表示第一个字符,索引 -1 表示最后一个字符。

超过值长度

超过值长度,索引会被自动截取

192.168.98.70:6379> SET haicoder.net "Welcome to HaiCoder!" OK 192.168.98.70:6379> GETRANGE haicoder.net 0 100 "Welcome to HaiCoder!" 192.168.98.70:6379> DEL haicoder.net (integer) 1

索引 100 远远超出了字符串的长度,没有报错,直接忽略了超出的部分,返回了整个串。

Redis GETRANGE命令总结

Redis GETRANGE 命令用于返回 Redis 的 KEY 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内),第一个字符 start 参数为 0。Redis GETRANGE 命令语法:

192.168.98.70:6379> GETRANGE KEY start end