V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Youngda
V2EX  ›  Redis

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

  •  
  •   Youngda · Mar 16, 2019 · 11273 views
    This topic created in 2605 days ago, the information mentioned may be changed or developed.
    知道指令

    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 replies    2019-03-17 10:07:17 +08:00
    newlifeinsc
        1
    newlifeinsc  
       Mar 16, 2019 via Android
    bit 操作的实际上也是普通的字符串,你直接通过 set key xxx 命令就可以了
    Youngda
        2
    Youngda  
    OP
       Mar 16, 2019 via Android
    @newlifeinsc 知道这个,貌似没有全 1 的 ASCII,想找一步到位的那种…
    newlifeinsc
        3
    newlifeinsc  
       Mar 16, 2019   ❤️ 1
    @Youngda 没有 ascii,直接操作二进制啊, redis-cli 上没试过可不可以。你用的什么语言,像 nodejs 的话, ioredis 直接 set Buffer 类型, 在程序里设置 这个 Buffer 的二进制全是 1 就可以了, 其他语言应该也有类似的。0 的话,直接把这个 key 删掉就可以了
    leoleoasd
        4
    leoleoasd  
       Mar 16, 2019   ❤️ 1
    1<<n
    Youngda
        5
    Youngda  
    OP
       Mar 16, 2019 via Android
    @newlifeinsc 谢谢,我试试
    newlifeinsc
        6
    newlifeinsc  
       Mar 16, 2019
    @Youngda 另外,我记得这里还有一个坑,redis 里单个字节内的位的顺序和平时使用的是反的,如设置的二进制 0x0f,按常理说是 0-3 是 1,而 redis 是 7-4, 即 0 对应 7, 1-6 这种顺序
    Youngda
        7
    Youngda  
    OP
       Mar 17, 2019
    @leoleoasd 谢谢指点
    @newlifeinsc 我试了一下,set test a //getbit test 0-7,顺序是 0110 0001

    今天又仔细阅读了一下文档,测试了一下,用这条指令可以实现,bitfield test set i8 0 -1//从第 0 个位开始,将接下来的 8 个位用无符号数 -1 替换,再 getbit 就是 1111 1111
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   881 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:02 · PVG 03:02 · LAX 12:02 · JFK 15:02
    ♥ Do have faith in what you're doing.