阿里架构师剖析:Redis常用数据类型对应的数据结构

阿里架构师强烈推荐《Netty、Redis、ZooKeeper高并发实战》文档,带你剖析底层原理 前言 移动时代、5G时代、物联网时代的大幕已经开启,它们对于高性能、高并发的开发知识和技术的要求,抬升了Java工程师的学习台阶和面试门门槛。 大公司的面试题从某个侧面映射出生产场景中对专项技术的要求。高并发的面试题以前基本是BAT等大公司的专利,现在几乎蔓延至与Java项目相关的整个行业。例如,与JavaNI0、Reactor模式、高性能通信、分布式锁、分布式ID、分布式缓存、高并发架构等技... 阅读详情

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等

本文就带大家一块儿看下,经典数据库 Redis 中的常用数据类型,底层都是用哪种数据结构实现的?

Redis数据库介绍

Redis 是一种键值(Key-Value)数据库。相对于关系型数据库(比如 MySQL),Redis也被叫作非关系型数据库。

像 MySQL 这样的关系型数据库,表的结构比较复杂,会包含很多字段,可以通过 SQL 语句,来实现非常复杂的查询需求。而 Redis 中只包含“键”和“值”两部分,只能通过“键”来查询“值”。正是因为这样简单的存储结构,也让 Redis 的读写效率非常高。

除此之外,Redis 主要是作为内存数据库来使用,也就是说,数据是存储在内存中的。尽管它经常被用作内存数据库,但是,它也支持将数据存储在硬盘中。这一点,我们后面会介绍。

Redis 中,键的数据类型是字符串,但是为了丰富数据存储的方式,方便开发者使用,值的数据类型有很多,常用的数据类型有这样几种,它们分别是字符串、列表、字典、集合、有序集合。

“字符串(string)”这种数据类型非常简单,对应到数据结构里,就是字符串。你应该非常熟悉,这里我就不多介绍了。我们着重看下,其他四种比较复杂点的数据类型,看看它们底层都依赖了哪些数据结构。

列表(list)

我们先来看列表。列表这种数据类型支持存储一组数据。这种数据类型对应两种实现方法,一种是压缩列表(ziplist),另一种是双向循环链表。

当列表中存储的数据量比较小的时候,列表就可以采用压缩列表的方式实现。具体需要同时满足下面两个条件:

  • 列表中保存的单个数据(有可能是字符串类型的)小于 64 字节;
  • 列表中数据个数少于 512 个。

关于压缩列表,我这里稍微解释一下。它并不是基础数据结构,而是 Redis 自己设计的一种数据存储结构。它有点儿类似数组,通过一片连续的内存空间,来存储数据。不过,它跟数组不同的一点是,它允许存储的数据大小不同。具体的存储结构也非常简单,你可以看我下面画的这幅图。

现在,我们来看看,压缩列表中的“压缩”两个字该如何理解?

听到“压缩”两个字,直观的反应就是节省内存。之所以说这种存储结构节省内存,是相较于数组的存储思路而言的。我们知道,数组要求每个元素的大小相同,如果我们要存储不同长度的字符串,那我们就需要用最大长度的字符串大小作为元素的大小(假设是 20 个字节)。那当我们存储小于 20 个字节长度的字符串的时候,便会浪费部分存储空间。听起来有点儿拗口,我画个图解释一下。

压缩列表这种存储结构,一方面比较节省内存,另一方面可以支持不同类型数据的存储。而且,因为数据存储在一片连续的内存空间,通过键来获取值为列表类型的数据,读取的效率也非常高。

当列表中存储的数据量比较大的时候,也就是不能同时满足刚刚讲的两个条件的时候,列表就要通过双向循环链表来实现了。

在链表里,我们已经讲过双向循环链表这种数据结构了,如果不记得了,你可以先回去复习一下。这里我们着重看一下 Redis 中双向链表的编码实现方式。

Redis 的这种双向链表的实现方式,非常值得借鉴。它额外定义一个 list 结构体,来组织链表的首、尾指针,还有长度等信息。这样,在使用的时候就会非常方便。

//以下是C语言代码,因为Redis是用C语言实现的。
typedef struct listnode {
	struct listNode *prev;
	struct listNode *next;
	void *value;
}
listNode;
typedef struct list {
	listNode *head;
	listNode *tail;
	unsigned long len;
	// ....省略其他定义
}
list;

字典(hash)

字典类型用来存储一组数据对。每个数据对又包含键值两部分。字典类型也有两种实现方式。一种是我们刚刚讲到的压缩列表,另一种是散列表。

