3.Redis的数据结构

3、Redis数据结构 当存入kv时,对key进行hash运算,得到的结果作为dictEntry[]数组的下标,这个kv就存储在这个下标对应的dictEntry *table(存储kv的哈希桶)中。如果不同的key进行hash运算后得到相同的结果,即发生hash冲突,dictEntry[]数组这个位置,就会以dictEntry *table链表的形式,存储所有的kv值。Hyperloglogs提供了一种不太精确的基数统计方法,用来统计一个集合中不重复的元素个数,比如统计网站的UV,或者应用的日活、月活,存在一定的误差。 阅读详情

Redis的数据结构

Redis支持String、Hash、List、Set和Sorted Set五种数据类型。

Redis内部使用一个redisObject对象来表示所有的key和value。

 

字符串类型 String

简介:可以存储任何形式的字符串,一个字符串类型键允许存储的数据的最大容量是512MB。

常用命令:set/get/decr/incr/mget等;

应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;

实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

命令示例:SET key value / GET key

散列类型 Hash

简介:散列类型适合存储对象,使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。

常用命令:hget/hset/hgetall等

应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;

实现方式:Redis的Hash实际是内部存储的Value为一个 HashMap,并提供了直接存取这个Map成员的接口。这个Map的key是成员的属性名,value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的 Key(Redis里称内部Map的key为field),也就是通过 key+ field(属性标签)就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

命令:HSET key field value / HGET key field  ( HMSET key field value [fielld value ...]  / HMGET key field [field ...])


列表类型 List

简介:列表类型可以存储一个有序的字符串列表,常用的操作是向列表的两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表实现的,向两端添加删除元素较快,但通过索引访问元素较慢。

常用命令:lpush/rpush/lpop/rpop/lrange等;

应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;

实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

命令:LPUSH key value [value ...] / RPUSH key value [value ...] / LPOP key / RPOP key / LRANGE key start stop


集合类型 Set

简介:集合中每个元素都是不同的,且没有顺序。常用操作是向集合中加入或删除元素、判断某个元素是否存在等,集合类型在Redis内部是使用值为空的散列表实现的,所以这些操作较快。集合类型键之间还可以进行并集、交集和差集运算。

常用命令:sadd/spop/smembers/sunion等;

应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;

实现方式:set的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

命令:SADD key member [member ...] / SREM key member [member ...] / SDIFF key [key ...] / SINTER key [key ...] / SUNION key [key ...]


有序集合类型 Scored Set

简介:在集合类型的基础上有序集合类型为集合中的每一个元素都关联了一个分数,按照这个分数对每个元素进行排序。我们进行获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等于分数有关的操作。虽然集合中每个元素都是不同的,但是他们的分数却可以相同。有序集合可以调整某个元素的位置,通过更改该元素的分数。

常用命令:zadd/zrange/zrem/zcard等;

应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

命令:ZADD key score member [score member ...] / ZSCORE key member / ZRANGE key start stop [WITHSCORES] / ZREVRANGE key start stop [WITHSCORES]


固定时间收敛的控制器设计(基础知识) 针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。 阅读详情

相关推荐

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 374

【分布式】Redis分布式之ScoreSortedSet

使用 package com.demo.redis.zset; import org.redisson.api.RScoredSortedSet; import org.redisson.api.RedissonClient; import org.redisson.client.codec.StringCodec; import org.redisson.client.protocol.ScoredEntry; import org.springframework.stereotype.Componen

比嗨皮兔 2899

HFSS仿真中如何提取最大E/H场强与频率关系曲线

本文详细讲解了在HFSS仿真中提取最大E/H场强与频率关系曲线的完整流程。通过使用场计算器(Field Calculator)和创建场报告,工程师可以准确获得器件在整个频带内的电场或磁场强度峰值,并进一步推导出关键的功率容量曲线,为高功率射频器件(如滤波器、耦合器)的设计提供至关重要的安全评估依据。

ss78901的博客 1095

Redis五大数据类型之ZSet(Scores Set)类型-常用命令

命令: zadd 格式: zadd [key值] scores[key] value 示例: zadd people 10 v1 20 v2 30 v3 40 v4 50 v5 60 v6 70 v7 创建一个zset名为people,它的key:10值为v1,key:20值为v2…以此类推 注意: scores[key]值必须为数字,这样zset才可以排序进行比较。 命令: zrang...

u014268482的博客 8852

Linux Wireless之80211(nl80211, cfg80211, mac80211)

Linux Wireless之80211(nl80211, cfg80211, mac80211)前言在Linux无线子系统中,cfg80211、mac80211和nl80211是三个关键的组件,它们共同工作以实现对802.11设备的配置和管理。cfg80211负责内核空间的通用API,mac80211负责具体的MAC层实现,而nl80211则作为用户空间与内核空间之间的桥梁,用于配置管理和通信。Netlink 是一个 Linux 中的 socket 类型,用于在内核与用户空间之间传递事件。

