Redis技术总结

1.基本数据结构,底层原理,以及应用

String

底层使用了SDS简单动态字符,string一共三种编码方式,int,embstr,raw

int主要存储long型整数

string有两个数据结构redisObject和SDS

embstr和raw底层sds,主要区别是embstr的redisobject和sds连续存储在一起,而redisobject和sds通过指针相连,不连续。

当int型时,大于19用embstr,大于44用raw

浮点数,字符串默认embstr,大于44用raw

主要用途是存储用户信息,token,分布式锁,计数器等

List

底层使用了压缩链表和双向链表

压缩链表,包括zlbytes总字节数,zltail从首节点到尾节点一共多少字节,zllen节点数量,entries节点,zlend结束符,连续

他是一种紧凑型的数据结构,节省资源

双向链表,无环,包含两部分,一个list,一个listnode数据结构,listnode是双向链表,list通过指针链接到listnode的头尾节点。不连续

当存储每个节点小于64时,或总长度小于128时,用压缩链表

主要用途是消息队列

Set

底层使用了intset和哈希表

inset有三部分,编码,长度,数据,编码有三种,int16,int32,int64,分别是2,4,8字节

哈希表是两层的key -value

当集合中int数组数量大于512,或只要有其他类型都会使用哈希表

主要用途是共同粉丝,共同好友

ZSet

底层使用了压缩链表和跳表

压缩链表,紧凑型数据结构,连续存储

跳表是在链表基础上改进的。比当前节点大,比下一个小,则往下找。

当存储每个节点小于64,总长度小于128,用压缩链表

主要用途排行榜

Hash

底层哈希表或压缩链表

压缩链表,zlbyte总字节数,zltail首尾字节数,偏移量,zllen长度,zlend结束符,entry节点

哈希表,两层key-value

主要用途,存储对象

2.redis内存淘汰策略

一共有六种

淘汰最久未使用的

淘汰最近未使用的

随机淘汰

在过期的键值对中,再加上面三种情况

3.redis过期删除策略

定时删除 - 过期了就删除

定期删除 - 一段时间清理一次

惰性删除 - 过期了先不删除,等下次查询时判断是否过期在删除

4.redis持久化

三种策略

rdb 

快照存储,读取恢复数据快,每次采取覆盖方式写数据。

流程,先去判断父线程有没有子线程,如果没有,调用fork去创建子线程保存数据。bgsave

会丢失一次数据

aof

操作信息,采取追加的方式,数据会越来越多,但实时性强

流程先写入aof buffer,根据刷盘策略刷到磁盘,no 系统策略,everysec每秒,always每次操作

混合持久化

第一次先写rdb,后续追加aof

当达到一定条件时重写rdb

数据恢复先读取rdb,在读取aof

5.redis为什么这么快

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

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

相关文章

环形链表——java

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

Axure实现tab页面切换功能

1. 实现效果 2. 实现原理 创建两个标签,并实现点击时选中状态点击时,设置面板状态 3. 实现步骤 3.1 实现可切换的标签 在页面上拖拽两个矩形作为两个tab标签,并命名 tab1 和 tab2 设置每个矩形的边框显示,只显示下边框即可 …

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应,即使设置参数默认值,也不可省略。 2.只知道类名,需要将该类作为参数调用泛型接口。 3.只知道类名,需要将该类的数组作为参数调用泛型接口…

LeetCode刷题之删除重复元素

文章目录 1.删除数组中的重复元素1.1 描述1.2 分析1.3 解答 2. 删除有序数组中的重复元素2.1 描述2.2 分析2.3 解答 1.删除数组中的重复元素 题26、删除数组中的重复元素 1.1 描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素&#xff0…

顺序查找和折半查找

顺序查找: 对于无序的情况: 什么是顺序查找:顺序查找的实现方式(存储),是含有两种的方式进行存储的,一种是顺序表的形式进行存储,还有一种是使用链表的形式进行存储的。采用顺序查…

架构师系列- 消息中间件(15)-kafka业务实战

