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

Redis每日一练(08):SETBIT和GETBIT命令

原创 AlbertS 2019-12-10
4308

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

前言

本来想把位操作的这几个命令一口气全都学完了,结果看文档的时候发现还挺麻烦,还是稳扎稳打,一点一点学习吧,今天先看最基础的 GETBIT 和 SETBIT 命令。

SETBIT

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

作用

这个命令的作用很简单,就是将指定键对应的字符串中,根据参数中的偏移量设置那一位是0还是1,其实这时的字符串更像是一个字节串,把这些字节依次排开,然后指定偏移的位数,设置成1或者0,命令执行成功后返回的是设置之前对应位的值,如果设置的键之前不存在,那么在设置之前会先初始化成空字符串。

练习

为了看得更清楚一点,我们只设置一个字节内的值,也就是偏移量在0到7之间:

127.0.0.1:6379> SETBIT var 5 1
(integer) 0
127.0.0.1:6379> SETBIT var 6 1
(integer) 0
127.0.0.1:6379> SETBIT var 7 1
(integer) 0
127.0.0.1:6379> SETBIT var 7 0
(integer) 1
127.0.0.1:6379> GET var
"\x06"
127.0.0.1:6379>

可能对于位运算不熟悉的小伙伴不太理解最后的结果"\x06",实际上写成二进制0000 0110应该就清楚很多了,前三步我们把5、6、7三位都设置成了1,然后第4步把第7位又设置回了0,所以得到了最后的结果"\x06"。

接下来我们测试一下,如果设置的值不为1或者0的时候会报错的:

127.0.0.1:6379> SETBIT var2 5 2
(error) ERR bit is not an integer or out of range
127.0.0.1:6379> SETBIT var2 8 a
(error) ERR bit is not an integer or out of range
127.0.0.1:6379>

SETRANGE

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

作用

明白了 SETBIT 命令的作用, GETBIT 自然就懂了,其实就是把SETBIT设置的值取回来而已。

练习

取一个空键的任意一位都应该是0,先 SETBIT 然后再 GETBIT 同一位得到的应该就是刚刚设置的值:

127.0.0.1:6379> GETBIT var3 4
(integer) 0
127.0.0.1:6379> GETBIT var3 6
(integer) 0
127.0.0.1:6379> SETBIT var3 6 1
(integer) 0
127.0.0.1:6379> GETBIT var3 6
(integer) 1
127.0.0.1:6379>

总结

  1. SETBIT 和 GETBIT 又是一对搭档,用来存取指定二进制位的值,只有0和1两种可能。
  2. 这两个命令都有一个 offset 参数,最小值是0,最大值是2^32,也就是字符串的值到达了512M,这也是strings类型的限制。

2019-11-28 20:56:03

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

评论