暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis每日一练(07):GETRANGE和SETRANGE命令

原创 AlbertS 2019-12-09
1329

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

前言

看到这一篇可以放松一下,只有两个命令,同样是操作字符串,之前学的命令都是完整的设置,而这两个命令是部分读取或者或者部分设置,一起来看一下吧。

GETRANGE

  • 最早出现版本:2.4.0
  • 时间复杂度:O(N)
  • 命令参数:GETRANGE key start end
  • 操作类型:strings
  • 官方文档

作用

获取字符串类型键对应值的一部分,这是个有故事的命令,因为在2.0版本及以前是叫做 SUBSTR 的,返回索引start到索引end的之间的字符串,包括端点索引,同时支持负数索引,-1代表最后一个字符,-2代表倒数第2个字符,不会改变原字符串。

练习

获取一个字符串前5个字符,索引应该是0到4:

127.0.0.1:6379> SET str introduce
OK
127.0.0.1:6379> GETRANGE str 0 4
"intro"
127.0.0.1:6379> GET str
"introduce"
127.0.0.1:6379>

从第3个字符开始一直截取到字符串结尾:

127.0.0.1:6379> SET str introduce
OK
127.0.0.1:6379> GETRANGE str 2 -1
"troduce"
127.0.0.1:6379> GET str
"introduce"
127.0.0.1:6379>

SETRANGE

  • 最早出现版本:2.2.0
  • 时间复杂度:O(1)
  • 命令参数:SETRANGE key offset value
  • 操作类型:strings
  • 官方文档

作用

这个命令就是从原字符串的第一个字节开始,在指定偏移量开始设置给定的参数值,如果偏移量大于之前的字符串长度,会填充0到指定长度,不存在的键值被当成空字符串。

练习

正常在比较长的字符串上操作,原串会被覆盖:

127.0.0.1:6379> SET name confraternity
OK
127.0.0.1:6379> SETRANGE name 3 ok
(integer) 13
127.0.0.1:6379> GET name
"conokaternity"
127.0.0.1:6379>

如果偏移量超过字符串长度,会先填充0到指定长度:

127.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> SETRANGE name 10 hello
(integer) 15
127.0.0.1:6379> GET name
"albert\x00\x00\x00\x00hello"
127.0.0.1:6379>

总结

  1. GETRANGE 和 SETRANGE 是一对,可以用于操作定长的字符串拼接出的信息流。
  2. SETRANGE 在指定偏移量时,最大值为(536870911),因为Redis的字符串最大指定到512M。

2019-11-28 20:56:03

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论