1.目录

  • 什么是位图
  • 位图的作用
  • 基本使用

2.什么是位图

位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合。由于字符串类型是二进制安全的二进制大对象,并且最大长度是 512MB,适合于设置 2^32个不同的位。

3.位图的作用

在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到 记录,签了是 1,没签是 0,要记录 365 天。如果使用普通的 key/value,每个 用户要记录 365 个,当用户上亿的时候,需要的存储空间是惊人的。

为了解决这个问题,Redis 提供了位图数据结构,这样每天的签到记录只占据一 个位,365 天就是 365 个位,46 个字节 (一个稍长一点的字符串) 就可以完全容 纳下,这就大大节约了存储空间。

4.基本使用

1)零存零取

127.0.0.1:> setbit w
(integer)
127.0.0.1:> getbit w
(integer)

2)整存零取

127.0.0.1:> set w h
(integer)
127.0.0.1:> getbit w
(integer)
127.0.0.1:> getbit w
(integer)
127.0.0.1:> getbit w
(integer)
127.0.0.1:> getbit w
(integer)

4.统计和查找

 Redis 提供了位图统计指令 bitcount 和位图查找指令 bitpos,bitcount 用来统 计指定位置范围内 1 的个数,bitpos 用来查找指定范围内出现的第一个 0 或 1。

 

 

 

Redis(三)位图的更多相关文章

  1. 搭建Redis三主三从集群

    Redis三主三从集群规划 10.0.128.19   使用端口 7000  7001 10.0.128.22   使用端口 7002  7003 10.0.128.23   使用端口 7004  7 ...

  2. 【Redis的那些事 · 续集】Redis的位图、HyperLogLog数据结构演示以及布隆过滤器

    一.Redis位图 1.位图的最小单位是bit,每个bit的值只能是0和1,位图的应用场景一般用于一些签到记录,例如打卡等. 场景举例: 例如某APP要存储用户的打卡记录,如果按照正常的思路来做,可能 ...

  3. redis(三)-----redis基本数据类型

    Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...

  4. redis(三)redis+Keepalived主从热备秒级切换

    一 简介 安装使用centos 5.10 Master 192.168.235.135 Slave 192.168.235.152 Vip 192.168.235.200 编译环境 yum -y in ...

  5. 高可用Redis(三):Hash类型

    1.哈希类型键值结构 哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value 其中field部分代表属性,value代表属性对应的值 上面的图里,us ...

  6. redis应用--位图

    在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天.如果使用普通的 key/value,每个用户要记录 365 个,当用户上亿 ...

  7. Jedis连接Redis三种模式

    这里说的三种工作模式是指: 1.单机模式 2.分片模式 3.集群模式(since 3.0) 说明图详见以下: 使用单机模式连接: private String addr="192.168.1 ...

  8. Redis(三):windows下Redis的安装配置以及注意事项

    一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...

  9. Linux-NoSQL之Redis(三)

    一.Redis数据常用操作 1.string常用操作 set key1  aminglinux get key1 set key1  aming //一个key对应一个value,多次赋值,会覆盖前面 ...

  10. python实现redis三种cas事务操作

    cas全称是compare and set,是一种典型的事务操作. 简单的说,事务就是为了存取数据库中同一数据时不破坏操作的隔离性和原子性,从而保证数据的一致性. 一般数据库,比如MySql是如何保证 ...

随机推荐

  1. sqlite 使用

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  2. Linux 之 文件搜索命令

    文件搜索命令 参考教程:[千峰教育] 文件搜索定位 grep: 作用:通用规则表达式分析程序,是一种强大的文本搜索工具, 它能使用正则表达式搜索文本,并把匹配的行打印出来. 格式:grep [选项] ...

  3. BZOJ 1044 木棍分割(二分答案 + DP优化)

    题目链接  木棍分割 1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3830  Solved: 1453[S ...

  4. 计蒜客 UCloud 的安全秘钥(随机化+Hash)

    题目链接 UCloud 的安全秘钥 对于简单的版本,我们直接枚举每个子序列,然后sort一下判断是否完全一样即可. #include <bits/stdc++.h> using names ...

  5. Java原子类及内部原理

    一.引入 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作是原子操作.再比如:a++: 这个操作实际是a = a + ...

  6. javascript 对象初探 (三)--- 传递/比较对象

    传递对象 当我们拷贝某个对象或者将对象传递给某个函数时,往往传递的都是该对象的引用.因此我们在该对象的引用上做任何改动,实际上都会影响到引用的原对象. var she = {num:1}; var h ...

  7. Android基础新手教程——3.7 AnsyncTask异步任务

    Android基础新手教程--3.7 AnsyncTask异步任务 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务 ...

  8. VS&quot;后生成事件&quot; 菜单的使用

    网上有很多的文章都在介绍怎样创建一个自己定义的dll文件,以及怎样使用一个dll文件,在此不在赘述.本文主要介绍怎样使用VS2008的"生成后事件"的命令行,将一个dll文件直接复 ...

  9. android wifi state and wifi ap state

    /** * Wi-Fi is currently being disabled. The state will change to {@link #WIFI_STATE_DISABLED} if * ...

  10. project管理之makefile与自己主动创建makefile文件过程

    (风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自己主动编译和链接使用的环境 想知道到Linux Makefile系 ...