FWQ
一文彻底让你搞懂Redis五种数据结构
一文彻底让你搞懂Redis五种数据结构 0浏览 收藏 今天golang学习网给大家带来了《一文彻底让你搞懂Redis五种数据结构》,其中涉及到的知识点包括Redis、数据库、技术等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~ 关于Redis的文章之前也写过两篇,阅读量和读者的反映都还可以,其中第一篇是Redis的缓存三大问题[。 第二篇是Redis的内存管理和淘汰策略[]。 这是关于Redis的第三篇文章,主要讲解Redis的五种数据结构详解,包括这五种的数据结构的底层原理实现。 理论肯定是要用于实践的,因此最重要的还是实战部分,也就是这里还会讲解五种数据结构的应用场景。 话不多说,我们直接进入主题,很多人都知道Redis的五种数据结构包括以下五种: String:字符串类型 List:列表类型 Set:无序集合类型 ZSet:有序集合类型 Hash:哈希表类型 但是作为一名优秀的程序员可能不能只停留在只会用着五种类型进行crud工作,还是得深入了解这五种数据结构的底层原理。 Redis核心对象 在Redis中有一个「核心的对象」叫做redisObject ,是用来表示所有的key和value的,用redisObject结构体来表示String、Hash、List、Set、ZSet五种数据类型。 redisObject的源代码在redis.h中,使用c语言写的,感兴趣的可以自行查看,关于redisObject我这里画了一张图,表示redisObject的结构如下所示: 在redisObject中「type表示属于哪种数据类型,encoding表示该数据的存储方式」,也就是底层的实现的该数据类型的数据结构。因此这篇文章具体介绍的也是encoding对应的部分。 那么encoding中的存储类型又分别表示什么意思呢?具体数据类型所表示的含义,如下图所示: 可能看完这图,还是觉得一脸懵。不慌,会进行五种数据结构的详细介绍,这张图只是让你找到每种中数据结构对应的储存类型有哪些,大概脑子里有个印象。 举一个简单的例子,你在Redis中设置一个字符串key 234,然后查看这个字符串的存储类型就会看到为int类型,非整数型的使用的是embstr储存类型,具体操作如下图所示: String类型 String是Redis最基本的数据类型,上面的简介中也说到Redis是用c语言开发的。但是Redis中的字符串和c语言中的字符串类型却是有明显的区别。 String类型的数据结构存储方式有三种int、raw、embstr。那么这三种存储方式有什么区别呢?…