同样,只有当存储的数据量比较小的情况下,Redis 才使用压缩列表来实现字典类型。具体需要满足两个条件:

  • 字典中保存的键和值的大小都要小于 64 字节;
  • 字典中键值对的个数要小于 512 个。

当不能同时满足上面两个条件的时候,Redis 就使用散列表来实现字典类型。Redis 使用MurmurHash2这种运行速度快、随机性好的哈希算法作为哈希函数。对于哈希冲突问题,Redis 使用链表法来解决。除此之外,Redis 还支持散列表的动态扩容、缩容。

当数据动态增加之后,散列表的装载因子会不停地变大。为了避免散列表性能的下降,当装载因子大于 1 的时候,Redis 会触发扩容,将散列表扩大为原来大小的 2 倍左右。

当数据动态减少之后,为了节省内存,当装载因子小于 0.1 的时候,Redis 就会触发缩容,缩小为字典中数据个数的大约 2 倍大小。

我们前面讲过,扩容缩容要做大量的数据搬移和哈希值的重新计算,所以比较耗时。针对这个问题,Redis 使用我们在散列表(中)讲的渐进式扩容缩容策略,将数据的搬移分批进行,避免了大量数据一次性搬移导致的服务停顿。

集合(set)

集合这种数据类型用来存储一组不重复的数据。这种数据类型也有两种实现方法,一种是基于有序数组,另一种是基于散列表。

当要存储的数据,同时满足下面这样两个条件的时候,Redis 就采用有序数组,来实现集合这种数据类型。

  • 存储的数据都是整数;
  • 存储的数据元素个数不超过 512 个。

当不能同时满足这两个条件的时候,Redis 就使用散列表来存储集合中的数据。

有序集合(sortedset)

有序集合这种数据类型,我们在跳表里已经详细讲过了。它用来存储一组数据,并且每个数据会附带一个得分。通过得分的大小,我们将数据组织成跳表这样的数据结构,以支持快速地按照得分值、得分区间获取数据。

实际上,跟 Redis 的其他数据类型一样,有序集合也并不仅仅只有跳表这一种实现方式。当数据量比较小的时候,Redis 会用压缩列表来实现有序集合。具体点说就是,使用压缩列表来实现有序集合的前提,有这样两个:

  • 所有数据的大小都要小于 64 字节;
  • 元素个数要小于 128 个。

数据结构持久化

尽管 Redis 经常会被用作内存数据库,但是,它也支持数据落盘,也就是将内存中的数据存储到硬盘中。这样,当机器断电的时候,存储在 Redis 中的数据也不会丢失。在机器重新启动之后,Redis 只需要再将存储在硬盘中的数据,重新读取到内存,就可以继续工作了。

刚刚我们讲到,Redis 的数据格式由“键”和“值”两部分组成。而“值”又支持很多数据类型,比如字符串、列表、字典、集合、有序集合。像字典、集合等类型,底层用到了散列表,散列表中有指针的概念,而指针指向的是内存中的存储地址。 那 Redis 是如何将这样一个跟具体内存地址有关的数据结构存储到磁盘中的呢?

实际上,Redis 遇到的这个问题并不特殊,很多场景中都会遇到。我们把它叫作数据结构的持久化问题,或者对象的持久化问题。这里的“持久化”,你可以笼统地可以理解为“存储到磁盘”。

如何将数据结构持久化到硬盘?我们主要有两种解决思路。

第一种是清除原有的存储结构,只将数据存储到磁盘中。当我们需要从磁盘还原数据到内存的时候,再重新将数据组织成原来的数据结构。实际上,Redis 采用的就是这种持久化思路。

不过,这种方式也有一定的弊端。那就是数据从硬盘还原到内存的过程,会耗用比较多的时间。比如,我们现在要将散列表中的数据存储到磁盘。当我们从磁盘中,取出数据重新构建散列表的时候,需要重新计算每个数据的哈希值。如果磁盘中存储的是几 GB 的数据,那重构数据结构的耗时就不可忽视了。

第二种方式是保留原来的存储格式,将数据按照原有的格式存储在磁盘中。我们拿散列表这样的数据结构来举例。我们可以将散列表的大小、每个数据被散列到的槽的编号等信息,都保存在磁盘中。有了这些信息,我们从磁盘中将数据还原到内存中的时候,就可以避免重新计算哈希值。

总结

本文主要介绍了 Redis 中常用数据类型底层依赖的数据结构,总结一下大概有这五种:

压缩列表(可以看作一种特殊的数组)、有序数组、链表、散列表、跳表。实际上,Redis就是这些常用数据结构的封装。

