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

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

  •  
  •   Youngda · 219 天前 · 7815 次点击
    这是一个创建于 219 天前的主题,其中的信息可能已经有所发展或是发生改变。
    知道指令

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

    今天又仔细阅读了一下文档,测试了一下,用这条指令可以实现,bitfield test set i8 0 -1//从第 0 个位开始,将接下来的 8 个位用无符号数 -1 替换,再 getbit 就是 1111 1111
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2743 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 00:45 · PVG 08:45 · LAX 17:45 · JFK 20:45
    ♥ Do have faith in what you're doing.