Redis是in-memery的数据库,其优势不言而喻。
详细可以阅读一下官网的介绍。https://redis.io

其主要有五种数据类型:strings,lists,sets,hashes。
在学习到strings类型的常见命令的时候,对GETBITSETBIT的意义并不是非常了解,所以就搜索了一下相关文章。看到一篇介绍GETBITSETBIT的应用的文章,感觉非常强大,记录如下:

我们在登陆某些博客网站或者视频网站的时候,网站往往会记录我们是否阅读了某篇文章,或者是观看了某个视频。

如果用传统的mysql数据库实现,如果用户数量多,文章和视频也多的情况下,那么则会给数据库带来很大的压力。

而用Redis的GETBIT和SETBIT则会简单得多。
我们以视频为例,我们用bitmap来记录用户们是否已经观看了某一个视频,一个视频对应一个bitmap。例如

key:   video:1201
value: 000000...0000

key以视频英文名video+冒号+id标记。
value就是一个bitmap。一位(bit)有两种可能,0或者1。0代表未看,1代表已经看过了。
而位置(offset)代表的就是user id。例如第200位就代表user_id为200的用户是否观看过id为1201的视频。

设置

# SETBIT key offset value

SET video:1201 200 1
# 上面的命令就是设置ID为200的用户,已经看过了ID为1201的视频。

查询

# GETBIT key offset
GETBIT video:1201 200
# 上面的命令就是查询ID为200的用户是否观看了ID为1201的视频

当然您也可以一个用户对应一个bitmap,bitmap中的位代表一个视频是否已经被观看。

另外文章中也将到目前非常流行的打卡或者是登陆记录也可以用相似的设计实现。
例如用一个bitmap记录所有用户的登陆情况,bitmap中的一位代表一个用户当天是否有登陆,0代表没登陆,1代表有登陆。
每天生成一个bitmap。

通过统计多天bitmap就可以实现统计活跃用户之类的操作了。

Redis中的GETBIT和SETBIT(转载)的更多相关文章

  1. Redis中的GETBIT和SETBIT

    来自:https://www.cnblogs.com/K-artorias/p/8463286.html Redis是in-memery的数据库,其优势不言而喻. 在学习到strings类型的常见命令 ...

  2. redis中setbit的用法

    原文地址:http://www.zhihu.com/question/27672245 在redis中,存储的字符串都是以二级制的进行存在的.举例:设置一个 key-value ,键的名字叫“andy ...

  3. 05 redis中的Setbit位图法统计活跃用户

    一:场景=>>>长轮询Ajax,在线聊天时,能够用到 Setbit 的实际应用 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活 ...

  4. Redis中的数据结构与常用命令

    开发系统:Ubuntu 17.04Redis驱动:StackExchange.Redis 1.2.3Redis版本:3.2.1开发平台:.NET Core 对于Redis的介绍这里只写一句:Redis ...

  5. Redis中bitmap的妙用

    BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间. Redis中的 ...

  6. 3、Redis中对String类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  7. Redis中关于Hash键的一些问题

    Hash键存在的意义: 1.Hash键可以将信息凝聚在一起,而不是直接分散的存储在整个Redis中,这不仅方便了数据管理,还可以尽量避免一定的误操作: 2.避免键名冲突: 3.减少内存占用.(最重要的 ...

  8. Redis中3种特殊的数据类型(BitMap、Geo和HyperLogLog)

    前言 Reids 在 Web 应用的开发中使用非常广泛,几乎所有的后端技术都会有涉及到 Redis 的使用.Redis 种除了常见的字符串 String.字典 Hash.列表 List.集合 Set. ...

  9. Redis 中 BitMap 的使用场景

    BitMap BitMap 原本的含义是用一个比特位来映射某个元素的状态.由于一个比特位只能表示 0 和 1 两种状态,所以 BitMap 能映射的状态有限,但是使用比特位的优势是能大量的节省内存空间 ...

随机推荐

  1. Redis(三)

    1.服务器部署好redis后 在项目里边添加 StackExchange.Redis.dll (可以去nuget下载) 2.添加SERedisHelper.cs  里边有  对应的缓存的相关方法 us ...

  2. 将Windows 7安装到移动固态硬盘(U盘)

    由于工作的原因,有时需要用两台电脑工作,而搞开发的人大多又是追求计算机性能的人,所以笔记本电脑自然不轻,更何况两台. 两台电脑折磨我半年多,终于下定决心将个系统安装到移动固态硬盘中,背一台无硬盘电脑加 ...

  3. 编写DVWA暴力破解High级别的Python脚本

    1. 过程(不查看源代码) 使用burpsuite或者owasp zap抓取数据包,可以看出页面执行过程如下: 首先获取上一次请求的token,然后sleep几秒,最后使用get方法提交验证. 2. ...

  4. unix文件共享

    UNIX系统支持在不同的进程间共享打开文件.内核使用3种数据结构表示打开文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程产生的影响. (1)每个进程在进程表中都有一个记录项,记录项中包含一 ...

  5. 获取http-post请求的原生报文

    BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8&q ...

  6. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  7. Java 访问控制规则简介

    1. 概述 老生常谈的内容 巩固一下自己 要摇摇欲坠的基础 内容确实不怎么高级... 2. 常规解释 1. 概述 简单说下什么情况 在单纯考虑 public, protected, 以及 privat ...

  8. texterea 水平居中

    例子:<div style="width: 100%;text-align: center;"> <textarea class="xinde_msg& ...

  9. [BZOJ2738]矩阵乘法-[整体二分+树状数组]

    Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. (N<=500,Q<=60000) Solution 考虑二分答案,问题转化为求矩阵内为1 ...

  10. (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...