还不懂Redis是什么?一文带你深入Redis基本结构,准备向开发进军

最新微服务、MySQL、Nginx加Redis实战,助你成功向阿里P8进军 前言 当下互联网时代,国际社会发展迅速,技术革新更加迅猛。未来智能时代,是一个数据时代,而如何处理好这些数据,就是科技发展的趋势。 本文主要为大家介绍一些2020年阿里P8对标学习教程,涵盖微服务架构、MySQL、Nginx和Redis等核心知识点,助你在如今的智能时代,有机会进军更加广阔的平台,纵横驰骋~~~ 1、微服务架构 微服务架构是一项在云中部署应用和服务的新技术,已成为当下最新的热门话题,并被认为是未来的方向。 2、MySQL数据库 MySQL是一种开放源代码的关系型数据库管理系统 阅读详情

前言

Redis是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司都在使用Redis, 比如Twitter、 YouPorn、 暴雪娱乐、Github、 StackOverflow、 腾讯、阿里、京东、华为、新浪微博等等,很多中小型公司也都有应用。也可以说,对Redis 地了解和应用实践已成为当下中高级后端开发者绕不开的必备技能。

Redis安装

体验Redis需要使用Linux或者Mac环境,如果是Windows可以考虑使用虛拟机。

主要方式有四种:

使用Docker安装。通过Github源码编译。直接安装apt-get install(Ubuntu)、 yum instal(RedHat)或者brew install(Mac)。如果不想安装操作,也可以使用网页版的Web Redis直接体验。具体操作如下:

Docker方式

#拉取redis镜像> docker pull redis .#运行redis容器〉docker run - name myredis -d -p6379:6379 redis .#执行容器中的redis-cli, 可以直接使用命令行操作redis> docker exec -it myredis redis-cli

Github源码编译方式

#下载源码> git clone --branch 2.8 - -depth 1 git@gi thub. com:antirez/redis. git> cd redis#编译> make> cd src#运行服务器,daemonize表示在后台运行> . /redis-server - daemonize yes#运行命令行> . /redis-cli

直接安装方式

# mac> brew install redis# ubuntu〉apt- get install redis# redhat〉yum install redis#运行客户端> redis-cli

Redis基础数据结构

Redis有5种基础数据结构,分别为: string (字符串)、list (列表)、set (集合)、hash (哈希)和zset(有序集合)。熟练掌握这5种基本数据结构的使用是Redis 知识最基础也最重要的部分,它也是在Redis面试题中问到最多的内容。

一、string (字符串)

字符串 string 是 Redis 最简单的数据结构。Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型的数据结 构的差异就在于 value 的结构不一样。

字符串结构使用非常广泛,一个常见的用途就是缓存用户信息。我们将用户信息结构体使用 JSON 序列化成字符串,然后将序列化后的字符串塞进 Redis 来缓存。同样,取用户 信息会经过一次反序列化的过程。

Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于 Java 的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,如图中所示,内部为当前字 符串实际分配的空间 capacity 一般要高于实际字符串长度 len。当字符串长度小于 1M 时, 扩容都是加倍现有的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间。需要注意的是 字符串最大长度为 512M。

二、list (列表)

Redis 的列表相当于 Java 语言里面的 LinkedList,注意它是链表而不是数组。这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n),这点让人非常意外。

当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。

Redis 的列表结构常用来做异步队列使用。将需要延后处理的任务结构体序列化成字符 串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进行处理。

三、hash (哈希字典)

Redis 的字典相当于 Java 语言里面的 HashMap,它是无序字典。内部实现结构上同 Java 的 HashMap 也是一致的,同样的数组 + 链表二维结构。第一维 hash 的数组位置碰撞 时,就会将碰撞的元素使用链表串接起来。

不同的是,Redis 的字典的值只能是字符串,另外它们 rehash 的方式不一样,因为Java 的 HashMap 在字典很大时,rehash 是个耗时的操作,需要一次性全部 rehash。Redis 为了高性能,不能堵塞服务,所以采用了渐进式 rehash 策略。

