首页 > 其他 > 详细

Redis实践 -位图

时间:2018-10-19 15:38:29      阅读:133      评论:0      收藏:0      [点我收藏+]

主要是记录一下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实践 -位图

原文:https://www.cnblogs.com/viscu/p/9816585.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!