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实践 -位图的主要内容,如果未能解决你的问题,请参考以下文章

Redis进阶学习10---redis最佳实践

Redis实践

Redis入门实践

Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单

Redis进阶实践之四Redis的基本数据类型

Redis最佳实践