摘要:1.建立连接 (1)从服务器执行slaveof后,创建连接master的socket连接 (2)从服务器向master发送ping,如果回复不是pong,则断开重连 (3)身份验证,密码一致 (4)从服务器发送自己的监听端口,master保存下来 2.数据同步 (1)完整重同步(首次复制,也可能是断 阅读全文
posted @ 2020-10-13 11:44 jy的blog 阅读(13) 评论(0) 推荐(0) 编辑
摘要:1.aof文件写入与同步 2.aof重写 重写的目的是为了减小aof文件的体积,redis服务器可以创建一个新的aof文件来代替现有的aof文件,新文件不会有冗余的命令。 BGREWRITEAOF:遍历出所有的键,然后根据键的类型执行相应的命令,如先smembers集合元素,然后统一sadd 阅读全文
posted @ 2020-10-09 20:54 jy的blog 阅读(9) 评论(0) 推荐(0) 编辑
摘要:rdb持久化可以将redis内存中的数据保存到磁盘里,生成的rdb文件是一个经过压缩的二进制文件,通过该文件可以将数据还原。 save命令会阻塞服务器进程知道rdb文件创建完毕,bgsave会派生出一个子进程取创建rdb文件,不会阻塞服务器 下面是一个rdb文件的组成部分: 阅读全文
posted @ 2020-09-30 20:23 jy的blog 阅读(16) 评论(0) 推荐(0) 编辑
摘要:redis服务器中每个数据库都是一个redisDb,而redisDb实质上是一个字典的模型,数据库的每一个键都是一个字典的键值,对数据库的增删改查也就是对字典对象的增删改查。 redis在维护带有过期时间的键时,内部维护了一个过期字典:expires,如图所示: 一.redis键的过期策略 1.定时 阅读全文
posted @ 2020-09-30 19:55 jy的blog 阅读(21) 评论(0) 推荐(0) 编辑
摘要:redis使用跳表作为有序集合的底层实现之一,下面来看下跳表的结构 一.跳表的结构 跳表的优势:区间查找,跳表可以做到O(logn) 的时间复杂度定位区间的起点,然后在原始链表中顺序往后遍历就可以了。 二.redis的zset的实现 1.当元素个数小于128且元素长度都小于64字节,使用ziplis 阅读全文
posted @ 2020-09-25 16:51 jy的blog 阅读(25) 评论(0) 推荐(0) 编辑
摘要:字典作为一种保存键值对的数据结构,在redis中使用十分广泛,redis作为数据库本身底层就是通过字典实现的,对redis的增删改查实际上也是构建在字典之上。 一.字典的结构 二.hash冲突 采用头插链地址法,因为没有指向链尾的指针,插在最前面,复杂度O(1) 三.rehash 即将entry数组 阅读全文
posted @ 2020-09-25 15:31 jy的blog 阅读(16) 评论(0) 推荐(0) 编辑
摘要:redis自己实现了一种名为简单动态字符串的抽象类型(simple dynamic string)作为字符串的表示。下面将简单介绍sds的实现原理。 一.sds的结构 二.sds特性 1.常数复杂度获取sds长度 获取sds长度的时间复杂度为o(1), c语言不记录长度信息,获取长度时间复杂度为o( 阅读全文
posted @ 2020-09-25 14:20 jy的blog 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2020-07-12 15:30 jy的blog 阅读(47) 评论(0) 推荐(0) 编辑
摘要:1.什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。 2.SPI和API的使用场景 API (Application Program 阅读全文
posted @ 2019-09-10 17:11 jy的blog 阅读(11191) 评论(5) 推荐(6) 编辑
摘要:ViewResolver的主要职责是根据Controller所返回的ModelAndView中的逻辑视图名,为DispatcherServlet返回一个可用的View实例。SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的 阅读全文
posted @ 2019-04-25 17:07 jy的blog 阅读(129) 评论(0) 推荐(0) 编辑