首页 > 数据库 >[Redis]Intset

[Redis]Intset

时间:2024-08-30 22:52:38浏览次数:12  
标签:codehole Intset encoding 32 intset Redis 整数 lru

intset 小整数集合

set 集合容纳的元素都是整数并且元素个数较少时, Redis 会使用 intset 来存储集合元素。
intset 是紧凑的数组结构,同时支持 16 位、 32 位和 64 位整数

struct intset<T>
{
	int32 encoding;//决定整数位宽是 16 位、 32 位还是 64
	int32 length ;//元素个数
	int<T> contents;//整数数组,可以是 16 位、 32 位和 64
}

5-8 所示是 intset 的内部结构示意图。老钱也不理解为什么 intset encoding字段和 length 字段使用 32 位整数存储,毕竟它们只是用来存储小整数的,长度不应该很长,而且 encoding 只有 16 位、 32 位和 64 位三个类型,用一个字节存储就绰绰有余。关于这点,读者们可以进一步讨论。

image

> sadd codehole 1 2 3
(integer) 3
> debug object codehole
Value at : Ox7fec2dc2bde0 refcount:l encoding:intset serializedlength:15 lru:6065795 lru_seconds_idle:4
> sadd codehole go java python
(integer) 3
> debug object codehole
Value at:Ox7fec2dc2bde0 refcount:1 encoding:hashtable serializedlength:22 lru:6065810 lru_seconds_idle:5

注意观察 debug object 的输出字段 encoding 的值,可以发现当 set 里面放进去了非整数值时,存储形式立即从 intset 转变成了 hash 结构。

标签:codehole,Intset,encoding,32,intset,Redis,整数,lru
From: https://www.cnblogs.com/DCFV/p/18389647

相关文章

  • 常用的 Redis 配置命令
    Redis的配置文件(通常是redis.conf)包含了许多配置选项,可以用来调整Redis服务器的行为。以下是一些常用的Redis配置命令及其详解:bind描述:指定Redis监听的IP地址。示例:bind127.0.0.1解释:只允许从本地机器访问Redis实例。port描述:指定Redis监听的端口......
  • Redis基础知识学习笔记(一)
    文章目录Redis简介Redis简介REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统,是跨平台的非关系型数据库,其是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)......
  • Redisson与Redis分布式锁
    Redis分布式锁Redis分布式锁是一种在分布式系统中用于确保多个进程对共享资源互斥访问的机制。它通常通过Redis的原子指令来实现,比如使用SETNX(SetifNoteXists)指令来设置键,如果键不存在则操作成功,可以认为获取了锁;如果键已存在,则操作失败,表示锁被其他进程持有。但是,这种基本......
  • Redis组件介绍(三)
    写在前面今天来继续学习Redis。Redis持久化机制快照(Snapshot)特点快照持久化可以将某一时刻的所有数据写入硬盘,默认开启,保存为.rdb文件,也称为RDB持久化。快照生成方式客户端方式BGSAVE使用BGSAVE命令创建快照,Redis会创建一个子进程进行写入,父进程继续处理......
  • redis概述安装与基本数据类型
    Redis概述安装与基本数据类型1.什么是NoSQLNoSQL(NotOnlySQL),意即不仅仅是SQL,泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。2.NoSQL的广泛应用随着大数据的兴起,数据量的暴增,数据类型的丰富,传统的关系数据库在应付动态网站,特别......
  • python操作redis的数据类型(超详细!!)
    在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的......
  • redis-热key大key
    BIGKEY作者:w08eBigkey,hotkey傻傻分不清楚什么是大keyRedis中的"大Key"通常指的是一个占用较大内存空间的键(Key)。这可能会对Redis的性能产生负面影响,因为大Key可能导致内存碎片化、删除延迟以及网络传输时间延长等问题。大Key可能出现在不同的场景中,例如:......
  • redis-缓存崩溃
    缓存崩溃作者:w08eredis实战之各种崩溃雪崩击穿穿透以及预热缓存雪崩回答话术缓存雪崩是应用系统指在某个时间点上,缓存中的大部分数据同时失效,导致大量的请求直接访问底层数据库或后端服务,从而造成数据库负载剧增,甚至导致数据库崩溃的情况。通常情况下,缓存中的数据会......
  • redis-持久化
    redis数据持久化作者:w08e数据持久化三连问redis宕机数据会丢失吗回答话术先说结论,如果我们没开启任何持久化机制,那么会丢失全部数据,否则只会丢失部分数据,丢失数据的多少取决于持久化配置。Redis提供了两套持久化机制,RDB快照和AOF日志文件追加。RDB它会根据情况定期......
  • Redis多线程特性
    Redis6.0版本之前是用单线程模型,6.0版本为什么使用多线程?Redis几乎不存在CPU成为性能瓶颈的情况,主要受限于内存和网络IO内存优化内存淘汰策略增加内存硬件网络IO优化Redis在处理客户端的请求时,包括获取(socket读)、解析、执行、内容返回(socket写)等都由一个顺序串......