导言
大家好,我是南橘,从接触java到现在也有差不多两年时间了,两年时间,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西。知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了一些平常学习和面试中的重点(自我认为),希望给大家带来一些帮助
这篇文章的出现,首先要感谢一个人三太子敖丙 ,就是他的文章让我发现,原来Redis的知识如此的多姿多彩。恩恩,他的文章,我是期期都看
这是这篇文章的思维导图,因为用的是免费版的软件,所以有不少水印,需要原版的可以问我要
有需要的同学可以加我的公众号,以后的最新的文章第一时间都在里面,也可以找我要思维导图
1、Redis基础知识
要学习Redis基础知识,首先要知道Redis的五种基础数据结构,我们先从这五种数据结构的使用场景和一些工作中(面试中)容易出现的点来介绍
1、1 String 字符串类型
是redis中最基本的数据类型,一个key对应一个value
适用情况:
1、缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。
2.计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
3.session:通过redis实现session共享
1、2 Hash (哈希)
对于Java中的HashMap,本身是一种KV对结构,如 value={ {field1,value1},…fieldN,valueN}},非常好理解
适用情况:
HashMap作为缓存,相比于string更节省空间的维护缓存信息,适合存储如用户信息,视频信息等
底层用字典dict实现
1、3 List (链表)
Redis 的链表相当于 Java 语言里面的 LinkedList
适用情况:
1、List在Redis中既可以做队列也可以做栈使用,它的插入和删除操作非常快,时间复杂度为 0(1),但是索引定位很慢,时间 复杂度为 O(n)。
2、可以作为微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。
3、可以实现阻塞队列,左进右出的队列组完成设计
list底层使用quickList(快速链表)实现
在早期的设计中, 当列表对象中元素的长度比较小或者数量比较少的时候,采用ziplist来存储,当列表对象中元素的长度比较大或者数量比较多的时候,则会转而使用双向列表linkedlist来存储。
<