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

文章目录

    • redis位图(bitmap) --- 底子还是string
      • 基本命令图示
      • `setbit key offset value` setbit 键 偏移位 只能零或者1
      • `getbit key offset` 查看
      • 获取字符串长度 `strlen`
      • 统计key中包含1的个数 `bitcount key`
      • `bitop` 统计两个比特key是否都为1
      • 技术落地:打卡签到,频繁修改数据库的,结果只有0和1
    • redis基数统计(HyperLogLog) --- 底子是string
      • UV:Unique Visitor,独立访客;统计搜索词条
      • 基数统计算法
      • 基数
      • 基本命令图示
      • 基数落地:天猫统计亿级UV
    • redis地理空间 (GEO) --- 底子上是有序集合
      • 获取经纬度
      • 添加经纬度坐标 `GEOADD key 经度1 纬度1 位置名称1 经度2 纬度2 位置名称2...`
        • 处理中文乱码
      • `GEOPOS key value1 value2` 从键里面返回所有给定位置元素的位置 (经度和纬度)
      • `GEODIST key value1 value2 [m | km | ft | mi] ` 返回两个给定位置之间的距离
      • `GEORADIUS key 经度 纬度 10km...` 以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素
      • `GEORADIUSBYMEMBER key value 10km ...` 跟GEORADIUS类似
      • `GEOHASH key value1 value2` 返回一个或多个位置元素的 Geohash 表示
    • redis流 (Stream) --- 自成一脉stream
      • 底层结构与原理
      • 基础命令图示
      • 特殊符号
      • 向队列添加消息到队列末尾 `XADD key * id 1 cname z3`
      • 范围检索 `XRANGE key start end [COUNT count]`
      • `XREVRANGE KEY + - `
      • `XDEL key MQID` 按照主键删除
      • `XLEN key` 消息队列长度
      • 截取 `XTRIM key maxlen|minlen 2`
      • 读取消息(阻塞、非阻塞),只会返回ID大于某值的消息 `XREAD [COUNT count] stream key ID`
      • 消费组执行-`XGROUP`
      • 消费组执行-`XREADGROUP GROUP`
      • 重要问题-ACK机制
      • `XPENDING` 查询每个消费组内所有消费者 r已读取、但尚未确认]的消息
      • `XACK` 向消息队列确认消息处理已完成
      • `XINFO stream key` 打印出详情信息
    • redis位域(bitfield)
      • 应用、用途 --- 位域修改、溢出控制
      • 基本语法 `BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]`
      • `BITFIELD key [GET type offset]`
      • `BITFIELD key [SET type offset value]`
      • `BITFIELD key [INCRBY type offset increment]`
      • `溢出控制OVERFLOW [WRAPISAT|FAIL]`

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

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

在这里插入图片描述

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

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

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

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

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

  • 获取经纬度

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

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

    在这里插入图片描述

    处理中文乱码

    在这里插入图片描述

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

    在这里插入图片描述

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

    ft:英尺;mi英里

    在这里插入图片描述

  • 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 限定返回的记录数。
    

    在这里插入图片描述

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

    在这里插入图片描述

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

    geohash算法生成的base32编码值

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

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位域(bitfield)

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

在这里插入图片描述

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

    在这里插入图片描述

    hello 等价于 0110100001100101011011000110110001101111

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

    在这里插入图片描述

  • BITFIELD key [GET type offset]

    hello 等价于 0110100001100101011011000110110001101111

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

  • BITFIELD key [SET type offset value]

    在这里插入图片描述

  • BITFIELD key [INCRBY type offset increment]

    在这里插入图片描述

  • 溢出控制OVERFLOW [WRAPISAT|FAIL]

    • WRAP:使用回绕 (wrap around) 方法处理有符号整数和无符号整数的溢出情况
      在这里插入图片描述

    • SAT:使用饱和计算 (saturation arithmetic)方法处理溢出下溢计算的结果为最小的整数值,而上溢计算的结果为最大的整数值
      在这里插入图片描述

    • FAIL:命令将拒绝执行那些会导致上溢或者下溢情况出现的计算并向用户返回空值表示计算未被执行
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5288.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言蓝桥杯每日一题】——等差数列

【C语言蓝桥杯每日一题】——等差数列😎前言🙌等差数列🙌解题思路分析:😍解题源代码分享:😍总结撒花💞😎博客昵称:博客小梦 😊最喜欢的座右铭&…

让ChatGPT帮我写shell脚本, 结局很感人

七问ChatGPT, 剑指shell脚本编写 step1: 初问step2: 再问step3: 三问step4: 四问step5: 五问step6: 问个derstep7: 解决问题step8: 小问一下关于ChatGPT思考昨天浏览一篇关于脚本的技术文章的时候, 偶然看见一篇文章中写道关于mysql备份的脚本. 但是这个脚本时基于本地的MySQL服…

Idea+maven+spring-cloud项目搭建系列--13 整合MyBatis-Plus多数据源dynamic-datasource

前言:对于同一个系统,不同的租户需要自己独立分隔的数据库(每个数据库的表结构可以是相同的),同时也要支持跨数据源的查询;并且支持分布式事务,如果这里不使用分库分表插件,需要怎样…

使用dd复制将乌班图系统(Ubuntu22.04)完整迁移到新硬盘并扩容

