深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

这篇具有很好参考价值的文章主要介绍了深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

Stream

geospatial

HyperLogLog

Bitmaps

Bitfields


前言


redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛,同时 redis 也推出了额外的 5 个数据类型,他们分别是针对特殊场景才进行的应用的.

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

Ps:这几种类型的具体使用不用记,记你也记不住,因为不常用,因此我们只需要了解其对应的应用场景,需要的时候去官方文档一查就清楚了~

Stream


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

Stream 就是一个阻塞队列,是 redis 作为消息队列的重要支撑,属于是 List 的 blpop / brpop 的升级版本.

Stream 类型,按照官方文档的意思,就是用来模拟实现事件传播机制~  

事件是什么?例如以下两个场景:

  1. epoll / io 多路复用:每次网卡 / socket 上有可读可写的数据,都会通过这种事件回调的机制来通知到咱们的应用程序代码.
  2. JS:点击事件、键盘事件、窗口大小改变 / 位置改变事件.

简单来讲,就是有些操作,我们也不知道什么时候出现,只能等这个事件出现之后,再采取动作.

geospatial


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

 用来存储坐标,就是经纬度的.

存储了一些点之后,就可以让用户给定一个坐标,去刚才存储的点中查找(按照半径,矩形区域...),这个功能在 “地图” 应用中非常重要~

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

HyperLogLog


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

应用场景只有一个,就是用来估算集合中元素的个数.

Set 有一个应用场景就是统计 UV(多少个不同用户进行了访问) ,但问题在于一旦数据非常大,Set 就会消耗很多的内存空间~

假设 Set 存储 userId,每个按照 8 字节计算,1亿 UV = 8 亿字节,相当于 800 MB,而使用 HyperLogLog 最多会使用 12KB 的空间.

Ps:HyperLogLog 不存储元素的内容,但是能够记录 “元素的特征”(具体实现,看源码才知道,核心思路是“位操作”),从而在新增元素的时候,能够知道新增元素,是一个存在的元素,还是一个新元素~

因此,HyperLogLog 只用来计数(记录当前集合有多少个不同的元素 => 多少个不同用户访问了你这个服务器),但是不能告诉你这些元素是啥~

Bitmaps


深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

 使用 bit 位来表示整数,存储的底层数据结构式位图~

位图的本质还是一个集合,属于式 Set 类型针对整数优化的特殊版本(节省空间)

对比 HyperLogLog:

HyperLogLog 既可以存储数字也可以存储字符串,但是不存储元素内容,只是计数效果,因此 hyperloglog 存储元素,提取特征的过程是不可逆的(信息丢失),例如给你个猪肉,可以做成火腿肠,但是给你火腿肠是还原不回猪肉的。

Bitfields

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

bitfields 和 C 语言中的位域是很相似的~

bitfield 可以理解成一串二进制序列(字节数组),同时可以把这个字节数组中的几个位,赋予特殊的含义,并可以进行 读取/修改/算数运算 等操作.

位域相比较 String / hash 来说,目的是为了节省空间.

使用场景就是游戏中的杀怪计数:

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展,学习,redis,数据库文章来源地址https://www.toymoban.com/news/detail-613211.html

到了这里,关于深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索Redis特殊数据结构:Geospatial(地理位置)在实际中的应用

    Redis官方提供了多种数据类型,除了常见的String、Hash、List、Set、zSet之外,还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic(HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Configuration)和Time series。这些数据类型在Redis的数据结构中发挥着各自独特的作用。

    2024年02月20日
    浏览(44)
  • Redis中3大特殊数据结构(2)-HyperLogLog

    HyperLogLog算法是法国人Philippe Flajolet 教授发明的一种 基数计数概率算法 ,每个 HyperLogLog 键只需要花费 12 KB 内存 ,就可以计算接近 2^64 个 不同元素 的基数。HyperLogLog 适用于 大数据量的去重统计 ,HyperLogLog 提供 不精确的去重计数方案 ,虽然不精确但是也不是非常不精确,

    2024年02月11日
    浏览(41)
  • Redis--HyperLogLog的指令语法与使用场景举例(UV统计)

    前言 Redis除了常见的五种数据类型之外,其实还有一些少见的数据结构,如Geo,HyperLogLog等。虽然它们少见,但是作用却不容小觑。本文将介绍HyperLogLog指令的语法和使用场景。 HyperLogLog介绍 HyperLogLog是Redis提供的一种不准确(标准误差为0.81%)的去重计数方案。 提到去重计数

    2024年01月21日
    浏览(50)
  • Redis:原理速成+项目实战——Redis企业级项目实战终结篇(HyperLogLog实现UV统计)

    👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成+项目实战——Redis实战14(BitMap实现用户签到功能) 📚订阅专栏:Redis:原理速成+项目实战 希望文章对你们有所帮助 这篇是实战部分的终结篇,其实Redis的核心操作,主要是

    2024年01月17日
    浏览(50)
  • Redis教程——Redis bitmap位图操作(图解)

    在平时开发过程中,经常会有一些 bool 类型数据需要存取。比如记录用户一年内签到的次数,签了是 1,没签是 0。如果使用 key-value 来存储,那么每个用户都要记录 365 次,当用户成百上亿时,需要的存储空间将非常巨大。为了解决这个问题,Redis 提供了位图结构。 位图(

    2024年01月21日
    浏览(40)
  • Redis的BitMap使用

    Redis 为我们提供了位图这一数据结构,每个用户每天的登录记录只占据一位,365天就是365位,仅仅需要46字节就可存储,极大地节约了存储空间。 位图不是实际的数据类型,而是一组面向位的操作 在被视为位向量的字符串类型上定义。 由于字符串是二进制安全 blob,其最大长

    2024年02月07日
    浏览(42)
  • redis之Bitmap

    位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已(二进制位数组)。 GETBIT 用于返回位数组在偏移量上的二进制位的值。 值得我们注意的是, GETBIT 的时间复杂度是 O(1) 。 GETBIT 命令的执行过程如下: 计算 (即 3 ),by

    2024年02月15日
    浏览(32)
  • Redis - Bitmap

    操作String数据类型的key所存储的字符串指定偏移量上的位,返回原位置的值 优点: 节省空间通过一个bit位来表示某个元素对应的值或者状态,其中key就是对应元素的值。实际上8个bit可以组成一个Byte,所以是及其节省空间的 效率高setbit 和 getbit的时间复杂度都是O(1),其他位运

    2024年02月15日
    浏览(52)
  • Redis之bitmap类型解读

    目录 基本介绍 基本命令  Setbit  Getbit  BITCOUNT  应用场景 统计当日活跃用户 用户签到 bitmap - Redis布隆过滤器 (应对缓存穿透问题) 基本介绍 Redis 的位图(bitmap)是由多个二进制位组成的数组,只有两种状态,0和1, 数组中的每个二进制位都有与之对应的偏移量(从 0 开始)

    2024年02月11日
    浏览(36)
  • Redis的3大特殊数据类型(1)-BitMap

    BitMap(位图/位数组) 是Redis2.2.0版本中引入的一种新数据类型,该数据类型本质是一个 仅含0和1 的二进制字符串。因此可以把 Bitmap 想象成一个 以位为单位的数组 ,数组的每个单元 只能存储 0 和 1 ,数组的下标在 Bitmap 中叫做偏移量 offset,bitmap默认值都为0. BitMap底层实际上使

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包