你有没有发现,有了数据结构和算法的基础之后,再去阅读 Redis 的源码,理解起来就容易多了?很多原来觉得很深奥的设计思想,是不是就都会觉得顺理成章了呢?

还是那句话,夯实基础很重要。同样是看源码,有些人只能看个热闹,了解一些皮毛,无法形成自己的知识结构,不能化为己用,过不几天就忘了。而有些人基础很好,不但能知其然,还能知其所以然,从而真正理解作者设计的动机。这样不但能有助于我们理解所用的开源软件,还能为我们自己创新添砖加瓦。

C# 数据容器详解:Array、List、Dictionary、LinkedList、Queue、Stack ArrayList 关于ArrayList的原理: 核心是数组: 可以动态扩容:通过创建一个更大的新数组,来将原来的数组转移到新数组 插入删除方便 存储的是对象: 需要装箱、拆箱操作 是不安全类型 List 核心是数组: 可以动态扩容:同样是创建新的更大数组来迁移数据 使用泛型来实现对装箱拆箱操作的避免 内存优化 对于List可以规定长度,来避免 动态扩容操作,这样就可以避免新的内存空间的消耗 HashTable 键值对形式: ton ... 阅读详情

相关推荐

对标阿里P6+的Java架构师课程,到底是怎样的牛逼?

对标阿里P6+的Java架构师课程,到底是怎样的牛逼?

Java大将军的博客 1260

涨姿势,Java中New一个对象是个怎么样的过程?

作者:勿念先生blog.youkuaiyun.com/mohedong/article/details/79618048在语言层面创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚...

Java知音 682

《成为顶级JAVA架构师的必备书籍》

一、技术类: JAVA、WEB、架构 Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。今天将JAVA、WEB、架构相关的书籍做了一个整理,希望可以帮助大家,提升业务技能。 《分布式Java应用——基础与实践》 《深入分析Java Web技术内幕》 《大型网站系统与Java中间件实践》 《分布式服务框架原...

weixin_44829998的博客 4514

【C#教程15/16】: 数据容器(collection)

在本章中,我们处理 C# 数据容器。 .NET 框架为数据存储和检索提供了专门的类。在前面的一章中,我们已经描述了数组。集合是对数组的增强。

gongdiwudu的专栏 6669

电子学会青少年软件编程 Python编程等级考试二级真题解析(判断题)2021年9月

2021年9月Python编程等级考试二级真题解析 26、while循环和for-in循环一样,都明确了循环的次数答案:错考点分析:考查循环知识,while循环是不明确循环次数的时候推荐使用,for循环是名次次数的时候推荐使用,所以错误27、可以使用“+”和“-"来连接与删除字符串答案:错考点分析:考查字符串操作,字符串没有减法操作,只有加法操作(连接字符串),所以错误28、...

青少年编程学习指导 1407

EB tresos配置指南:CAN通信信号收发全流程解析

本文详细解析了使用EB tresos配置工具实现AUTOSAR架构下CAN通信信号收发功能的全流程。从环境准备、COM模块信号定义、PduR路由配置、CanIf硬件抽象到CAN驱动层设置,提供了清晰的步骤指南和关键配置要点,帮助开发者快速打通从应用层到物理层的数据链路,实现可靠的CAN通信。

weixin_29192141的博客 508

C#中使用list封装多个同类型对象以及组合拓展实体的应用

C#中使用list封装多个同类型对象以及组合拓展实体的应用并以实际例子来辅助说明

wanganqiqi的博客 2523

基于SOCKET的***网络软件的设计与实现

二、基于SOCKET的网络软件的需求。2、概要设计:画出软件系统结构图。3、详细设计:软件的详细设计,如类图、序列图、重要的算法流程图或伪代码,等等。4、实现:软件基本功能相关的截图和关键代码。

Recursions的博客 1371

如何将不同类型的数据放在一个列表中_阿里架构师剖析:Redis常用数据类型对应的数据结构

本文就带大家一块儿看下,经典数据库 Redis 中的常用数据类型,底层都是用哪种数据结构实现的?Redis数据库介绍Redis 是一种键值(Key-Value)数据库。相对于关系型数据库(比如 MySQL),Redis也被叫作非关系型数据库。像 MySQL 这样的关系型数据库,表的结构比较复杂,会包含很多字段,可以通过 SQL 语句,来实现非常复杂的查询需求。而 Redis 中只包含“键”和“值”...

weixin_39581099的博客 681

dify源码本地部署,dify k8s部署