渐进式 rehash 会在 rehash 的同时,保留新旧两个 hash 结构,查询时会同时查询两个 hash 结构,然后在后续的定时任务中以及 hash 的子指令中,循序渐进地将旧 hash 的内容 一点点迁移到新的 hash 结构中。

当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收。

hash 结构也可以用来存储用户信息,不同于字符串一次性需要全部序列化整个对象,hash 可以对用户结构中的每个字段单独存储。这样当我们需要获取用户信息时可以进行部分 获取。而以整个字符串的形式去保存用户信息的话就只能一次性全部读取,这样就会比较浪 费网络流量。

hash也有缺点,hash 结构的存储消耗要高于单个字符串,到底该使用 hash 还是字符串,需要根据实际情况再三权衡。

四、set (集合)

Redis 的集合相当于 Java 语言里面的 HashSet,它内部的键值对是无序的唯一的。它的 内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL。

当集合中最后一个元素移除之后,数据结构自动删除,内存被回收。 set 结构可以用来 存储活动中奖的用户 ID,因为有去重功能,可以保证同一个用户不会中奖两次。

五、zset (有序列表)

zset 可能是 Redis 提供的最为特色的数据结构,它也是在面试中面试官最爱问的数据结 构。它类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。它的内部实现用的是一种叫着{跳跃列表}的数据结构。

zset 中最后一个 value 被移除后,数据结构自动删除,内存被回收。 zset 可以用来存 粉丝列表,value 值是粉丝的用户 ID,score 是关注时间。我们可以对粉丝列表按关注时间进行排序。

zset 还可以用来存储学生的成绩,value 值是学生的 ID,score 是他的考试成绩。我们 可以对成绩按分数进行排序就可以得到他的名次。

已上就是咱们介绍的Redis基础入门,后续小编会陆续更新Redis实战应用,希望大家喜欢。

请多多点赞评论分享,关注小编,你们的支持就是小编最大的动力!!!

PotPlayer 史诗级更新!实时字幕生成+实时翻译,看片真的无敌了! potplayer已经更新实时字幕生成+实时字幕翻译功能 阅读详情

相关推荐

微信小程序 - 实现身份证OCR识别人像面与国徽面并提取字段信息,详解从手机相册选取或打开摄像头拍照上传身份证正反面图片ocr文字识别数据填充表单(提供免费纯前端ocr识别插件+百度OCR识别API)

微信小程序身份证识别,微信小程序身份证拍照、上传并OCR识别,微信小程序实现OCR扫描识别,微信小程序识别身份证免费插件,微信小程序实现身份证识别功能。ocr识别插件。微信身份证拍照后进行ocr识别,微信小程序OCR扫描识别身份证,OCR身份证实名认证+图片上传+拍照上传图片,微信小程序之身份证照片正反上传,小程序OCR身份证识别,微信小程序实现文字识别-ocr插件,微信小程序利用百度AI实现扫描身份证获取信息功能,基于微信小程序OCR插件实现身份证拍照、上传并OCR识别的示例demo,将上传的照片传到服务

🏆 前端领域优质创作者 8078

Redis源码精读:准备工作

虽然阅读大型项目的源码是一件非常消耗精力的事情,但是它能够给我们来巨大的收益,总的来说,我感觉还是利大于弊大家加油,我们一起进军Redis🤓。

https://github.com/cv70 513

pl_read_write_ps_ddr_pl端数据交互_plddr_XILINXFPGA_zynqplps_FPGAAXI总线

PL 和 PS 的高效交互是 zynq 7000 soc 开发的重中之重,常常需要将 PL 端的大量数据实时送到 PS 端处理,或者将 PS 端处理结果实时送到 PL 端处理,但是各种协议非常麻烦,灵活性也比较差,直接通过 AXI 总线来读写 PS 端 ddr 的数据,这里面涉及到 AXI4 协议,vivado 的 FPGA 调试等。

最新微服务、MySQL、Nginx加Redis实战,助你成功向阿里P8进军

