Redis实践 -位图
Posted viscu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis实践 -位图相关的知识,希望对你有一定的参考价值。
主要是记录一下Redis的setbit的用法。
- 一个字符串,我们如何用Redis的setBit保存下来。
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.BitSet;
public class BitMapTest {
private static final String REDIS_PATH="127.0.0.1"; //ip地址
private static final int REDIS_PORT=6379; //端口号
private static final String REDIS_AUTH="iostream";
private static final JedisPool jedisPool;
static {
//配置JedisPool
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(10);
final int timeout=2000;
jedisPool=new JedisPool(config,REDIS_PATH,REDIS_PORT,timeout,REDIS_AUTH);
}
private static int pos=0; //pos是记录下一个字符是从哪个开始的 假设第一个字符h第一个bit的pos是0,那么第二个字符e的第一个bit的pos是8,累加上去的。
private static void solve(String binStr,Jedis jedis){
//因为我们用Integer.toBinaryString会省略高位的0
//所以我们需要把0先补上
StringBuilder sb=new StringBuilder();
if(binStr.length()<8){
for(int i=0;i<8-binStr.length();++i){
sb.append(0);
}
sb.append(binStr);
}
binStr=sb.toString();
for(int i=0;i<8;++i){
if(binStr.charAt(i)==‘0‘){
jedis.setbit("test",pos+i,false);
}else {
jedis.setbit("test",pos+i,true);
}
}
pos+=8;
}
public static void main(String[] args) {
Jedis jedis=jedisPool.getResource();
String s="hello";
try {
for (int i = 0; i < s.length(); i++) {
String binStr=Integer.toBinaryString(s.charAt(i));
//将取ASCII编的值并转化成二进制 一个char是两个字节(byte) 1byte=4bit 一个char有8bit 所以上限是127.
//byte和bit的区别要记得
solve(binStr,jedis);
}
System.out.println(jedis.get("test"));
}finally {
jedis.close();
}
}
}
以上是关于Redis实践 -位图的主要内容,如果未能解决你的问题,请参考以下文章