【Redis】十大数据类型(下篇)

这篇具有很好参考价值的文章主要介绍了【Redis】十大数据类型(下篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

redis位图(bitmap) — 底子还是string

由0和1状态表现的二进制位的bit数组
位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。

【Redis】十大数据类型(下篇)

  • 基本命令图示

    【Redis】十大数据类型(下篇)

  • setbit key offset value setbit 键 偏移位 只能零或者1

    Bitmap的偏移量是从零开始算的

    【Redis】十大数据类型(下篇)

  • getbit key offset 查看

  • 获取字符串长度 strlen

    不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容

    【Redis】十大数据类型(下篇)

  • 统计key中包含1的个数 bitcount key

    【Redis】十大数据类型(下篇)

  • bitop 统计两个比特key是否都为1

    【Redis】十大数据类型(下篇)

  • 技术落地:打卡签到,频繁修改数据库的,结果只有0和1

redis基数统计(HyperLogLog) — 底子是string

HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
记录的不是数据本身,而是统计数;是去重脱水后的真实数据
统计本身也存在些许误差,误差范围在0.81%

  • UV:Unique Visitor,独立访客;统计搜索词条

  • 基数统计算法

    【Redis】十大数据类型(下篇)

  • 基数

    是一种数据集,去重复后的真实个数

    【Redis】十大数据类型(下篇)

  • 基本命令图示

    【Redis】十大数据类型(下篇)
    【Redis】十大数据类型(下篇)

  • 基数落地:天猫统计亿级UV

redis地理空间 (GEO) — 底子上是有序集合

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括
添加地理位置的坐标。
获取地理位置的坐标。
计算两个位置之间的距离。
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
核心思想就是将球体转换为平面,区块转换为一点

【Redis】十大数据类型(下篇)【Redis】十大数据类型(下篇)

  • 获取经纬度

    百度提供的api:https://api.map.baidu.com/lbsapi/getpoint/

  • 添加经纬度坐标 GEOADD key 经度1 纬度1 位置名称1 经度2 纬度2 位置名称2...

    【Redis】十大数据类型(下篇)

    处理中文乱码

    【Redis】十大数据类型(下篇)

  • GEOPOS key value1 value2 从键里面返回所有给定位置元素的位置 (经度和纬度)

    【Redis】十大数据类型(下篇)

  • GEODIST key value1 value2 [m | km | ft | mi] 返回两个给定位置之间的距离

    ft:英尺;mi英里

    【Redis】十大数据类型(下篇)

  • GEORADIUS key 经度 纬度 10km... 以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素

    GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
    GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc

    WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
    WITHCOORD: 将位置元素的经度和维度也一并返回。
    WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大
    COUNT 限定返回的记录数。
    

    【Redis】十大数据类型(下篇)

  • GEORADIUSBYMEMBER key value 10km ... 跟GEORADIUS类似

    【Redis】十大数据类型(下篇)

  • GEOHASH key value1 value2 返回一个或多个位置元素的 Geohash 表示

    geohash算法生成的base32编码值

    【Redis】十大数据类型(下篇)
    【Redis】十大数据类型(下篇)

redis流 (Stream) — 自成一脉stream

Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失
总结:redis流就是Redis版的MQ消息中间件+阻塞队列

  • 底层结构与原理

    【Redis】十大数据类型(下篇)
    【Redis】十大数据类型(下篇)

  • 基础命令图示

    【Redis】十大数据类型(下篇)
    【Redis】十大数据类型(下篇)

  • 特殊符号

    符号 含义
    -+ 最小和最大可能出现的Id
    $ $ 表示只消费新的消息,当前流中最大的id,可用于将要到来的信息
    > 用于XREADGROUP命令,表示迄今还没有发送给组中使用者的信息,会更新消费者组的最后ID
    * 用于XADD命令中,让系统自动生成id
  • 向队列添加消息到队列末尾 XADD key * id 1 cname z3

    • 消息ID必须要比上个 ID 大

    • 默认用星号表示自动生成规矩

      * 用于XADD命令中,让系统自动生成 id

      【Redis】十大数据类型(下篇)

    • 客户端显示传入规则:

      Redis对于ID有强制要求,格式必须是时间戳-自增Id这样的方式,且后续ID不能小于前一个ID

  • 范围检索 XRANGE key start end [COUNT count]

    • 用于获取消息列表 (可以指定范围忽略删除的消息
    • start 表示开始值,-代表最小值
    • end 表示结束值,+代表最大值
    • count 表示最多获取多少个值
      【Redis】十大数据类型(下篇)
  • XREVRANGE KEY + -

    与XRANGE 的区别在于,获取消息列表元素的方向是相反的,end在前,start在后

  • XDEL key MQID 按照主键删除

    【Redis】十大数据类型(下篇)

  • XLEN key 消息队列长度

    【Redis】十大数据类型(下篇)

  • 截取 XTRIM key maxlen|minlen 2

    【Redis】十大数据类型(下篇)

    允许的最小id,从某个id值开始比该id值小的将会被抛弃

    【Redis】十大数据类型(下篇)

  • 读取消息(阻塞、非阻塞),只会返回ID大于某值的消息 XREAD [COUNT count] stream key ID

    【Redis】十大数据类型(下篇)

    非阻塞

    【Redis】十大数据类型(下篇)

    阻塞

    【Redis】十大数据类型(下篇)

  • 消费组执行-XGROUP

    【Redis】十大数据类型(下篇)

    • $表示从Stream尾部开始消费
    • 0表示从Stream头部开始消费
    • 创建消费者组的时候必须指定 ID, ID 为 0 表示从头开始消费,为 $ 表示只消费新的消息,队尾新来
  • 消费组执行-XREADGROUP GROUP

    • > 表示从第一条尚未被消费的消息开始读取

    • 消费组groupA内的消费者consumer1从mystream消息队列中读取所有消息
      【Redis】十大数据类型(下篇)

    • 但是,不同消费组的消费者可以消费同一条消息
      【Redis】十大数据类型(下篇)

    • 负载均衡

      让组内的多个消费者共同分担读取消息,所以,我们通常会让每个消费者读取部分消息,从而实现消息读取负载在多个消费者间是均衡分布的

      【Redis】十大数据类型(下篇)

  • 重要问题-ACK机制

    【Redis】十大数据类型(下篇)

  • XPENDING 查询每个消费组内所有消费者 r已读取、但尚未确认]的消息

    查询每个消费组内所有消费者 r已读取、但尚未确认]的消息

    【Redis】十大数据类型(下篇)

    查看某个消费者具体读取了哪些数据

    【Redis】十大数据类型(下篇)

    下面抓图所示:consumer2已读取的消息的 ID是1659430293537-0

    • 一旦消息1659430293537-0被consumer2处理了consumer2就可以使用 XACK 命令通知 Streams,然后这条消息就会被删除

    【Redis】十大数据类型(下篇)

  • XACK 向消息队列确认消息处理已完成

    【Redis】十大数据类型(下篇)
    【Redis】十大数据类型(下篇)

  • XINFO stream key 打印出详情信息

    【Redis】十大数据类型(下篇)

redis位域(bitfield)

通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
将一个Redis字符串看作是一个由二进制位组成的数组并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改

【Redis】十大数据类型(下篇)

  • 应用、用途 — 位域修改、溢出控制

    【Redis】十大数据类型(下篇)

    hello 等价于 0110100001100101011011000110110001101111

  • 基本语法 BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]

    【Redis】十大数据类型(下篇)

  • BITFIELD key [GET type offset]

    hello 等价于 0110100001100101011011000110110001101111

    【Redis】十大数据类型(下篇)【Redis】十大数据类型(下篇)

  • BITFIELD key [SET type offset value]

    【Redis】十大数据类型(下篇)

  • BITFIELD key [INCRBY type offset increment]

    【Redis】十大数据类型(下篇)

  • 溢出控制OVERFLOW [WRAPISAT|FAIL]

    • WRAP:使用回绕 (wrap around) 方法处理有符号整数和无符号整数的溢出情况
      【Redis】十大数据类型(下篇)

    • SAT:使用饱和计算 (saturation arithmetic)方法处理溢出下溢计算的结果为最小的整数值,而上溢计算的结果为最大的整数值
      【Redis】十大数据类型(下篇)

    • FAIL:命令将拒绝执行那些会导致上溢或者下溢情况出现的计算并向用户返回空值表示计算未被执行
      【Redis】十大数据类型(下篇)文章来源地址https://www.toymoban.com/news/detail-429313.html

到了这里,关于【Redis】十大数据类型(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Redis十大数据类型

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏: Redis7从实战到高级 🥭本文内容: Redis十大数据类型 🖥️个人小站 :个人博客,欢迎大家访问 📚个人知识库:

    2024年02月09日
    浏览(34)
  • 【Redis】十大数据类型(上篇)

    命令官网 英文版:https://redis.io/commands/ 中文版:http://redis.cn/commands.html/ Key命令 命令不区分大小写,但是key区分 命令 说明 keys * 查看当前库所有的key exists key 判断某个key是否存在,返回1表示存在,返回0表示不存在 type key 查看你的key是什么类型 del key 删除指定的key数据 unli

    2023年04月15日
    浏览(36)
  • redis十大数据类型的说明和常用命令

    表1.1 十大数据类型 类型 说明 String (字符串) 最基本的数据类型,可以存储字符串、整数或浮点数 List (列表) 一种有序的字符串列表,支持从两端插入和删除元素 Hash (哈希表) 一种 key-value 存储结构,用于存储对象,类似于关联数组 Set (集合) 一种无序的字符串集合,支持交集

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

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

    2024年02月11日
    浏览(37)
  • 深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

    目录 前言 Stream geospatial HyperLogLog Bitmaps Bitfields redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛,同时 redis 也推出了额外的 5 个数据类型,他们分别是针对特殊场景才进行的应用的. Ps:这几种类型的具体使用不用记,记你也记不住,因为不常用,因此我们

    2024年02月15日
    浏览(62)
  • Redis高级数据结构之Bitmaps

    现代计算机使用二进制位作为信息存储的基本单元。一个字节(Byte)等于8个二进制位(bit)。合理的使用位能有效提高内存使用率和开发效率。 位是最小信息单位,可以表示两个状态之一。 字节是更大的单位,用多个位组成,在计算机中数据以字节为单位进行存储和访问。

    2024年02月07日
    浏览(37)
  • 【数据结构和算法】位图 BitMap

    2024年02月14日
    浏览(42)
  • Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计

    在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合。 常见的场景如下: 给一个 userId ,判断用户登陆状态; 显示用户某个月的签到次数和首次签到时间; 两亿用户最近 7 天的签到情况,统计 7 天内连续签到的用户总数; 通常情况下,我们面

    2024年02月02日
    浏览(58)
  • Java中利用BitMap位图实现海量级数据去重

    🏷️ 个人主页 :牵着猫散步的鼠鼠  🏷️ 系列专栏 :Java全栈-专栏 🏷️ 个人学习笔记,若有缺误,欢迎评论区指正 目录 前言 什么是BitMap?有什么用? 基本概念 位图的优势 位图的劣势 BitMap和Int的区别 使用场景 BitMap在Java中的使用 有许多方法可以用来去重,比如使用列

    2024年04月10日
    浏览(41)
  • redis7高级篇3 数据量亿级别的统计分析(hyperloglog,bitmap,geo)

    1.聚合统计:统计多个集合聚合的结果,也就是多个集合之间交并差的统计。 2.排序统计:在需要展示最新列表,排行榜等场景时,如果数据更新频繁或者需要分页时,建议使用zset127.0.0.1:6379 zadd pl  111222 beijing 111223 tianjing 111333 shanghai (integer) 3 127.0.0.1:6379 zrange pl 0 1 1) \\\"beijin

    2024年02月11日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包