当下互联网时代,国际社会发展迅速,技术革新更加迅猛。未来智能时代,是一个数据时代,而如何处理好这些数据,就是科技发展的趋势。本文主要为大家介绍一些阿里P8对标学习教程,涵盖等核心知识点,助你在如今的智能时代,有机会进军更加广阔的平台,纵横驰骋~~~微服务架构是一项在云中部署应用和服务的新技术,已成为当下最新的热门话题,并被认为是未来的方向。MySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言——结构化查询语言进行数据库管理。MySQL因为其速度、可靠性和适应性而备受关注。

老男孩的架构路 1282

不懂源码?来看看阿里P8亲自手码的Spring源码解析整套笔记,高薪offer唾手可得!

正文 开发人员面对突如其来的变化,无论在架构选型,还是在日常开发中,总会面临各种挑战和考验。唯有系统性地掌握 Spring Framework 编程思想、设计理念,以及具体的实现方式,方可游刃有余,以免进退失据。 作为 Spring 技术生态的基石,Spring Framework 无论在设计,还是在实现上,都是一个优秀的框架,许多细节方面是非常值得我们学习的,包括: Java 语言特性的运用,如反射、动态代理、枚举、泛型、注解、ARM,Lambda 语法等 设计思想和模式的实现,如 OOP、IoC

bieber007的博客 1347

985毕业,半路出家28岁进军Java,坚持了三年现如今年薪36W+,也不算辜负自己了

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;

2401_84690353的博客 1089

已拿阿里Java后端岗offer,分享面试(详细到各个环节)感觉进军阿里没有很难!

这份文档从构建一个键值数据库的关键架构入手,不仅你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。你的支持,我的动力;祝各位前程似锦,offer不断!!!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java

2401_84412411的博客 938

向着架构技术进军---实践redis(一)

一个网站如何面对高容量大并发的压力,是架构师们要研究的事情。虽然目前我工作的站还没有达到这个水平,但是一些未雨绸缪的工作应该要开始了,给我们定的计划是在半年到一年时间,完成高容量大并发系统的架构设计。说干就干,先从redis开始吧。 首先得准备一份高记录数据样本,奈何手上没有现成的,只好从短信系统取,短信系统用的是MSSQL,先得导入到MYSQL中,我用了一个工具是mss2sql,下载地址是:h...

weixin_34250434的博客 78

向Laravel进军1

Laravel学习记录 写在前面 因为laravel是一个非常牛逼的php框架,但是中文学习资源实在是有点呵呵。只能说这是个门槛很高,需要集合很多知识才能摸清楚的框架,和thinkphp对比,大概就像是Linux和Windows的区别。所以打算写这个blog记录自己从萌新入门Laravel的过程。目前已经学习过了php的基础语法和一些内置函数,高级特性也有所了解。前端的html,css,js都是快...

weixin_30391339的博客 258

不懂 spring 就彻底放弃 Java 吧!

这段时间,忙到没时间学新东西,面试候选人,都有点心有余而力不足,想着抽空补补课,于是重读了 spring 源码。想到最早那会儿,看到工厂、委派、策略、模板等模式,分分钟就想放弃。后来硬着...

JAVA高级架构 995

圈内呕心之作,一年后斩获腾讯T5,这份Java学习笔记有多厉害

我想,可能还有很多人在今年刚过去的金三银四春招中保持着观望的形势,害怕自己的能力不够,或者是安于现状,觉得目前拿着几千的月薪觉得能够接受,那么你就要注意了,这是非常危险的!我们身为技术人员,最怕的就是安于现状,一直在原地踏步,那么你可能在30岁就会迎来自己的职业危机,因为你工作这么久提升的只有自己的年龄,技术还是万年不变!如果你还想在今年秋招能够自我突破,圆梦大厂,那或许以上这份《Java中高级学习笔记》你需要,希望能够对你的职业发展有所帮助。获取方式: 可以帮忙三连支持一下,点击下方传送门即可入手~

jjc4261的博客 207

五面进军饿了么(Java岗)!复盘总结3月以来大厂面试真题,押题命中率高达95%以上

