前言 上篇文章Redis闲谈(1):构建知识图谱介绍了redis的基本概念.优缺点以及它的内存淘汰机制,相信大家对redis有了初步的认识.互联网的很多应用场景都有着Redis的身影,它能做的事情远远超出了我们的想像.Redis的底层数据结构到底是什么样的呢,为什么它能做这么多的事情?本文将探秘Redis的底层数据结构以及常用的命令. 本文知识脑图如下: 一.Redis的数据模型 用 键值对 name:"小明"来展示Redis的数据模型如下: dictEntry: 在一些编程语言中,键…
1.Redis支持的数据类型? 答:五种,在第一节redis相关的博客我就说过,String,Hash,List,Set,zSet,也就是我们的字符串,哈希,列表,集合,有序集合五种.结构图如下. 2.什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么? 答:Redis持久化主要分为三种,RDB.AOF还有我们的混合持久化,RDB是一个二进制文件,AOF是保存我们的每一次操作的命令,默认是使用RDB的持久化方式.RDB,二进制文件,速度快,但是数据安全性差,可能造成数据的丢失,A…
上次我们简单的说了一下我们的redis的安装和使用,这次我们来说说redis为什么那么快和持久化数据 在我们现有的redis中(5.0.*之前的版本),Redis都是单线程的,那么单线程的Redis为什么还会有那么高的效率呢?因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换中性能损耗的问题,正因为Redis是单线程,所以我们要小心使用Redis指令,对于那些耗时的指令(比如keys),我们一定要谨慎使用. 在并发环境中,我们Redis的单线程并不是线程1请求…
我们使用的redis,单机的绝对做不到高可用的,万一单机的redis宕机了,就没有备用的了,我们可以采用集群的方式来保证我们的高可用操作. 主从架构 大致就是这样的,一个主节点,两个从节点(一般两个就可以了) 主从工作原理 如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个SYNC命 令(redis2.8版本之前的命令)给master请求复制数据. master收到SYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文…
拓展阅读:Redis闲谈(1):构建知识图谱 Redis专题(2):Redis数据结构底层探秘 近来,分布式的问题被广泛提及,比如分布式事务.分布式框架.ZooKeeper.SpringCloud等等.本文先回顾锁的概念,再介绍分布式锁,以及如何用Redis来实现分布式锁. 一.锁的基本了解 首先,回顾一下我们工作学习中的锁的概念. 为什么要先讲锁再讲分布式锁呢? 我们都清楚,锁的作用是要解决多线程对共享资源的访问而产生的线程安全问题,而在平时生活中用到锁的情况其实并不多,可能有些朋友对锁的概念…
Redis数据结构底层总结 本篇文章是基于作者黄建宏写的书Redis设计与实现而做的笔记 数据结构与对象 Redis中数据结构的底层实现包括以下对象: 对象 解释 简单动态字符串 字符串的底层实现 链表 列表的底层实现 字典 运用在多个方面,包括Hash的实现等 跳跃表 有序集合的底层实现 整数集合 集合的底层实现之一 压缩字典 列表键和哈希键的底层实现之一 String Redis中并没有直接使用C语言中的字符串,而是在其基础之上实现了字符串的数据结构,叫做简单动态字符串(SDS). 其内部的…
前面几篇文章,我们一起学习了redis用到的所有主要数据结构,比如简单动态字符串(sds).双端链表.字典.压缩列表.整数集合等等. redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象.列表对象.哈希对象.集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构. 通过这五种这五种不同类型的对象,redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令.使用对象的另一个好处…
参考文档:redis持久化:http://blog.csdn.net/freebird_lb/article/details/7778981 https://blog.csdn.net/jy692405180/article/details/72026745redis数据结构&底层存储https://www.cnblogs.com/hjwublog/p/5639990.html redis事务 https://www.cnblogs.com/kyrin/p/5967620.html redis与…
redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍mysql的B+索引原理 参考:一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试) 参考:kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里) 参考:二分查找法:各种排序算法的时间复杂度和空间复杂度(阿里) 关于mysql 存储引擎 介绍包括默认的索引方式参考:MySq…
Redis可以存储可以存储键与5种不同数据结构类型之间的映射. 五种结构类型为:STRING(字符串).LIST(列表).SET(集合).HASH(散列).ZSET(有序集合). 1.字符串类型String String 数据结构是简单的 key-value 类型,使用string时,redis(大多数情况下)并不会理解或者解析其含义,无论使用json.xml还是 纯文本在redis看来都是一样的,只是一个字符串,只能进行strlen.append等对字符串通用的操作,无法针对其内容进一步操作.…