Redis——常见数据结构与单线程模型

news2024/7/6 17:55:07

Redis中的数据结构

Redis中所有的数据都是基于key,value实现的,这里的数据结构指的是value有不同的类型。

当前版本Redis支持10种数据类型,下面介绍常用的五种数据类型
在这里插入图片描述

底层编码

Redis在实现上述数据结构时,会在源码有特定的优化,保证用户进行增删查改的操作时的时间复杂度为O(1)

数据类型内部编码
stringraw, int, embstr
hashhashtable, ziplist
listlinkedlist, ziplist
sethashtable, intset
zsetskiplist, ziplist

string

raw:底层是字节数组或者字符数组
int:用来计数,当value是整数时,可以直接用int保存
embstr:针对于短字符串的特殊优化,可以占据更小的空间,一般来说,如果字符串小于39字节,使用embstr,超过则用raw

hash

hashtable:基本的哈希表
ziplist:压缩列表,当哈希表中的数据比较少时,优化为ziplist节省空间

list

linkedlist:链表
ziplist:压缩列表

事实上,从3.2版本后,Redis引入了quicklist,代替了linkedllist和ziplist,quicklist整体上是一个链表,链表中的每个节点是ziplist

set

hashtable:基本的哈希表
intset:如果集合中存放的都是整数就会优化为intset

zset

skiplist:本质上还是一个链表,但每个节点中有多个指针域,通过不同的指针域可以实现快速的检索元素,时间复杂度为O(logN)
ziplist:压缩列表

object encoding key

通过上面这个命令,可以查看key对应的实际编码方式
在这里插入图片描述

单线程模型

Redis只使用一个线程处理所有的命令,而其他的线程处理网络io
在这里插入图片描述
当redis服务器同时收到两个客户端对同一个变量的自增请求,但是由于Redis是单线程模型,因此多个请求要先在队列中排队,最终Redis还是串行的执行多个命令。

Redis之所以能够使用单线程工作,是因为Redis中的业务都是短小精悍的,并不会消耗过多的cpu资源。我们使用Redis时也需要保证没有请求占用时间特别长的操作,这样就会阻塞其他的命令

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

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

相关文章

RCNA——单臂路由

一,实验背景 之前的VLAN实现的很多都是相同部门互相访问,不同部门无法访问。不过这次整来了一个路由器,领导说大部分的部门虽说有保密信息需要互相隔离,但是这些部门和其它部门也应该互相连通以方便工作交流。因此要配置新的环境&…

2023-08-11 LeetCode每日一题(矩阵对角线元素的和)

2023-08-11每日一题 一、题目编号 1572. 矩阵对角线元素的和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1…

linux安装ftp

一、安装 参考博客 https://blog.csdn.net/dafeigecsdn/article/details/126518069 rpm -qa |grep vsftpd # 查看是否安装ftp yum -y install vsftpd # 安装vsftpuseradd -d /home/lanren312 lanren312 # 指定在/home目录下创建用户 passwd lanren312 # 给用户设置密码 # 输…

2022年03月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536 输入 只有一行,一个双精度浮点数。 输出 一行,保留8位小数的浮点数。 样例输…

【Unity每日一记】让一个物体按余弦曲线移动—(三角函数的简单运用)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

麻省理工学院利用水泥和炭黑制造出超级电容器

麻省理工学院的研究人员展示了一种使用低成本水泥和炭黑的制造的超级电容器,这一发明可能会彻底颠覆可再生能源的存储。 ​为了解决太阳能、风能和潮汐能等间歇性和非周期性电源的普及问题,实用并且廉价的电力储存技术一直是重要的环节。MIT的研究人员最…

从docker启动kali

前言: 偶然间在docker中发现有Linux的镜像,有了尝试的想法,于是有了本文 选了星星最多的那个,直接pull,或者命令行执行 docker run kalilinux/kali-rolling 介绍中说,没有任何工具,所以需要自己安装。 直接…

Jpa与Druid线程池及Spring Boot整合(二): spring-boot-starter-data-jpa 踏坑异常处理方案

