redis 怎么通过 bitfield set 把二进制位设置成全 0 或者全 1?心累中...

2019-03-16 19:47:13 +08:00
 Youngda
知道指令

BITFIELD key [GET type offset][SET type offset value][INCRBY type offset increment][OVERFLOW WRAP|SAT|FAIL]

总是使不对,
或者使用 BITOP 可以实现么?
或者大佬们还有其他想法吗?
//set test a
//值 0110 0001
//求置成 11111111
10289 次点击
所在节点    Redis
7 条回复
newlifeinsc
2019-03-16 20:28:03 +08:00
bit 操作的实际上也是普通的字符串,你直接通过 set key xxx 命令就可以了
Youngda
2019-03-16 21:38:48 +08:00
@newlifeinsc 知道这个,貌似没有全 1 的 ASCII,想找一步到位的那种…
newlifeinsc
2019-03-16 21:56:32 +08:00
@Youngda 没有 ascii,直接操作二进制啊, redis-cli 上没试过可不可以。你用的什么语言,像 nodejs 的话, ioredis 直接 set Buffer 类型, 在程序里设置 这个 Buffer 的二进制全是 1 就可以了, 其他语言应该也有类似的。0 的话,直接把这个 key 删掉就可以了
leoleoasd
2019-03-16 22:30:03 +08:00
1<<n
Youngda
2019-03-16 23:07:14 +08:00
@newlifeinsc 谢谢,我试试
newlifeinsc
2019-03-16 23:13:20 +08:00
@Youngda 另外,我记得这里还有一个坑,redis 里单个字节内的位的顺序和平时使用的是反的,如设置的二进制 0x0f,按常理说是 0-3 是 1,而 redis 是 7-4, 即 0 对应 7, 1-6 这种顺序
Youngda
2019-03-17 10:07:17 +08:00
@leoleoasd 谢谢指点
@newlifeinsc 我试了一下,set test a //getbit test 0-7,顺序是 0110 0001

今天又仔细阅读了一下文档,测试了一下,用这条指令可以实现,bitfield test set i8 0 -1//从第 0 个位开始,将接下来的 8 个位用无符号数 -1 替换,再 getbit 就是 1111 1111

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/545318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX