当前位置: 首页 > news >正文

【Redis】类型补充

类型补充

  • 一. Streams
    • 命令:xadd、xread、xrange、xlen
  • 二. Geospatial
    • 命令:geoadd、getpos、geodist、georadius
  • 三. HyperLogLog
    • 命令:pfadd、pfcount、pfmerge
  • 四. Bitmaps
    • 命令:setbit、getbit、bitop、bitcount
  • 五. Bitfields
    • 命令:bitfield

一. Streams

Streams:流,用于实现高效的消息队列和实时数据流处理,也可以用来模拟实现事件传播的机制。

  • 事件:IO 多路复用,每次 网卡/socket 上有可读可写的数据都会通过事件回调机制来通知到我们的应用程序代码。
  • Streams 就是一个队列 (阻塞队列),是 Redis 作为一个消息队列的重要支撑,属于是 list 的 blpop/brpop 的升级版本。

命令:xadd、xread、xrange、xlen

这个数据结构用的不多,需要用时,查找文档即可。

二. Geospatial

Geospatial:地理空间,用来存储坐标 (经纬度),存储一些点后,就可以让用户给定一个坐标,取刚才存储的点里进行查找 (按照半径,矩形区域…),这个功能在地图中非常重要。

  • Geospatial 拥有高效存储和查询、和丰富的地理操作。
  • 应用场景:位置跟踪、附近搜索。

命令:geoadd、getpos、geodist、georadius

  • geoadd:添加元素的地理位置。
  • 语法:geoadd key longitude latitude member [longitude latitude member ...]

在这里插入图片描述

  • getpos:查找元素的地理位置。
  • 语法:geopos key member [member ...]

在这里插入图片描述

  • geodist:计算两个元素地理位置之间的距离。
  • 语法:geodist key member1 member2 [m|km|ft|mi]

在这里插入图片描述

  • georadius:查询指定半径内的地理位置。
  • 语法:georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

在这里插入图片描述

三. HyperLogLog

HyperLogLog:基数统计,使用少量内存的情况下,统计集合中不重复元素的数量,但是存在 0.81% 的误差。

  • set 有一个应用场景是,统计服务器的 UV (用户访问次数),其中最大的问题是,如果 UV 数据量非常大 (这里取 1 亿),set 就会消耗很多的内存空间,假设 set 存储 userId,每个 userId 按照 8 个字节计算,1 亿 UV 等于 8 亿字节,也就是 0.8 GB,也就是 800 MB
  • 而使用 HyperLogLog,只需要 12KB 的内存,就可以处理任意数量的输入,并且可以处理的数量是巨大的,达到 2^64 数量级。
  • 之所以 set 要消耗这么大的空间,因为 set 需要存储每一个元素,而 HyperLogLog 不存储元素的内容,但是能够记录 “元素的特征”,从而在新增元素的时候,能够知道当前新增的元素,是已经存在的元素,还是第一次出现的元素。
  • HyperLogLog 只是用于计数,记录当前集合中存在多少个不同的元素,而不能告诉你这些元素都是什么,无论是插入元素还是查询元素的个数,时间复杂度都是 O(1)

命令:pfadd、pfcount、pfmerge

  • pfadd:向集合中添加元素
  • 语法:pfadd key element [element ...]
  • 时间复杂度:O(1)

在这里插入图片描述

  • pfcount:求集合中不相同的元素个数。
  • 语法:pfcount key [key ...]
  • 时间复杂度:O(1)

在这里插入图片描述

  • pfmerge:合并集合中的元素个数,存储在目标集合中。
  • 语法:pfmerge destkey sourcekey [sourcekey ...]

在这里插入图片描述

四. Bitmaps

Bitmaps:使用少量内存的情况下,统计某个整数是否出现。

  • HyperLogLog 更加节省空间,既可以存储数值,也可以存储字符串,但是不会存储元素的内容,只是起到计数的效果,存储数据的时候是不可逆的 (信息丢失)
  • Bitmaps 会存储整数,设置和获取的时间复杂度是 O(1)

命令:setbit、getbit、bitop、bitcount

  • setbit:设置位图某个偏移量的值。
  • 语法:setbit key offset value
  • 时间复杂度:O(1)

在这里插入图片描述

  • getbit:获取位图中某个偏移量的值。
  • 语法:getbit key offset
  • 时间复杂度:O(1)
  • 返回值:位图中某个偏移量的值。

在这里插入图片描述

  • bitop:将位图之间按位操作,存储在目标位图中。
  • 语法:bitop operation destkey key [key ...]
    • 其中的 operation 存在四种:or、and、xor、not;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • bitcount:统计位图中某个偏移量区间中被设置为 1 的个数。
  • 语法:bitcount key [start end]

在这里插入图片描述

五. Bitfields

Bitfields:位域也叫位段,本质上是让我们精确进行位操作的一种方法。

  • 上述 Redis 中的 Bitfields 与 C语言 中的位段,非常类似,Bitfields 可以理解成一串二进制序列 (字节数组),同时可以把这个字节数组中的某几个位,赋予特定的含义,并且可以进行 读取/修改/算数运算 相关操作,仍然是为了节省空间。

命令:bitfield

  • 语法:bitfield key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
    • bitfield key set type offset value:设置位域中的某个偏移量,为某个类型并赋值。
    • bitfield key get type offset:获取位域中的某个偏移量,中的某个类型的值。
    • bitfield key incrby type offset increment:位域中的某个偏移量,某个类型的值进行加减运算。
  • 时间复杂度:O(1)

在这里插入图片描述

相关文章:

  • 墨者学院-密码学实训隐写术第二题
  • [闭源saas选项]Pinecone:为向量数据库而生的实时语义搜索引擎
  • 【网络安全】XSS攻击
  • Spring AI(10)——STUDIO传输的MCP服务端
  • MyBatis-Plus深度全解:从入门到企业级实战
  • idea json生成实体类
  • 【Git系列】如何同步原始仓库的更新到你的fork仓库?
  • Spring之事务管理方式
  • Ubuntu系统配置C++的boost库(含filesystem模块)的方法
  • 自驾总结_Prediction
  • 沉金电路板工艺解析:从原理到应用的全面指南
  • 面向开发者的提示词工程③——文本总结(Summarizing)
  • 麒麟信安系统下修改系统默认记录日志大小
  • mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
  • [Java恶补day16] 238.除自身以外数组的乘积
  • [蓝桥杯]全球变暖
  • 常见排序算法时间、空间复杂度总结
  • vue-19(Vuex异步操作和变更)
  • Python训练营打卡Day45
  • Spring Boot统一功能处理深度解析
  • 用jsp做的动态网站/宁波seo费用
  • 网站app制作平台/google chrome官网
  • 怎么样制作网站教程/关键词排名查询工具免费
  • 七牛镜像 wordpress/2020做seo还有出路吗
  • 旅游网站建设的目标/北京网站建设
  • f2c网站建设/如何进行网络营销推广