数据库

1,1个数据库数据结构和上面一样,两个字典,一个包含所有的键,一个包含了键的过期时间

2,redis删除过期键策略:定期+惰性

  定期:一段时间开始删,删不全下次继续删

  惰性:使用键的时候检察

  rdb:存入和载入的时候检查

  aof:追加一条删除命令,重写时候忽略

  主从:主服务器删除会通知从服务器,从服务器自己不删除

rdb持久化

  • SAVE和BGSAVE都可用于生成RDB文件,但2个命令区别是:SAVE 会阻塞redis服务器进程,期间不能处理任何命令请求,知道RDB 文件生成完毕BGSAVE 会派生出一个子进程,子进程负责创建RDB文件,父进程仍然处理请求。
  • 在redis重启时,会自动加载RDB文件。此外,当RDB和AOF同事开启时,由于AOF更新频率高,redis服务器会有限使用AOF文件还原数据库
  • 激化持久化可以有两个两极分化的条件:1,短时间高频率更新,2,长时间低频率更新(保证他会跟新
  • 通过一个计数器和一个过期时间来实现
  • rdb文件结构没写

aof持久化

1,RDB的持久化是通过最终的键值对记录数据库的状态。但AOF类似于mysql的binlog。通过记录服务器执行的写命令来记录数据库状态

2,AOF是一个事件循环loop,主要有追加到缓冲区aof_buf和同步保存到AOF文件里面2个步骤

3,aof重写:但这时会产生一个新的问题,即AOF文件越来越大。AOF重写会产生一个新的aof文件,就是读取有哪些数据,跳过之前虚空的增删命令,只记录最后一刻

4,子程序执行aof重写的时候,服务器接受的语句放在aof重写缓冲区,重写结束后,把重写缓冲区的语句也写到新aof文件中

事件

1,redis是事件驱动程序,有2类事件。一是文件事件(即服务器对套接字操作的抽象),二是时间事件(各类定时任务)

2,文件事件基于reactor模型,

3,时间事件代表,servercon函数

  • 更新服务器各种统计信息,如时间,内存,数据库占用情况
  • 清理数据库中得过期键值对
  • 关闭和清理连接失效的客户端
  • 尝试进行aof或者rdb的持久化操作
  • 如果服务器是主服务器,那么对从服务器定期同步
  • 如果出入集群模式,对集群进行定期同步和连接厕所

4,事件的调度

  • 1.获取打到时间离当前时间最近的时间事件
  • 2.计算最接近的时间事件距离达到还有多少时间
  • 3.如果时间已达到,则将remaind_ms=0
  • 4.根据remain_ms,创建timeval结构
  • 5.阻塞并等待文件事件产生,最大阻塞时间由timeval决定
  • 6.如果remaind_ms=0,则不阻塞

客户端

1,连接了服务器的客户端都有一个客户端实例保持它的状态在服务器里面,包含有名字,标志值,输入缓冲区,输出缓冲区,和其他

2,输入缓冲区,保持客户端输入的命令(协议表示,可以自己扩大缩小,但不能超过1gb

3,服务器会根据输入缓冲区的命令解析命令(根据命令表

4,命令的回复也在输出缓冲区里面,有个缓冲简短回复,有个缓冲长回复

服务端

redis实现与分析-单机数据库实现的更多相关文章

  1. Redis设计与实现——单机数据库的实现

    数据库 服务器中的数据库 redisClient切换数据库 redis客户端默认目标数据库为0号数据库,可以通过SELECT命令来切换目标数据库. 客户端状态redisClient结构的db属性记录了 ...

  2. Redis中单机数据库的实现

    1. 内存操作层 zmalloc 系接口 redis为了优化内存操作, 封装了一层内存操作接口. 默认情况下, 其底层实现就是最简朴的libc中的malloc系列接口. 如果有定制化需求, 可以通过配 ...

  3. Redis单机数据库

    单机数据库 ·Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存. ·客户端通过修改目标数据库指针,让它指向redis ...

  4. Redis(二):单机数据库的实现

    概要 本部分内容主要是研究单机数据库.分别介绍单机数据库的实现原理,数据库的持久化,Redis事件,服务器维护管理客户端以及单机服务器的运作机制. 数据库 数据库结构 Redis数据库由redis.h ...

  5. Redis单机数据库的实现原理

    本文主要介绍Redis的数据库结构,Redis两种持久化的原理:RDB持久化.AOF持久化,以及Redis事件分类及执行原理.最后,分别介绍了单机班Redid客户端和Redis服务器的使用和实现原理. ...

  6. Redis学习笔记二:单机数据库的实现

    1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个r ...

  7. Redis时延问题分析及应对

    Redis时延问题分析及应对 Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞: 当redis的数据量达到一定级别后(比如 ...

  8. linux下利用elk+redis 搭建日志分析平台教程

    linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm   elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...

  9. Redis学习笔记01--主从数据库配置

    1.创建公共配置文件 所有配置文件添加到以下目录: /xxxx/redis-slave-master 创建公共的redis配置文件,直接使用redis的默认配置文件,修改以下配置项: bind 127 ...

随机推荐

  1. 牛客练习赛22 简单瞎搞题(bitset优化dp)

    一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 输入描述: 第一行一个数 n. 然后 n 行,每行两个数表示 li,ri.   输出 ...

  2. PCP架构设计

    1.引言 现如今已经进入互联网时代,无论是工作还好娱乐都已经离不开互联网,与此同时,网络相关的问题也时不时的侵扰着我们,这需要我们具有一定网络相关知识来解决相关问题,而这时,一款工作便利,免费的网络分 ...

  3. leetcode第11题:盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  4. JavaWeb:脚本标识

    脚本标识 一.JSP表达式 1.介绍 用于向页面中输出信息 2.语法格式 <%= 表达式%> 3.注意 在"<%"和"="之间不允许有空格,但 ...

  5. HDU 6106 17多校6 Classes(容斥简单题)

    Problem Description The school set up three elective courses, assuming that these courses are A, B, ...

  6. Spring Boot 揭秘与实战(五) 服务器篇 - 其他内嵌服务器 发表于 2017-01-03 | Spring框架 | Spri

    文章目录 1. Jetty 的切换 2. Undertow的使用 Spring Boot 可选择内嵌 Tomcat.Jetty 和 Undertow,因此我们不需要以 war 包形式部署项目.< ...

  7. ECONOMETRICS CHAPTER3

    前几天看王垠的一篇文章谈数学与编程,说数学公式之所以难以理解是因为缺乏统一的形式,而且经常有未定义的变量出现.看这本书时也正有此感,所以有时不必要拘泥公式是否前后一致,理解意思要紧. ♣普通最小二乘法 ...

  8. 移动APP漏洞趋势

    个人总结,可能片面或不正确 样本来自WooYun网站,截止15年12月19号,一共75650个漏洞: 一.Top10安全漏洞中,sql注入占1/3:可见如果你是sql注入方面的测试专家,web安全1/ ...

  9. logminer实战之生产环境写入数据字典,dg环境查询拷贝日志,测试环境进行挖掘,输出结果

    应客户需要,对某一天的日志进行挖掘,分析日均归档日志切换数量20增长至40的原因,是什么表的dml操作导致的日志量剧增,最终定位某个应用(需要客户自己进行甄别) 操作说明及介绍: 1.客户10.2.0 ...

  10. Vue的新启之笔

    之前就有接触Vue这一语言,作为一个摊薄饼的我,觉得其基础性的知识体系与其他语言是相通的.且由于贵阳这一城市的地理位置的特殊性,我不得不承认想要从事软件开发这一行业,不精通一门语言不行.因为,任何一家 ...