DD'Notes 1478

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 514

php面试(二)

一、php的接口和抽象类有什么区别,应用场景有哪些 ?https://blog.csdn.net/hanxueyu666/article/details/75712917 1、抽象类和接口在语法上的异同 相同点 :都不能被实例化 不同点: 第一点. 接口是抽象类的变体,接口比抽象类更加抽象,接口中所有的方法都是抽象的。 第二点. 每个类只能继承一个抽象类,但是可以实现多个接口 第三点....

yshir 252

从原始数据到农学模型:DJI M3M/P4M多光谱影像全链路处理实战

本文详细介绍了使用DJI M3M/P4M多光谱无人机进行农学建模的全链路流程。核心在于强调辐射标定的首要性,它将原始DN值转换为具有物理意义的反射率,是确保后续植被指数计算与模型反演准确性的基石。文章通过大疆智图和Pix4Dfields的实战演示,手把手指导完成数据处理、影像镶嵌及光谱信息提取,最终构建从光谱指数到叶面积指数等关键农学参数的反演模型,实现精准农业分析。

weixin_29281941的博客 242

Redis常用数据类型介绍、使用场景及其操作命令

本文章同时也在cpper.info发布。 Redis目前支持5种数据类型,分别是: String(字符串) List(列表) Hash(字典) Set(集合) Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令。 1. String(字符串) String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在red...

weixin_30433075的博客 1728

利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行

dronekit: 一种用于无人机控制的python库。 dronekit-sitl:一种本地仿真工具,相当于本地虚拟化了一个无人机。 mavproxy:数据转发软件(类似于插线板的感觉,一个输入,多个相同的输出)。打开一个Anaconda prompt 首先激活相应的环境 然后运行如下命令: 保持2中的Anaconda prompt处于运行状态,另打开一个Anaconda prompt窗口,运行如下命令: tcp:127.0.0.1:5760: SITL默认端口,作为mavproxy的输入,把输入数据转发

Done___的博客 4344

免费教你快速学会分析运算放大器电路(保证学会)

本文旨在学习如何快速简单地对运算放大器进行分析

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 1万+

分布式缓存应用

本文大纲: 缓存概述 CDN缓存 反向代理缓存 分布式缓存 本地缓存 缓存架构示例 缓存常见问题 来源:ITFLY8架构师之家 一、缓存概述 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 1、缓存的原理

魔幻世界 2234

Bootstrap方法详解——技术与实例

一、Introduction 如果说到Bootstrap你会想到什么?是Twitter推出的那个用于前端开发的开源工具包吗?Unfortunately,本文要讨论的并非是Bootstrap工具包,而是统计学习中一种重采样(Resampling)技术。这种看似简单的方法,对后来的很多技术都产生了深远的影响。机器学习中的Bagging,AdaBoost等方法其实都蕴含了Bootstrap的思想...

白马负金羁 8万+

Redis3——线程模型与数据结构

本文讲述了redis的单线程模型和IO多线程工作原理,以及几个主要数据结构的实现。

leedcanDD的博客 1419

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring Boot 3 【九】Redis 的五种数据结构深入浅出(String & List & Set & Hash & Zset)

在现代应用开发中,高效的数据存储和管理是构建强大系统的关键。Redis 作为一种高性能的内存数据库,以其丰富的数据结构和快速的操作能力而备受青睐。Spring Boot 3 作为流行的开发框架,为整合 Redis 提供了便捷的方式。在本文中,我们将深入探讨 Spring Boot 3 如何与 Redis 进行整合,并详细介绍对 Redis 的五种主要数据结构 —— 字符串(String)、列表(List)、集合(Set)、哈希(Hash)和有序集合(Sorted Set)的操作。

技术管理修行 5503

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Redis的3个高级数据结构

平常接触最多的是5个入门级数据结构:String,Hash,List,Set,Sorted Set,本文介绍3个高级数据结构:Bitmaps,Hyperloglogs,GEO。 Bitmaps bitmaps不是一个真实的数据结构。而是String类型上的一组面向bit操作的集合。由于strings是二进制安全的blob,并且它们的最大长度是512m,所以bitmaps能最大设置2^32个不同...

HelloWorld搬运工 5389

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Redis】3-从数据结构看Redis应用

Redis作为高效内存数据库,支持多种数据结构(String、List、Set、Sorted Set等),适用于缓存、分布式锁、排行榜等场景。String可作原子计数器;List实现队列/栈;Set跟踪唯一项;Sorted Set构建排行榜。Redis还提供JSON支持,位图适合签到统计。常见缓存问题(穿透、击穿、雪崩)可通过请求过滤、随机过期时间等解决。分布式锁利用String的NX特性实现。官网详细介绍了各数据结构的应用实例。

