V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Youngda
V2EX  ›  Redis

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

  •  
  •   Youngda · 2019-03-16 19:47:13 +08:00 · 10463 次点击
    这是一个创建于 2077 天前的主题,其中的信息可能已经有所发展或是发生改变。
    知道指令

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

    总是使不对,
    或者使用 BITOP 可以实现么?
    或者大佬们还有其他想法吗?
    //set test a
    //值 0110 0001
    //求置成 11111111
    7 条回复    2019-03-17 10:07:17 +08:00
    newlifeinsc
        1
    newlifeinsc  
       2019-03-16 20:28:03 +08:00 via Android
    bit 操作的实际上也是普通的字符串,你直接通过 set key xxx 命令就可以了
    Youngda
        2
    Youngda  
    OP
       2019-03-16 21:38:48 +08:00 via Android
    @newlifeinsc 知道这个,貌似没有全 1 的 ASCII,想找一步到位的那种…
    newlifeinsc
        3
    newlifeinsc  
       2019-03-16 21:56:32 +08:00   ❤️ 1
    @Youngda 没有 ascii,直接操作二进制啊, redis-cli 上没试过可不可以。你用的什么语言,像 nodejs 的话, ioredis 直接 set Buffer 类型, 在程序里设置 这个 Buffer 的二进制全是 1 就可以了, 其他语言应该也有类似的。0 的话,直接把这个 key 删掉就可以了
    leoleoasd
        4
    leoleoasd  
       2019-03-16 22:30:03 +08:00   ❤️ 1
    1<<n
    Youngda
        5
    Youngda  
    OP
       2019-03-16 23:07:14 +08:00 via Android
    @newlifeinsc 谢谢,我试试
    newlifeinsc
        6
    newlifeinsc  
       2019-03-16 23:13:20 +08:00
    @Youngda 另外,我记得这里还有一个坑,redis 里单个字节内的位的顺序和平时使用的是反的,如设置的二进制 0x0f,按常理说是 0-3 是 1,而 redis 是 7-4, 即 0 对应 7, 1-6 这种顺序
    Youngda
        7
    Youngda  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2779 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:30 · PVG 08:30 · LAX 16:30 · JFK 19:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.