Dify.AI 是一款简单易用且开源的 LLMOps 平台,帮助开发者更简单、更快速地创建 AI 应用。它的核心理念是通过可声明式的 YAML 文件定义 AI 应用的各个方面,包括 Prompt、上下文和插件等。Dify 提供了可视化的 Prompt 编排、运营、数据集管理等功能。这些功能使得开发者能够在数天内完成 AI 应用的开发,或将 LLM 快速集成到现有应用中,并进行持续运营和改进。

shykevin的博客 1015

AI风控系统中的实时决策架构:架构师的关键设计

当用户点击「确认支付」时,一场毫秒级的“欺诈攻防战”正在后台悄然打响:系统需要在100ms内完成用户行为特征提取→欺诈模型推理→规则引擎校验→最终决策返回。这就是AI风控实时决策架构的核心——用技术对抗“实时化的欺诈手段”。本文将以「餐厅智能点餐系统」为类比,拆解实时风控架构的每一层逻辑:从“如何快速拿到用户的实时行为特征”(像服务员实时收集顾客的忌口),到“如何让模型和规则协同决策”(像厨师长结合菜谱和经验判断菜能不能做),再到“如何保证系统扛住大促的高并发”(像餐厅加桌子应对客流高峰)。我们会用。

2502_91592937的博客 1472

到了2024年,技术水平到底需要达到怎样的程度才能成为顶级的阿里P8架构师

Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。第三篇:千亿流量高并发高可用分布式系统之关键算法支撑篇(一)第五篇:千亿流量高并发高可用分布式系统之总体设计篇(一)第五篇:千亿流量高并发高可用分布式系统之总体设计篇(二)迭代拒绝2-3个月PPT架构师(一)

2401_84440351的博客 839

告别Mac自带终端:iTerm2 + Oh My Zsh 保姆级配置指南(含国内镜像源)

本文提供了一份详细的Mac终端优化指南,涵盖iTerm2、Oh My Zsh和Homebrew的配置流程,特别针对国内用户提供镜像源解决方案。通过安装现代化工具链和优化配置,帮助开发者打造高效、美观的终端工作环境,提升日常开发效率。

weixin_42638178的博客 397

深入浅出Redis,十年阿里架构师分享:有了它还怕不懂Redis原理?

写在前面 Redis 是如今互联网技术架构中,使用最广泛的缓存。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储... 同时, Redis 也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一。特别是那些优秀的、竞争激烈的大型互联网公司(比如 Twitter、新浪微博、阿里云、腾讯云、淘宝、知乎等),通常要求面试者不仅仅掌握 Redis 基础使用,更要求深层理解 Redis 内部实现的细节原理。毫不夸张地说,能把 Redis 的知识点全部吃透,你的半只脚就.

Java0258的博客 596

十.镜头知识之畸变问题

对于理想光学系统,在一对共轭的物像平面上,像的放大率是一个常数。但是对于实际的光学系统,当视场较大或很大时,像的放大率就要随视场而异,这样就会使像相对于物体失去相似性。这种使像变形的成像缺陷称为畸变。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2124

uniapp [安卓苹果App端] - 详细实现下载文件保存到用户手机本地,指定文件存储位置路径及文件夹名称下载并保存,Uniapp app端将文件下载保存并储存到指定目录(手机系统存储空间权限检测)

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,app端下载文件,移动端文件下载,并保存到手机本地存储空间,uniapp下载文件保存到手机本地,iOS下载文件怎么保存,系统读写存储空间权限,下载文件到本地详细流程及源代码,保存自定义目录,uniapp,实现下载文件并保存到本地,文件后缀,如何指定手机的存放目录路径url,点击下载文档到手机中并提示存储位置,如何在uniapp中实现文件下载功能,uniApp文件下载,怎么指定文件保存目录,下载报错,没反应

🏆 前端领域优质创作者 1万+

阿里架构师的学习笔记:高并发+JVM+Mysql+Redis+设计模式

最近在和一位阿里的架构师聊天中问到了现在进大厂的一些要求,他提到有几个几乎必考的技术点:高并发、JVM、Mysql、Redis、设计模式等。针对这些知识点我也是收集整理了一些相关的学习资料和一份阿里架构师的学习路线图分享给大家参考学习: 高并发 编程大神马士兵出版的《多线程与高并发》,这两大块儿是现在面试问的越来越多,也是相对一个初级的程序员向中高级迈进的必须要踏过的一个坎儿。 由于文档的内容太多,所以只截取了目录部分,有想获取完整文档以及文中资料的朋友只需要关注我后帮忙点这里直达就能免费获取到了

weixin_47083537的博客 170

【NIPS 2022】时序精选论文07|Non-stationary Transformers: 引入非平稳性信息的平稳化序列预测模型(代码解读附源码)

