Redis 数据类型及其常用命令二(bitmap、geo、hyperloglog、bitfield、stream)

news2024/11/26 2:03:51

        上文中我们介绍了Redis常使用的5中数据类型,对于一些特殊的场景,我们需要使用特殊的数据类型,本文将详细介绍5种特殊的数据类型。

1、bitmap 类型

        用String类型作为底层数据结构实现的一种统计二值状态的数据类型。位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量( 我们称之为一个索引)。Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512 M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)。

# 1、设置值
setbit key offset value # value 只能是 0 或 1
# 2、获取值
getbit key offset
# 3、统计占用bit数,不是字符串长度,超过8位后自己按照8位一组一byte再扩容
strlen key
# 4、统计全部键中1的个数
bitcount key
# 5、位运算(and、or ...)
bitop AND|OR|XOR|NOT destkey key [key ...]
2、HyperLoglog 类型

        在Redis里面,每个HyperLoglog键只需花费12KB内存,就可以计算2^64个不同元素的基数。该数据类型可以去除重复统计的基数估算方法(一种数据集,去除重复元素后真实个数)。

# 1、添加元素
pfadd key v1 v2 v3 ...
# 2、返回HyperLoglog的基数估算值
pfcount key1 key2 ...
# 3、将多个HyperLoglog合并成一个
pfmerge destkey key1 key2 key3 ...
3、 geo 地理空间

        地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名取得他在地球的位置

# 1、存储指定的地理空间
GEOADD key 经度 纬度 地名 经度1 纬度1 地名1 ...
# GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" 116.024067 40.362639 "长城"
# 2、返回指定的地名的经纬度
GEOPOS key 地名1 地名2 ...
# 3、返回地理位置的hash值
geohash key 地名1 地名2 ...
# 4、返回两个位置之间的距离
geodist key 地名1 地名2 [M|KM|FT|MI]  # 米|千米|英尺|英里
# 5、以给定的经纬度为中心, 距离不超过给定最大距离的所有位置元素
georadius key 经度 纬度 距离 km withdist withcoord count 10 withhash desc
# WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
# WITHCOORD: 将位置元素的经度和维度也一并返回。
# WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大
# COUNT 限定返回的记录数。
4、 bitfield 类型

        这个里类型不常用,简单了解即可。bitfield是将一个Redis字符串看作一个二进制数组,并能对变长位宽和任意没有字节对齐的指定整型域进行寻址和修改。

BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
5、Steam 类型

        Stream 类型是Redis5.0版本新增的数据结构,实现消息队列,支持消息持久化、支持自动生成全局唯一ID,支持ack确认消息模式,支持消费者组模式等,就是Redis实现MQ。一般消息队列使用其他中间件实现,如果是小型项目可以考虑Stream数据类型,具体使用将在后续有使用场景时介绍。

6、总结

        本文介绍了Redis 另外五种数据结构:bitmap、geo、hyperloglog、bitfield、stream,从使用命令入手,熟悉每个数据结构的使用场景和使用方式,帮助大家更加深入熟悉Redis。

·        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty是如何解决JDK中的Selector的bug的?

Selector BUG: JDK NIO的BUG, 例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%, 官方声称在JDK 1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生 概率降低了一些而已&#x…

阿里云备案服务器多少钱一年?

ICP备案服务器太贵了,有便宜的吗?有啊,支持备案的服务器只要61元一年。备案服务器入口 https://t.aliyun.com/U/bLynLC 链接打开后,如下图: 阿里云轻量2核2G3M服务器61元一年 如上图所示,这台61元服务器可以…

【动态规划】【组合数学】1866. 恰有 K 根木棍可以看到的排列数目

作者推荐 【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II 本文涉及知识点 动态规划汇总 LeetCode1866. 恰有 K 根木棍可以看到的排列数目 有 n 根长度互不相同的木棍,长度为从 1 到 n 的整数。请你将这些木棍排成一排,并满足从左侧 可以…

Leetcoder Day16| 二叉树 part05

语言:Java/C 513.找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 本题需要满足两…

多线程系列(一) -线程技术入门知识讲解

一、简介 在很多场景下,我们经常听到采用多线程编程,能显著的提升程序的执行效率。例如执行大批量数据的插入操作,采用单线程编程进行插入可能需要 30 分钟,采用多线程编程进行插入可能只需要 5 分钟就够了。 既然多线程编程技术…

2024年2月前端技术新动态:迈向现代化的全速前进

