Redis
文章平均质量分 83
记录Redis的知识
爱敲代码的小黄
我是爱敲代码的小黄,阿里淘宝集团的Java开发工程师,CSDN博客专家,阿里云专家博主。写过的专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码系列、duubo源码系列,期待和大家一起学习,一起进步,一起对抗互联网寒冬
展开
-
【Redi设计与实现】第六章:整数集合
整数集合时集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。6.1 整数集合的实现整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t、int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。每一个intset表示一个整数集合:typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素.原创 2021-05-11 15:04:12 · 260 阅读 · 0 评论 -
【Redi设计与实现】第五章:跳跃表
跳跃表是一种有序的数据结构,他通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。文章目录5.1 跳跃表的实现5.1.1 跳跃表节点5.1.1.1 层5.1.1.2 前进指针5.1.1.3 跨度5.1.1.4 后退指针5.1.1.5 分值和成员5.1 跳跃表的实现Redis的跳跃表由 zskiplistNode 和 zskiplist 两个结构定义。其中,zskiplistNod.原创 2021-05-10 17:29:41 · 265 阅读 · 0 评论 -
【Redi设计与实现】第四章:字典
字典,又称符号表、关联数组、映射,是一种用于保存键值对的抽象数据结构。在字典中,一个键和一个值进行关联,这些关联的键和值就被称为键值对。字典中的每个键都是独一无二的,程序可以在字典中根据键查找与之关联的值,或者通过键来更新值,又或者根据键来删除某个键值对,等等。字典经常作为一种数据结构内置在很多高级编程语言当中,但是Redis使用的是C语言并没有内置这种数据结构,因此 Redis 构建来自己的字典实现。4.1 字典的实现Redis的字典采用哈希表作为底层实现,一个哈希表中可以有多个哈希表节点,.原创 2021-05-08 14:14:47 · 172 阅读 · 0 评论 -
【Redi设计与实现】第三章:链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活的调整链表的长度。链表在Redis中的应用十分的广泛,比如列表键的底层实现之一就是链表。当一个列表键包含来数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。3.1 链表和链表节点的实现每个链表节点使用一个 listNode 结构来表示:typedef struct listNode{ // 前置节点 struct listNode * prev; // .原创 2021-05-07 16:25:54 · 184 阅读 · 0 评论 -
【Redi设计与实现】第二章:简单动态字符串
文章目录2.1 SDS的定义2.2 SDS和C字符串的区别2.2.1 常数复杂度获取字符串长度2.1 SDS的定义每一个 sdshdr 结构表示一个 SDS 值:struct sdshdr{ // 记录buf数组中已使用子节的数量 // 等于SDS所保存的字符串的长度 int len; // 记录buf中未使用子节的数量 int free; // 子节数组,用于保存字符串 char[] buf;}实例:free 属性为 0:表示这个 SDS 没有分配任何未使用空间len 属原创 2021-05-07 11:36:55 · 268 阅读 · 0 评论 -
【Redis】二进制安全
目录什么是二进制安全概念的由来Redis如何解决二进制安全的答案什么是二进制安全概念的由来在我们初学C语言时,C语言的字符串存在一个缺陷。如果字符串中包括空字符,那么程序在读取字符串的时候,会将空字符后面的字符给忽略掉。这样读出来的字符串就不是原有的字符串了。Redis如何解决1. 在Redis中定义了一种字符串,叫做简单动态字符串(SDS)2. SDS的API会以安全的方式读取字符串,即使这个字符串存在空字符,也会将这个字符串完整的读取出来3. R.原创 2021-02-21 17:27:18 · 287 阅读 · 0 评论 -
【Redis】RDB和AOF
Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能!RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何I0操作的。这就确原创 2020-09-14 10:30:53 · 317 阅读 · 1 评论 -
【Redis】布隆过滤器
目录1. 是什么2. 原理缺点误差判断删除困难Bloom Filter 实现bit数组大小的选择哈希个数K的选择验证布隆过滤器源码实战应用场景1. 是什么===》布隆过滤器优点是空间效率和查询时间都远远超过一般的算法缺点是有一定的误识别率和删除困难。2. 原理挺喜欢周阳老师说过一句话,不懂底层原理的程序员不配称为程序员布隆过滤器说简单也简单,其实就是对一个数字(id = 1)进行K次Hash映射,将映射的K次位置变为1现在我们再去查询id = 1这个数据,经过K次Hash,布隆过滤器判定原创 2020-09-13 21:58:29 · 533 阅读 · 0 评论 -
【Redis】缓存穿透、缓存击穿、缓存雪崩
目录缓存穿透-查不到是什么解决方法布隆过滤器建立缓存空值缓存击穿-查到了,太多,搞崩是什么解决方法设置热点永不过期加分布锁缓存雪崩是什么解决方案Redis高可用限流降级数据预热缓存穿透-查不到是什么我们知道,我们的Redis是用来缓存一些数据,防止每次SQL语句去查询我们的数据库假如,我们去查询id = -1的主键,这时候在我们的Redis缓存中是肯定查询不到的,会去我们的数据库查询这时候,黑客利用这个问题,向我们的服务器不断的去查询id = -1或者不存在的数据,会不断的对我们的MySQL进行访原创 2020-09-13 21:28:52 · 1814 阅读 · 1 评论 -
【Redis】主从复制
个人感觉这个主从复制和MySQL中的主从复制优化原理一样目录主从复制是什么能干嘛怎么玩配从库不配主库从库配置:slaveof 主库IP 主库端口常用三招一主两从薪火相传反客为主复制原理哨兵模式(sentinel)复制的缺点复制延时主从复制是什么也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主能干嘛读写分离容灾恢复怎么玩配从库不配主库从库配置:slaveof 主库IP 主库端口每次与mast.原创 2020-09-13 18:02:59 · 4363 阅读 · 0 评论 -
【Redis】事务
事务是什么可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行执行而不会被其它命令插入,不许加塞能干嘛一个队列中,一次性、顺序性、排他性的执行一系列命令怎么玩常用命令开启事务:MULTI输入命令:…提交事务:EXEC放弃事务:DISCARDUNWATCH:取消WATCH命令对所有key的监视WATCH key:监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。正常执行放弃事务全原创 2020-09-13 16:34:12 · 5453 阅读 · 0 评论 -
【Redis】求求你,别再问跳表了
目录跳表使用场景结构描述查询算法插入算法删除算法时间复杂度空间复杂度总结Redis使用跳表而不是红黑树?跳表使用场景跳表(Skiplist )是一个特殊的链表,相比一般的链表,有更高的查找效率,可比拟二叉查找树,平均期望的查找、插入、删除时间复杂度都是O(log n),许多知名的开源软件(库)中的数据结构均采用了跳表这种数据结构∶Redis中的有序集合zsetLevelDB、RocksDB、HBase中MemtableApache Lucene中的Term Dictionary、Posti原创 2020-09-13 14:40:37 · 6190 阅读 · 2 评论 -
环境配置
PyCharm+Miniconda3安装配置教程PyCharm是Python著名的Python集成开发环境(IDE)conda有Miniconda和Anaconda,前者应该是类似最小化版本,后者可能是功能更为强大的版本,我们这里安装Miniconda按官方文档的说法conda相当于pip与virtualenv的结合,但实际安装来看conda本身包括了Python所以简单起见可以认...原创 2019-06-26 20:24:31 · 2359 阅读 · 0 评论 -
树莓派摄像头和语音识别
2019.6.21上午:运行树莓派免驱动USB摄像头实现了摄像头的拍照和摄像头的监控网络监控依然弄不好(还是自己太菜了)下午:依然想要用树莓派实现语音识别没想到pip和api的库安装不上(还是自己太菜)想BAT语音识别群问问题,被BAT工作人员建议使用linux系统编写代码。。。。。晚上:准备先放弃树莓派,先看看数据库实习和python以及linux操作系统。...原创 2019-06-21 20:17:20 · 1189 阅读 · 0 评论