Redis中BitMap技术简介及应用

Redis中BitMap技术简介及应用,第1张

BitMap是一串连续的二进制数字(0和1),类似于位数组,每一位所在的位置为偏移量(offset),类似于数组索引,BitMap就是通过最小的单位bit来进行0|1的设置,时间复杂度位O(1),表示某个元素的值或者状态。由于bit是计算机中最小的单位,使用它进行储存将非常节省空间。特别适合一些数据量大的场景。例如,统计每日活跃用户、统计每月打卡数等统计场景。1天记录1000W用户的活跃统计数据,只需要10000000/8/1024/1024 ≈12M。

Redis从220版本开始新增了setbit,getbit,bitcount,bitop等几个BitMap相关命令,虽然是新命令,但是并没有增加新的数据类型,它还是属于String类型。Redis中的BitMap最大占用内存大小限制在512M之内,即2^32。

设置某个key的指定偏移量的value值为0或者1,key不存在时自动生成一个新的字符串值,字符串会进行伸展,该偏移量前面的位值默认为0,偏移量offset参数必须大于等于0,小于2^32。

时间复杂度:O(1)

返回值:指定偏移量存储的值

示例:

获取key指定偏移量上的值,当key不存在时,返回0。

时间复杂度:O(1)

返回值:指定偏移量上存储的值

示例:

统计给定key中,被设置为1的比特位的数量,可以通过start和end参数设置范围。

时间复杂度:O(n)

返回值:key中被设置为1的数量

示例:

对一个或多个key进行位 *** 作,并将结果保存到destkey上。 *** 作方式可以是AND、OR、NOT、XOR这四种,除了NOT *** 作之外,其他 *** 作可接收多个key。

时间复杂度:O(n)

返回值:保存到destkey的字符串的长度

示例:

签到需求:

之前的应用都是统计总数,但如果业务需要,有时也可能需要获取用户ID,来做下一步 *** 作。

Bitmap是Android系统中的图像处理的最重要的类之一。用它可以获取图像文件信息,对图像进行旋转,剪切,放大,缩小等 *** 作。

Bitmap代表一张位图,使我们在开发中常用的资源,下面就对Bitmap进行简单的介绍。

Bitmap的获取方法:

1、使用BitmapDrawable

    BitmapDrawable里封装的就是一个Bitmap对象,我们要把Bitmap包装成BitmapDrawable对象,可以调用BitmapDrawable的构造方法:

BItmapDrawbale drawable = new BItmapDrawable(bitmap);

如果要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap()方法:

Bitmap bitmap = drawbalegetBitmap();

2、Bitmap提供了一些静态方法来创建Bitmap对象(仅列举几个):

    createBitmap(Bitmap source,int x,int y,int width,int height):从原位图source的指定坐标(x,y)开始,从中挖取宽width,高heigtht的一块出来,创建新的Bitmap对象。

createScaledBitmap(Bitmap source,int width,ing height,boolean fliter):对源位图进行缩放,缩放称宽width,高heigth的新位图。

createBitmap(int width,int height,BitmapConfig config):创建一个宽width,高height的可变的新位图。

createBitmap(Bitmap source, int x,int y,int width,int height ,Matrix m,boolean fliter):从源位图source的指定坐标(x,y)开始,挖取宽width,高height的一块来,创建新的Bitmap对象,并按照Matrix指定的规则进行变换。

3、通过对资源文件的解析获取Bitmap对象

    在这里就要用到BitmapFactory这个工具类,提供的方法如下:

decodeByteArray(byte[] data, int offset,int length):从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象。

decodeFIle(String pathName):从pathName指定的文件中解析、创建Bitmap对象。

decodeFileDescriptor(FileDescriptor fd):用于从FileDescriptor对应的文件中解析、创建Bitmap对象。

decodeResource(Resource res,int id):用于根据给定的资源ID从指定的资源文件中解析、创建Bitmap对象。

decodeStream(InputStream is):用于从指定输入流中介解析、创建Bitmap对象。

但是,在系统不断的解析、创建Bitmap的过程中,可能会由于内存小或其他原因,导致程序运行时发生OutOfMemory错误。

为此,Android为Bitmap提供了内存回收方法:

void recycle():强制回收Bitmap对象。

还有用于判断Bitmap 对象是否被回收的方法:

boolean isRecycle();

如果Android应用需要访问系统相册,都需要借助BitmapFactory解析、创建Bitmap对象。

4 从安卓无忧中看bitmap的几种例子,下面是加载bitmap的例子,可以看里面的源码:

如果您对答案满意,请您关注一下名字中微博。

ID是在资源模块中来管理资源内容的。你已经得到了资源内容,再给它赋一个ID是没有意义的。况且也没有API来执行这个 *** 作。

每个包含资源的模块,都有一个资源记录表,通过ID匹配到资源数据的地址。所以咱们使用资源的时候,知道ID就行了。

以上就是关于Redis中BitMap技术简介及应用全部的内容,包括:Redis中BitMap技术简介及应用、怎么给bitmap赋值 android、MFC 给Bitmap对象指定ID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9300597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存