我的折磨历程 开始的时候用乌班图的时候,不懂事,根目录太小了,后来就满了,就就感觉完全没法用,看着现在硬盘贼便宜,去狗东买了个新的硬盘。感觉挂载硬盘并不能解决我的问题,最后选择了保留系统数…

ython和PyTorch实现ChatGPT批量AI智能写作

怎么实现用chatgpt批量写作 ChatGPT是一种针对文本生成的自然语言处理工具,它可以用于生成大量的文本内容。但是,由于ChatGPT需要的计算资源较大,处理时间较长,因此在批量写作时需要考虑花费的时间和资源。 以下是一些步骤&…

又一个免费GPT-4工具 Cursor,程序员写代码将被颠覆

每天都被openai震撼到, 他们家被广为人知的产品是chatgpt,就是那个聊天工具。现在已经开始有越来越多的产品集成openai,比如微软的office,bing。现在又一个工具出现,一个叫Cursor的编辑器已经集成了openai的GPT-4&…

Spring系列(六) --- SpringBoot 与 Servlet 的比较及 Spring 读取配置文件的方式

SpringSpringBoot VS ServletSpring 读取配置文件的方式yml 和 properties 的区别SpringBoot VS Servlet Spring 读取配置文件的方式 1 Value 注解获取单个配置项 如在 yml 中定义一个 qq 音乐的 token; 然后输出, 如下: 2 针对对象的读取: ConfigurationProperties 在 yml 中…

YOLOv5添加辅助训练头

1. 介绍 思路 添加 Aux head 的主要原因是让网络中间层学到更多信息,有更丰富的梯度信息帮助训练。这里要注意,好的梯度信息能够让相同参数量的网络学的更好。 作者原文为: By letting the shallower auxiliary head directly learn the information that lead head has l…

【C#基础】泛型的概念?有什么例子?在游戏中有什么可以使用的地方?

概念 让chatGpt来为我们讲解。 在C#中,泛型是一种允许开发人员编写可重用代码,可以处理多种数据类型的特性。 使用泛型,可以创建类、方法、接口和委托这种不属于任何特定数据的类型,但可以处理满足某些约束条件的任何数据类型。…

手机银行评测系列:北京银行“京彩生活”7.0从用户视角出发,实现沉浸式体验重塑

易观:2023年3月28日,北京银行发布“京彩生活”APP 7.0版本,从旅程再造、特色金融、场景生态、平台联动、协同经营、体验管理和安全守护七大方面全面升级,从用户视角出发,重塑用户旅程,简化操作流程&#xf…

PDF Extra(安卓)

首先,软件是一个一体化的扫描仪和编辑器,工具主要包含有编辑,创建,转换,阅读和查看,其它等等多个功能类型。 编辑里面包含有编辑文本和图像,填写并签署,组织页面,压缩&am…

PLG 基础概念和关键点

什么是 PLGPLG 是 Product Led Growth 的缩写,常翻译为产品增长或产品主导型增长。这个概念最早是风投公司 OpenView 2016年提出的。定义:PLG 是一个聚焦终端用户的增长模型,依赖于产品自身作为获取、转化、扩展客户的核心动力。• 以产品来驱…

入行软件测试7年,才知道原来字节跳动这么容易进

当前就业环境,裁员、失业消息满天飞,好像有一份工作就不错了,更别说高薪了。其实这只是一方面,而另一方面,各大企业依然求贤若渴,高技术人才依然紧缺,只要你技术过硬,拿个年薪50w不是…

vue3快速上手

Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…

核心 Android 调节音量的过程

核心 Android 系统提供的调节音量的方法 核心 Android 系统提供了多种调节音量的方法,这些方法主要包括如下这些。 如在 Android Automotive 调节音量的过程 中我们看到的,CarAudioService 最终在 CarAudioDeviceInfo 中 (packages/services/Car/servi…

开源DataX集成可视化项目Datax-Web的使用

上一篇文章我们已经搭建好了 Datax-Web 后台,这篇文章我们具体讲一下如何通过Datax-Web来配置,同步MySQL数据库。 目标 MySql数据库全量同步 1.执行器配置 1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会…

红黑树、B树以及B+树及应用

目录 一.二叉查找树(二叉搜索树,BST) 1.1查找操作 1.2插入操作 1.3删除操作 1.4支持重复数据的二叉查找树 1.5二叉查找树的性能分析 二.平衡二叉查找树 2.1定义 2.2红黑树 2.3为什么红黑树这么受欢迎 三.哈希表为什么不能替代二叉查找树 四.MySQL数据库索…

基于springboot实现学生综合成绩测评系统【源码】分享

基于springboot实现学生综合成绩测评系统演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包…

机器学习模型部署PMML

PMML 简介 预测模型标记语言PMML(Predictive Model Markup Language)是一套与平台和环境无关的模型表示语言,是目前表示机器学习模型的实际标准。从2001年发布的PMML1.1,到2019年最新4.4,PMML标准已经由最初的6个模型…

python+vue高校教务选课管理系统django

1. 简介:学生选课系统是学校管理中不可缺少的一部分,它将方便教师发布课程信息、学生浏览课程信息和选课,为两者提供充分的课程信息和方便的查询手段,极大的提高人事劳资管理的效率。 2. 功能:实现基于B/S架构学…