啾啾头号大粉丝打工买粮博客 1256

Redis3种特殊数据结构详解

当我们探索Redis时,除了常见的键值存储功能外,还存在一些特殊类型,它们为Redis增添了更多的魅力和多样性。在本次讲解中,我们将聚焦于Redis中的三种特殊数据结构类型:地理空间(Geospatial)、HyperLogLogs和位图(Bitmaps)。这些特殊类型为我们提供了独特的功能和解决方案,无论是用于地理位置数据的处理、基数估计还是位运算,Redis都展现出了其强大的应用潜力。通过深入了解这些特殊类型,我们将探索Redis更广阔的应用领域,为我们的数据处理任务带来新的可能性和效率提升。

weixin_67589420的博客 1757

Redis 3.0~8.0特性与数据结构全面解析

Redis(Remote Dictionary Server)作为一款开源的内存数据结构存储系统,自2009年首次发布以来,已经发展成为现代应用架构中不可或缺的组件。从最初的简单键值存储,Redis逐步演变为支持多种数据结构、提供丰富功能的数据平台。本文将系统梳理Redis从3.0到8.0的演进历程,详细解析其核心特性和数据结构,并深入分析各自的应用场景、潜在局限性以及最佳实践。

(づ ̄ 3 ̄)づxl 2517

《redis》3-redis的数据结构

redis的访问速度为什么那么快,主要是redis使用了hash表来存储索引,索引的key是存储key-value的key,value是指针,指向了真正的key-value实体。hash表的主要特性就是根据key的hash值找到hash表的下标,然后访问下标指向的hash桶,而桶一般是个链表,保存的是hash之后相同下标的数据。 hash表有个缺点是,随着数据的增大或者是因为数据特性,造成hash冲突,在相同的hash桶后面又一个长长的数据链表。保存的是hash冲突的key-value数据的实体。我们

David_lou的专栏 299

3.1 Redis数据结构

Redis 常见数据结构 Redis操作的游标都是从0开始 1. Key设计规则以及常用命令 key不可过长 key不可过短而且要见名知意 u1000flw --> user:1000:followers 用户 id 粉丝 中间使用:分隔 comment

acaly_nf的博客 185

Redis缓存读写策略(三种)数据结构(5+3)

举例:请求 1 先写数据 A,请求 2 随后读数据 A 的话,就很有可能产生数据不一致性的问题。当你这样回答之后,面试官可能会紧接着就追问:“举例:请求 1 先读数据 A,请求 2 随后写数据 A,并且数据 A 在请求 1 请求之前不在缓存中的话,也有可能产生数据不一致性的问题。。解决办法:可以将热点数据可以提前放入 cache 中。

XZB119211的博客 857

Redis3.0底层数据结构

底层数据结构 简单动态字符串 SDS的定义 len:SDS的总长度 alloc:已分配的长度 buf:存放实际的字符串(末尾要加一位的结束符) SDS与C字符串的区别 SDS封装了C字符串,用空间换效率,满足了Redis要求的安全性、效率性以及功能方面的要求 1.常数复杂度获得字符串长度 通过len属性直接获取字符串的长度,len长度在SDS的API执行时自动修改 2.避免缓冲区溢出 SDS的空间分配策略杜绝了发生缓冲区溢出的可能性 当需要对SDS进行修改时,会先检查SDS的空间是否满足修改所需的大小

od_FLY的博客 1081

【Redis 源码】3dict字典数据结构

Redis 使用双散列表机制来支持自动扩容。当散列表的负载因子(已使用的槽位数除以总的槽位数)超过一定阈值时,Redis 会创建一个新的更大的散列表,并逐步将旧散列表中的条目迁移到新的散列表中。这样做有两个好处:首先,它可以避免在高负载下一次性重新散列整个表所带来的性能影响;其次,它确保了散列表的负载因子保持在一个合理的水平,从而保持了良好的性能。

qq_17821591的博客 2021

Redis 3.0 核心数据结构解密:从源码到内存优化实战

Redis作为高性能的键值数据库,其核心优势源于精妙的数据结构设计。本文将深入剖析Redis 3.0源码中的关键数据结构实现,揭示其如何在保证高效操作的同时实现内存优化。通过对[src/redis.h](https://link.gitcode.com/i/9d89e1e58c82f8912e35a0b467549e20)中定义的对象系统和内存管理机制的分析,我们将理解Redis如何根据数据特征动

gitblog_01016的博客 1066

Redis 的5种基础数据结构和3种高级数据结构

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33961829的博客 1686
上一篇: 2.Redis安装使用
下一篇: 4.Redis的数据库
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值