BitMap 原本的含义是用一个比特(bit)位来映射某个元素的状态。由于一个比特位只能表示 0 和 1 两种状态,所以 BitMap 能映射的状态有限。但是使用 bit 位的优势是能大量的节省内存空间。本文将介绍怎样通过 jedis 库操作 Redis 的 BitMap 数据类型。
用来将提供的偏移量的一个位设置为 0 或 1。方法定义如下:
Boolean setbit(String key, long offset, boolean value) 设置或清除存储在 key 上的字符串值中的偏移位
用来返回在给定偏移处位的值。方法定义如下:
Boolean getbit(String key, long offset) 返回存储在 key 处的字符串值中偏移的位值
示例:
// 将偏移量0位置的值设置为1 jedis.setbit("mykey", 0, "1"); // 将偏移量1位置的值设置为1 jedis.setbit("mykey", 1, true); // 获取偏移量0和1位置的值 Boolean val1 = jedis.getbit("mykey", 0); System.out.println("val1=" + val1); // val1=true Boolean val2 = jedis.getbit("mykey", 1); System.out.println("val2=" + val2); // val2=true
用来让你对一个或多个字符串进行位操作,将结果存储到目标 key 中。方法定义如下:
Long bitop(BitOP op, String destKey, String... srcKeys)
其中,BitOP 是一个枚举对象,有如下值:
BitOP.AND 与
BitOP.NOT 非
BitOP.OR 或
BitOP.XOR 异或
示例:
// 准备数据 jedis.setbit("mykey1", 0, true); jedis.setbit("mykey2", 0, false); // 对 mykey1 和 mykey2 进行与运算 jedis.bitop(BitOP.AND, "target", "mykey1", "mykey2"); Boolean val = jedis.getbit("target", 0); System.out.println("val=" + val); // val=false // 对 mykey1 和 mykey2 进行或运算 jedis.bitop(BitOP.OR, "target", "mykey1", "mykey2"); val = jedis.getbit("target", 0); System.out.println("val=" + val); // val=true // 对 mykey1 进行取反运算 // 注意,BitOP.NOT 只允许传递一个 key jedis.bitop(BitOP.NOT, "target", "mykey1"); val = jedis.getbit("target", 0); System.out.println("val=" + val); // val=false // 对 mykey1 和 mykey2 进行异或运算 jedis.bitop(BitOP.XOR, "target", "mykey1", "mykey2"); val = jedis.getbit("target", 0); System.out.println("val=" + val); // val=true