Jpa与Druid线程池及Spring Boot整合(一) Jpa与Druid线程池及Spring Boot整合(二):几个坑 附录官网文档:core.domain-events域事件 从聚合根发布事件 存储库管理的实体是聚合根。在领域驱动设计应用程序中,这些聚合根通常会发布领域事件。Sp…

Golang函数以及函数和方法的区别

在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。…

直播预告|EasyV全新倾斜摄影组件上线!提升大规模、高精度实景建模效率

倾斜摄影,也被称为斜摄影或倾斜摄影测量,是一种高精度、高分辨率的遥感技术,用于获取地表地貌、建筑物、自然环境等目标的三维信息。在城市级数字孪生可视化建设过程中,通常会使用倾斜摄影技术以增强地理信息分析和虚拟建模的能力…

【瑞吉外卖】Linux学习

Linux常用命令 Linux命令初体验 Linux的命令都是由一个或几个单词的缩写构成的 命令对应英文作用lslist查看当前目录下的内容pwdprint work directory查看当前所在目录cd [目录名]change directory切换目录touch [文件名]touch如果文件不存在,新建文件mkdir [目录…

数据结构:堆的实现(C实现)

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 一、堆二、实现思路1. 结构的定义2. 堆的构建 (HeapInit)3. 堆的销毁 (HeapDestroy)4. 堆的插入 (HeapPush)5. 堆的删除 (HeapPop)6. 取堆顶的数据 (HeapTop)7. 堆的数据个数 (HeapSize…

C#小轮子:Visual Studio自动编译Sass文件

文章目录 前言插件安装插件使用compilerconfig.jsonsass输入和css输出(自动生成)默认配置(我不懂就不去动他了) 前言 我们知道css文件用起来太麻烦,如果样式一多,嵌套起来用css样式就眼花缭乱。Sass使用层…

量化交易可视化(10)-等高线图

等高线图的含义 等高线图(Contour plot)是一种二维图形展示方式,用于表示函数在二维平面上的等高线。等高线图的每条等高线代表函数在该高度上的取值相同的点的集合。 等高线图的绘制方法 在matplotlib中,可以使用contour()函数…

Unity使用C# Protobuf源码

目录 第一步:下载源码 第二步:运行C#构建文件 第三步:处理报错(如果你已安装对应的SDK则不会报错) 第四步:复制库文件到你的工程 第一步:下载源码 protobuf github源码https://github.com/p…

银河麒麟安装php7.1.33

银河麒麟V10兼容CentOS 8 安装过程与CentOS类似。 TencentOS3.1安装PHPNginxredis测试系统_乐大师的博客-CSDN博客 可以参考之前我写的文章。 不过有2个细节不同,下面说下。 问题1:编译错误提示“error:off_t undefined” 解决方法: 编…

Python实现调用百度翻译的API

import requests import hashlib import random import jsondef translate(text, from_lang, to_lang):app_id XXXXX # 替换为你的App IDsecret_key XXXXX # 替换为你的Secret Key# 生成随机数salt random.randint(32768, 65536)# 计算签名sign app_id text str(salt) …

Linux:Shell编辑之文本处理器(sed)

目录 绪论 1、sed的原理:读取 执行 显示 三个过程 2、sed 文本内容处理工具,文件过大怎么办? 3、sed的操作选项 3.1 常用选项 3.2 操作符 3.3 行号的范围打印 3.4 对包含指定字符串的内容进行打印 3.5 删 3.5.1 正则表达式删除 3.6…

【ES】笔记-函数参数默认值

函数参数默认值 ES6 允许给函数参数赋值初始值 1. 形参初始值 具有默认值的参数,一般放到最后 function add(a,b,c10){return abc}let resultadd(1,2);console.log(result);2. 与解构赋值结合 function connect({host"127.0.0.1",username,password,port…

STM32入门——DMA数据搬运工

DMA简介 DMA(Direct Memory Access)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源12个独立可配置的通道: DMA1(7个通道)&#xff…