- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
PAGE2
Redis深度探索:解锁高级应用与性能优化
一、Redis高级数据结构探秘
Redis作为一款高性能的内存数据库,不仅支持常见的字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(SortedSet)数据结构,还提供了一些高级数据结构,这些高级数据结构为解决复杂的业务问题提供了更高效、更灵活的方案。
1.1位图(Bitmap)
位图并不是一种真正的数据类型,而是定义在字符串类型上的面向位的操作集合。Redis使用字符串对象来表示位数组,因为字符串对象使用的SDS(简单动态字符串)数据结构是二进制安全的,程序可以直接使用SDS结构来保存位数组,并使用SDS结构的操作函数来处理位数组。它的最大优点之一是在存储信息时通常可以节省大量空间,由于字符串类型的最大长度是512MB,这意味着位图适合于设置2^32个不同的位。
位图的操作分为两组:一是常量时间单个位的操作,如设置一个位为1或者0,或者获取该位的值;二是对一组位的操作,例如计算指定范围位的置位数量。常用命令如下:
SETBITkeyoffsetvalue:设置或者清空key的value(字符串)在offset处的bit值(只能是0或者1),offset为负数或者浮点数时,执行报错。例如SETBITsign01表示设置sign个key对应值的第0位为1。
GETBITkeyoffset:获取key的value(字符串)在offset处的bit值。如GETBITsign0可获取上述设置的第0位的值。
BITCOUNTkey[startend]:获取key的value(字符串)所有比特位设置为1的总个数,start和end参数指的是字节的索引,不是位的索引。比如BITCOUNTsign计整个字符串中为1的位个数,BITCOUNTsign00则是计算第一个字节中为1的位数。
BITPOSkeybit[start][end]:返回字符串里面第一个被设置为1或者0的bit位,start和end参数同样指的是字节的索引。例如BITPOSsign1查找第一个为1的位。
位图在实际应用中有诸多场景,比如记录用户一年的签到情况。一年365天的签到情况只有签到了或者没签到两种情况,非常适合用位图的0和1来表示。一年只需要365位就足够记录一个用户的签到情况,365位只需要46个字节(一个字节有8位)就可以完全容纳下,大大节约了存储空间。可以设置功能上线当天比如2020-1-1为索引0,后面签到的时候日期做一个差值就可以算出来位数。查询某个时间段的签到情况时,由于redis中并没有批量查询位图的命令,只有单个查询getbit,所以只能一个个执行,为了减少网络开销,可以通过管道或者写lua脚本来批量查询。统计用户的签到总天数可以使用BITCOUNTuidkey00。
1.2超日志(HyperLogLog)
HyperLogLog是一种用于基数统计的算法,基数指的是一个集合中不重复元素的数量。在面对数亿级别的数据时,传统的去重统计方法不仅计算量大,而且消耗大量的存储空间,HyperLogLog则以一种非常节省空间的方式解决了这个问题。它是一种概率型数据结构,通过统计学方法对数据进行采样和估算,以极低的内存消耗(通常只需要几千个字节)实现对大规模数据集中唯一元素的近似计数。其核心思想是利用哈希函数的特性,将输入数据映射到位向量中,并观察哈希值中连续零的最长序列长度,以此来估计数据集中不同元素的数量。虽然它的计算结果是一个估计值,但准确率非常高,通常误差率仅为0.81%。
Redis提供了三个主要的命令来操作HyperLogLog数据结构:
PFADDkeyelement[element…]:将一个或多个元素添加到HyperLogLog中,如果HyperLogLog不存在,则会创建一个新的HyperLogLog。例如PFADDuvuser1user2user3,向uv个HyperLogLog结构中添加三个用户。
PFCOUNTkey[key…]:返回一个或多个HyperLogLog的估算基数,如果指定了多个HyperLogLog,Redis会计算这些HyperLogLog的并集的基数估算
您可能关注的文档
- Python+LLM实战:LangChain本地AI知识库搭建全攻略x.docx
- qt4.8.4移植到linux3.4.2_qt程序移植到an.doc
- Matlab实现GWO-SVMD灰狼算法GWO优化逐次变分模态分解SVMD的详细项目实例含模型描述及示例代码x.docx
- IEEECoverletter_ieee的coverlett英文模版文档.doc
- Android FTP服务器上传文件攻略服务器上传文件攻略(代码详解代码详解).pdf
- 解决Tensorflow内存泄露问题_tensorflow内.pdf
- zoutendijk可行方向法的matlab实现(可编辑修改word版)x.docx
- 《从0到1:Dify全攻略,开启AI应用开发新时代》_从0到.doc
- 元器件应用中的电容并联特性及反谐振.pdf
- 步进电机#1脉冲方向输出配置.pdf
- 学术大佬常用的50个神级ChatGPT写学术论文专业提示词指.docx
- 简析带开关电位器接线图.pdf
- 故障诊断MATLAB实现基于EEMD-MSPE-LSTM集合.docx
- 【光伏功率预测】项目介绍Python实现基于VMD-NRBO.docx
- MATLAB实现基于MSPE-KPCA-LSTM多尺度排列熵MSPE结合核主成分分析KPCA和长短期记忆网络LSTM进行故障诊断分类预测测的详细项目实例含模型描述及部分示例代码x.docx
- TPS40057PWP的技术参数_40057资源.pdf
- 网站运营商业计划书.doc
- 从12V到plusmn;15V电路_AC_DCAD电子.pdf
- MATLABMATLAB实现基于Transformer-SV文档.docx
- 变频器中IGBT爆炸原因分析,深入透彻!_igbt炸管原因资.pdf
原创力文档


文档评论(0)