本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,(覆盖95%以上面试题)不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究大厂的面试题。 与此同时,今年算法面试一定是会被问的,而算法不是光靠背面试题就有用的,它是需要数学逻辑思维的,因此,我会在文末为大家准备一份非常优质的算法学习手册,重点在于学习思维方法,话不多说,直接开始上精选的大厂面试真题! 由于文章篇幅限制,不可能将所有面试题以文字形式把大厂面

如果频繁就私信一下呢 226

不懂Spring?阿里架构师整理的Spring宝典助你一臂之力

由于不少小伙不了解“战略”,也不太熟悉“战术”,比如有的同学喜欢一上来就挑战高难度,有的则是因为着急找工作,学习起来就难免急功近利,本末倒置,比如直接深入源码,这其实是不可取的,片面地强加解释,也是不得要领的。在时间拮据的前提下,面对浩如烟海的技术体系,需要方法来指点迷津,需要经验来弯道超车,需要实践来巩固效果。这里的“战略”是指设计思想和协议规范,如 OOP、IoC、AOP,设计模式以及 JSR 各类规范等,这些方面,Spring 没有明显的突破,基本上是遵照业界的标准在执行。“战术”**上却被低估。

知识分享官 300

啃完这份600的页Java架构高级知识点笔记,已从13K涨到25K

我想,可能还有很多人在今年刚过去的金三银四春招中保持着观望的形势,害怕自己的能力不够,或者是安于现状,觉得目前拿着几千的月薪觉得能够接受,那么你就要注意了,这是非常危险的!我们身为技术人员,最怕的就是安于现状,一直在原地踏步,那么你可能在30岁就会迎来自己的职业危机,因为你工作这么久提升的只有自己的年龄,技术还是万年不变!如果你还想在今年秋招能够自我突破,圆梦大厂,那或许以上这份《Java中高级学习笔记》你需要,希望能够对你的职业发展有所帮助。

m0_69305074的博客 248

5年Java经验字节社招:半月3次面试,成功拿到Offer

背景经历 当时我工作近5年,明显感觉到了瓶颈期。具体来说,感觉自己用过很多框架、做过一些技术设计、也有过一些产出,但是从技术深度上感觉不足,到后期时做事也没有明显挑战,完全适应了公司节奏,说句不好听的成了老油条,可以每天舒服的混日子(这也有好处,有时间准备面试)。这对于个人成长不利,长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一下现状。我定的目标就是进大厂,因为我觉得小厂做到我目前的程度已经很难有很多的提升了。 下了决心之后,下一步是写简历。 这一步其实非常关键。先说结论,我的简历前前后后改了好几

m0_65634190的博客 252

讲得太清晰了!阿里内部都在强力进阶学习springboot实战派文档,已献出膝盖

前言 对于大部分普通家庭的孩子来说, IT行业是一个单靠个人或者团队能力就能“最快实现人生小目标”的行业 。所以, 如果这本文可以帮助读者学会精通 Spring Boot ,并且能够进入一线大厂不断学习丰富自己的人生,那本文的价值就很大了。 本文基于Spring Boot 2.X版本,采用“知识点+实例”的形式编写,通过“58个基于知识的实例+2个综合性的项目”,全面深入地讲解了Spring Boot的主要技术原理和应用。 不仅如此,本文还对比讲解了多种同类技术的使用和区别,读者可以根据自己的喜好进行

m0_50180963的博客 304

史上最全的大数据技术栈,有种冲动学习的既视感,你是否感受到了自己的不足?

前言 提起大数据,不得不提由IBM提出的关于大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),而对于大数据领域的从业人员的日常工作也与这5V密切相关。大数据技术在过去的几十年中取得非常迅速的发展,尤以Hadoop和Spark最为突出,已构建起庞大的技术生态体系圈。 下面我们通过一张图来了解一下目前大数据领域常用的一些技术,当然大数据发展至今所涉及技术远不止这些。 下面自底向上介绍各个层的主要项目。 .

python6_quanzhan的博客 7178
上一篇: 干货!Spring Cloud微服务架构进阶,你还不了解的都在这里
下一篇: 还不懂什么是B+树?看完这篇包你明白
Java领域指导者
博客等级 码龄6年 404粉丝 265原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值