redis散列若干记录
-
字典
redis本身使用字典结构管理数据
-
redis使用hash表实现字典结构
- 使用了什么hash算法
- 使用SipHash算法,该算法能有效防止Hash表碰撞,并有不错的性能
- hash冲突怎么解决
- 使用链表法解决hash冲突
- hash表如何扩容
- 渐进式扩容,不会引起线程长期阻塞,redis字典扩容在每次操作数据的时候都执行一次单步扩容操作,将ht[0].table[rehashidx]的数据迁移到ht[1],再将ht[0]指向ht[1]
- 扩容条件
- hash表存储的键值对数量大于等于hash表数组的长度
- 开启了dict_can_resize或者负载因子大于dict_force_resize_ratio
- 扩容条件
- 渐进式扩容,不会引起线程长期阻塞,redis字典扩容在每次操作数据的时候都执行一次单步扩容操作,将ht[0].table[rehashidx]的数据迁移到ht[1],再将ht[0]指向ht[1]
- 使用了什么hash算法
-
hash扩容
ht[0] —> ht[1]
- 先找到ht[0]第一个非空索引位
- 遍历该索引位链表的所有元素
- 计算每个元素在ht[1]的hash表数组中的索引,将元素移动到ht[1]中
- 当ht[0]的used属性归于0时,则移动全部完成
- 释放ht[0].table,将ht[0]指针指向ht[1]
-
hash缩容
- 执行删除操作后redis会检查字典是否满足缩容(长度大于4&负载因子小于0.1)
-
编码
- 散列有两种编码类型:OBJ_ENCODING_HT和OBJ_ENCODING_ZIPLIST,使用dict和ziplist结构存储数据,优先使用ziplist存储数据,一个节点存储键,其后驱节点存储值,查找的时候遍历ziplist即可。
- 要使用ziplist存储元素需满足以下几个条件:
- 散列中所有的键和值的长度小于或等于server.hash_max_ziplist_value(通过hash-max-ziplist-value项配置)
- 散列中键值对的数量小于server.hash_max_ziplist_entries
- 要使用ziplist存储元素需满足以下几个条件:
- 散列有两种编码类型:OBJ_ENCODING_HT和OBJ_ENCODING_ZIPLIST,使用dict和ziplist结构存储数据,优先使用ziplist存储数据,一个节点存储键,其后驱节点存储值,查找的时候遍历ziplist即可。
-
4、集合
-
无序集合
redis通常使用字典结构保存集合数据,字典健存储集合元素,字典值为空。如果一个集合全为整数,使用字典就有点浪费了,redis使用intset保存。
- 插入元素到intset中
- 获取插入元素编码,如果插入元素编码级别高于intset编码,intset的编码则需要升级
- 通过二分查找插入元素是否为重复插入,是,则插入失败,否,则赋值
- 为intset重新分配内存空间(分配插入元素所需空间),若插入位置存在后驱节点,后驱节点全部后移
- 更新intset的len值
- intset升级编码
- 设置新的编码,然后分配新的内存空间
- 将intset的元素移动到新位置
- 然后插入新的元素
redis不会降级intset编码!
- 插入元素到intset中
相关文章:

redis散列若干记录
字典 redis本身使用字典结构管理数据 redis使用hash表实现字典结构 使用了什么hash算法 使用SipHash算法,该算法能有效防止Hash表碰撞,并有不错的性能 hash冲突怎么解决 使用链表法解决hash冲突 hash表如何扩容 渐进式扩容,不会引起线程长期阻…...

Java面试八股之什么是STOMP协议
什么是STOMP协议 STOMP(Simple Text Oriented Messaging Protocol)是一种为消息队列和事件驱动架构设计的轻量级协议,主要用于在消息中间件之间进行消息交换。它的设计原则是简单、跨平台和易于实现,这使得STOMP成为许多实时应用…...

【自用】Python爬虫学习(一):爬虫基础与四个简单案例
Python爬虫学习(一) 基础知识四个简单的爬虫案列1.使用urlopen获取百度首页并保存2.获取某翻译单词翻译候选结果3.获取某网页中的书名与价格4.获取某瓣排名前250的电影名称 基础知识 对于一个网页,浏览器右键可以查看页面源代码,…...

[python]uiautomation.WindowControl函数用法
Python UIAutomation 窗口控件 介绍 在本文中,我们将探讨Python UIAutomation库以及如何使用它来控制和自动化Windows应用程序。我们将介绍UIAutomation的基础知识及其功能,并提供代码示例来演示其用法。 什么是UI自动化? UIAutomation是一个…...

学习记录第二十七天
进程 wait函数 功能 等待子进程结束:父进程调用wait函数后,会暂停执行,直到它的某个子进程结束。收集子进程状态:当子进程结束时,wait函数会返回子进程的终止状态,包括是正常终止还是被信号终止等信息。…...