随着技术的不断进步,前端领域每月都有新的变化和挑战。2024年2月,我们见证了几项重大的技术更新,从Deno的性能提升到Turborepo的重大改进,再到jQuery 4.0.0 Beta的发布,这些变化不仅标志着前端开发向着更现代化、更高效…

Eclipse 设置 tab width 为 4 个空格 (spaces)

Eclipse 设置 tab width 为 4 个空格 [spaces] References Window -> Preferences -> General -> Editors -> Text Editors,选中右侧的 Insert space for tabs. Apply and Close. Window -> Preference -> C -> Code Style -> Formatter&a…

python使用工厂模式和策略模式实现读文件、分析内容功能

当涉及到在 Python 中创建类以及使用设计模式来实现读取文件和分析内容的功能时,我们可以考虑使用工厂模式和策略模式的结合。下面是一个简单的示例,演示如何通过创建类和使用设计模式来实现这一功能: # 工厂模式:根据不同的分析…

直接选择排序算法

​​​​​​目录 选择排序 SelectSort直接选择排序 整体思路 图解分析 ​ 代码实现 时间复杂度 选择排序 基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排…

Stable Diffusion ComfyUI安装详细教程

上一篇文章介绍了sd-webui的安装教程,但学习一下ComfyUI这种节点流程式的对理解AI绘画有较大帮助,而且后期排查错误会更加方便,熟练后用这种方式做AI绘画可玩性会更多。 文章目录 一、安装包说明二、安装文件介绍三、安装步骤四、汉化五、云主…

Mysql 权限与安全管理

0 引言 MySQL是一个多用户数据库,具有功能强大的访问控制系统,可以为不同用户指定允许的权限。MySQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户的密码等管理权限&…

qt-交通路口仿真

qt-交通路口仿真 一、演示效果二、核心代码三、程序链接 一、演示效果 二、核心代码 #include "generator.h"Generator::Generator(SimulationScene *scene):m_scene(scene),m_mode(VEHICLEMETHOD::GO_THROUGH),m_running_state(false),m_VisionOn(false),m_IsInter…

AI时代教师如何修炼内功

AI时代教师如何修炼内功 How Teachers Can Cultivate Their Inner Strength in the Age of AI 在AI时代,教师的角色和职责正在经历前所未有的变革。随着人工智能技术的不断进步,教育领域出现了许多新的工具和方法,这些新发展要求教师提升自身…

MySQL系列之索引入门(下)

前言 通过上文,我想各位盆友已熟悉MySQL的索引分类及其含义,那么如何合理的使用呢? 请继续围观此文,一探究竟! 一、创建索引 首先,我们一起学习索引是如何创建的,又有哪些方式。 1. create t…

IO线程进程

代码练习 使用fread和fwrite完成两个文件的拷贝 #include<myhead.h>int main(int argc, const char *argv[]) {FILE *fp NULL;//重新以只读的形式打开文件if((fp fopen("./OIP-C.bmp", "r")) NULL){perror("fopen error");return -1;…

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…

阿里云服务器CPU内存配置怎么选择够用?

阿里云服务器配置怎么选择&#xff1f;根据实际使用场景选择&#xff0c;个人搭建网站可选2核2G配置&#xff0c;访问量大的话可以选择2核4G配置&#xff0c;企业部署Java、Python等开发环境可以选择2核8G配置&#xff0c;企业数据库、Web应用或APP可以选择4核8G配置或4核16G配…

【已解决】引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

这种问题产生一般都会手足无措&#xff0c;包括笔者&#xff0c;但是不要慌&#xff0c;这种问题一般都是内存泄漏引起的。例如读者要访问一个已经被析构或者释放的变量&#xff0c;当然访问不了&#xff0c;导致存在问题。这时候读者应该从哪里产生内存泄漏这方面进行考虑&…

【C深剖】数组名的细节

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 引言&#xff1a;我想我说的这个数组名细节可能很多人并没有留意&#xff0c;现在先来C设计者这样设计也很合理。 就是数组名本质上是一个指针&#xff0c;但是这个指针的内容也就是说指向的空间是固定的&#xff0c…

IO 作业 24/2/19

1> 使用fread和fwrite完成两个文件的拷贝 #include <myhead.h> int main(int argc, const char *argv[]) {//定义被复制文件指针FILE *fp1NULL;if((fp1fopen("./111.bmp","r"))NULL){perror("error open");return -1;}//定义目标文件指…