整体代码框架基本上与传统 Transformer 类似,基本上只有在内嵌的注意力机制模块有区别,因此这里只对关键部分进行讲解,代码整体框架可参考 Transformer。非平稳时序很难预测,尤其对模型泛化性影响很大,试想下推理阶段的数据分布变了,模型很难适应这种变化。,比如很早以前的差分就是一种平稳化操作。序列平稳化能增强数据的可预测性,但这时也会带来一个问题,叫。,通过MLP层进行定义,使得参数可学习,以便于更好的融合到注意力网络中。代码中整体注意力的计算方式与原生Transformer类似,

ViolenceTemper的博客 1495

在云原生时代,作为一名架构师,需要掌握AWS、阿里云或GCP上的哪些核心服务?它们分别解决了什么问题?

要成为一名出色的“谱曲家”,首先要熟悉你手中的乐器。本文将聚焦于架构师视角,剖析它们的核心服务,理解其解决的关键问题。在云原生时代,架构师的角色发生了根本性的转变——从“建造者”转变为“谱曲家”。我们不再需要从零开始搭建每一块砖瓦(如数据库、负载均衡器),而是利用云厂商提供的强大、标准化的服务模块,将它们巧妙地编排、组合,创作出满足业务需求的、优雅而坚固的系统乐章。希望这份云服务核心版图,能帮助您在云原生的广阔世界中,更加游刃有余地进行技术选型和架构设计,谱写出属于您的、稳定而高效的系统乐章。

m0_59598970的博客 790

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

一线架构师开发十年,深入剖析Redis,写出这份《Redis学习笔记》

前言: 需要这份《Redis 学习笔记》的朋友可直接点这里即可获取 Redis 是什么? 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。 为什么要用 Redis? 主要从“高性能”和“高并发”这两点来看待这个问题。 高.

lyl5454的博客 144

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

10年阿里开发架构师经验分享:Redis+JVM+Spring-cloud+MySQL文档资料(1)

互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-bgW5gvPc-1713035479552)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84049001的博客 836

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

作为 Java 程序员连 Redis 都不会?阿里架构师带你深入“解剖”Redis

入门简介:对于 Redis 数据库的描述只说出了一部分真相,Redis 是-一个速度非常快的非关系数据库( non-relational database),它可以存储键(key) 与 5 种不同类型的值( value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能,接下来的几节将分别介绍 Redis 的这几个特性。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。...

m0_67698950的博客 200

阿里架构师码出的“Redis 深度笔记”遭疯传,GitHub 已标星 81.6K

提到 Redis,想必各位后端大佬们关于 Redis 的方方面面很多大多都以知晓。不过 LZ 想问的是是否有人去真正了解过 Redis 的源码?当然如果你工作上对 Redis 仅仅是简单的应用,那肯定是不用刻意去啃源码这个东西的。但是如果你想做到真正精通 Redis,想要涨点薪的话,那源码这一块一定不能落下!

Java大将军的博客 604

作为Java程序员连Redis都不会?阿里架构师带你深入“解剖”Redis

一、下面是一个java学习路线图,以供参考 二、下面是java工作之路,以供参考: 三、下面给出阶段性细化需要掌握的技能: 1.第一阶段 2.第二阶段 3.第三阶段 4.第四阶段 5.第五阶段 四、更加细化的细节如下: 1: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的。下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法。 1-1 常用数据结构 数组、链表、堆、栈、队列、Hash表、二叉树等 1-2 算法思想 算法时间复杂度和空

m0_49496327的博客 276

redis学习_一线架构师开发十年,深入剖析Redis,写出这份《Redis学习笔记》

前言:需要这份《Redis 学习笔记》的朋友可直接私信我关键词【Redis】Redis 是什么?简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、...

weixin_39869593的博客 55

阿里P8级架构师浅谈Java架构师的工作都干些什么?

架构不是一个职业而是一种能力,每一种架构师只不过是在不同的领域里面使用不同的技术,没有什么可对比,就好比如你问一个篮球明星和一个足球明星有什么区别一样! 一、架构师需要考虑四个问题 确定系统干什么不干什么,也就是说系统的边界在哪里? 确定架构内部的模块与模块之间的关系,以及模块与外部之间的关系是什么? 架构确定以后,有能力去指导开发去继续设计和演化,如果开发设计和演化出来的东西和架构不一致也是有...

本人秃顶程序员的博客 357
上一篇: 从CRUD到阿里年薪60W+的架构师,他是如何面对职业倦怠?
下一篇: 详解Linux系统安全:多人共用服务器,如何防止别人干“坏事”?
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值