7.1 顺序性场景 7.1.1 场景概述 假设我们要传输一批订单到另一个系统,那么订单对应状态的演变是有顺序性要求的。 已下单 → 已支付 → 已确认 不允许错乱! 7.1.2 顺序级别 1)全局有序: 串行化。每条经过kafka的消息必须严格…

Swift中TableView的下拉刷新和上拉加载

在Swift中,可以使用UIRefreshControl来实现TableView的下拉刷新。首先,需要在ViewDidLoad方法中创建一个UIRefreshControl的实例,并添加到TableView的subview中。然后,设置refreshControl的action为TableView的下拉刷新函数&#…

windows SDK编程 --- 消息之键盘消息(4)

前置知识 一、 键盘消息 在Windows操作系统中,键盘消息是用来通知应用程序有关键盘输入事件的一种机制。当用户在键盘上进行操作,比如按键或释放键时,Windows会生成相应的消息并发送给处理这些输入的应用程序。这些消息对于开发图形用户界面…

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x+8.x新特性)

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x8.x新特性) 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2…

react,Chart

一、基础图:https://ant-design-charts.antgroup.com/ Ant Design Charts 1. 首先要下载ant-design/charts,然后在页面中添加如下柱状图代码: import React from react; import { Column } from ant-design/chartsconst DemoColumn: React.FC () …

Grafana- bug- User sync failed - User already exists

Grafana security release: New versions of Grafana with a critical security fix for CVE-2023-3128 Vardan Torosyan • 22 Jun, 2023 • 4 min Today we are releasing Grafana 10.0.1, 9.5.5, 9.4.13, 9.3.16, 9.2.20, and 8.5.27. Alongside other bug fixes, these pa…

百度智能云千帆 ModelBuilder 技术实践系列:通过 SDK 快速构建并发布垂域模型

​百度智能云千帆大模型平台(百度智能云千帆大模型平台 ModelBuilder)作为面向企业开发者的一站式大模型开发平台,自上线以来受到了广大开发者、企业的关注。至今已经上线收纳了超过 70 种预置模型服务,用户可以快速的调用&#x…

深入理解冯诺依曼体系结构

文章目录 冯诺依曼体系结构概念冯诺依曼体系结构的优势冯诺依曼体系结构的现实体现 冯诺依曼体系结构概念 冯诺依曼体系结构也称普林斯顿结构,是现代计算机发展的基础。它的主要特点是“程序存储,共享数据,顺序执行”,即程序指令和…

代码随想录算法训练营Day10 | 232.用栈实现队列、225. 用队列实现栈

232.用栈实现队列 题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除…

【leetcode面试经典150题】75. 二叉树展开为链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

修改Docker容器内文件的三种方式

说明:本文介绍修改Docker容器内文件的三种方式 方式一:直接修改 敲下面的命令,进入Docker容器,如mysql docker exec -it mysql /bin/bash修改mysql的配置文件,/etc/my.cnf vim /etc/my.cnf如下,如果vim…

基于单片机的煤气泄漏报警系统设计

摘要:本文设计了一种基于单片机控制的煤气泄漏检测报警系统,该系统以AT89S52单片机为核心,通过气敏电阻传感器MQ-7将采样到的 一氧化碳气体转换为电信号经处理后送给单片机,单片机对获取的信号进行分析,控制声光报警系统进行声光报警。该系统可以对室内空 气中的CO含量是否…

【Hadoop】-Apache Hive使用语法与概念原理[15]

一、数据库操作 创建数据库 create database if not exists myhive; 使用数据库 use myhive; 查看数据库详细信息 desc database myhive; 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的:/user/hive/warehouse内 创建数据库并指定hdfs…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时,有一个值会接受nil(因为redis中没有该数据)或者数值,当该值为nil时执行报错,因为会用到将该值与其他数字比较,故报错attempt to compare nil with number 当然…

生成完美口型同步的 AI 代言人视频(及其实现原理详解)

目录 什么是Heygen? Heygen注册 Video Translation(视频翻译 完美口型同步) 实现原理详解 视频翻译部分 完美口型同步部分 什么是Heygen? Heygen是一款在线工具,可帮助您生成具有完美口型同步的 AI 代言人视频。 Heygen注册 https:…