servlet的执行顺序
执行的时候Tomcat先初始化 然后调用 server 根据server来回调请求方式下面会追入源码解释 package com.haogu.servlet;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.…...
Go语言 类封装和绑定方法
本篇文章主要内容为Go语言类相关操作:封装和绑定方法介绍及示例。 目录 封装 绑定方法 类方法形参 指针形参 设置类方法参数 指针与非指针区别 总结 封装 go语言支持类的操作,但是没有class关键字,使用struct来模拟类。 示例如下&am…...
DirectShow过滤器开发-写WAV音频文件过滤器
下载本过滤器DLL 本过滤器将PCM音频流,或ADPCM,IEEE_FLOAT,ALAW,MULAW,GSM610音频流写入WAV音频文件。 写WAV音频文件过滤器信息 过滤器名称:写WAV 过滤器GUID:{CF704A9C-0C67-4712-BA33-DD0A…...

php根据截止时间计算剩余的时间,并且在剩余时间不足1天时仅显示小时数
//获取政策库文章public function getIndexZckList(){$fl_id = input(fl_id);if(empty(...
Docker最佳实践进阶(一):Dockerfile介绍使用
大家好,上一个系列我们使用docker安装了一系列的基础服务,但在实际开发过程中这样一个个的安装以及繁杂命令不仅仅浪费时间,更是容易遗忘,下面我们进行Docker的进阶教程,帮助我们更快速的部署和演示项目。 一、什么是Dockerfile? Dockerfile 是一个文本文件,其中包含了…...

Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术
人工智能咨询培训老师叶梓 转载标明出处 现实世界的视频捕获虽然因其真实性而宝贵,但常常受限于长尾分布的问题,即常见场景过度呈现,而关键的罕见场景却鲜有记录。这导致了所谓的"分布外问题",在模拟复杂环境光线、几何…...
安卓开发中的AppCompat框架|安卓系统|安卓应用|兼容性|UI组件|核心组件|ActionBar|Fragment|最佳实践|框架|移动开发|移动应用
目录 1. 什么是AppCompat框架 1.1 AppCompat的起源 1.2 AppCompat的重要性 2. AppCompat框架的核心组件 2.1 AppCompatActivity 2.2 AppCompat主题 2.3 AppCompat Widgets 3. 在项目中使用AppCompat框架 3.1 添加依赖项 3.2 应用AppCompat主题 4. AppCompat的高级功…...

React使用useRef ts 报错
最近在写自己的React项目,我在使用useRef钩子函数的时候发现 TS2322: Type MutableRefObject<HTMLDivElement | undefined> is not assignable to type LegacyRef<HTMLDivElement> | undefined Type MutableRefObject<HTMLDivElement | undefined&g…...
python-信息交互-pyautogui
python-信息交互-pyautogui 一: pyautogui1> waht?2> 功能分类3> 概念及作用二: 通用功能1> function all2> function 注释三: 鼠标控制1> mouse functions2> mouse functions demo3> mouse drag demo四: keyboard控制1> keyboard functions2> …...

flink1.18 编译遇到的问题
1. flink-runtime-web编译失败 源码编译时一直卡在 [INFO] Running ‘npm ci --cache-max0 --no-save’ in 处理方法: 修改flink-runtime-web/pom.xml文件 将<arguments>ci --cache-max0 --no-save ${npm.proxy}</arguments> 替换为:<a…...
2024年8月份编译Openwrt系统基础
概述: 本文档记录openwrt系统的编译过程,以备后续再用,技术支持与指导! 1.编译环境 环境需要Linux,我使用的环境是WSL2、Ubuntu 20.04 2.安装编译必须的依赖(wsl、linux) WSL2:Bu…...

Vue3+vite+ts 项目使用mockjs
1、安装mockjs npm i mockjs 2、安装vite-plugin-mock npm i vite-plugin-mock -D 3、安装axios npm i axios 4.在src目录下创建mock文件夹,在文件夹内创建login.ts等文件,并在文件夹内放置以下内容(注:URL要和真实请求地址保持一致&am…...

动态规划(二)——例题
目录 Help Jimmy 题目 解题思路 神奇的口袋 题目 枚举的解法 递归的解法 动态规划的解法 滑雪 题目 解题思路 解法一 解法二 Help Jimmy 题目 "Help Jimmy" 是在下图所示的场景上完成的游戏: 场景中包括多个长度和高度各不相同的平台。地面是…...
Node.js中判断是文件还是文件夹的多种方法
在Node.js中,我们经常需要判断一个路径是文件还是文件夹。Node.js提供了多种方法来实现这一功能,本文将详细介绍这些方法,并给出相应的示例代码。 一、使用fs.Stats对象 在Node.js中,fs模块提供了fs.stat()或fs.statSync()方法&…...
idea 如何打war包
idea 如何打war包 1.在IntelliJ IDEA中打包WAR文件,你可以按照以下步骤操作:1.设置项目结构:首先,打开IDEA,选择File>Project Structure(或使用快捷键CtrlAltShiftS)。在打开的窗口中,选择 Artifacts 选项 2.添加Web Applicat…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...