redis原理详解(了解redis底层原理,自己手写实现jedis)

2025-06-08 07:45:01 :0

redis原理详解(了解redis底层原理,自己手写实现jedis)

今天给各位分享了解redis底层原理,自己手写实现jedis的知识,其中也会对了解redis底层原理,自己手写实现jedis进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录

了解redis底层原理,自己手写实现jedis

一、Jedis实现原理

要自己手写jedis,首先要了解jedis的原理,我们在命令窗口输入set、get等命令背后的实现原理是什么?

大白话讲就是jedis通过tcp连接发送消息到redis服务器,接收到回复消息后再解析出来即可(我们执行的命令如set name test等都是按协议构造的),消息按约定好的规范,这个规范就是RESP协议

***隐藏网址***

二、RESP协议

resp协议定义了5种命令格式,间隔符号,在Linux下是r ,在Windows下是

1、单行的简单字符串Simple Strings:以 "+"加号 开头, 格式:+ 字符串 r

2、错误 Errors, 以"-"减号 开头 格式:- 错误前缀 错误信息 r

3、整数型 Integers, 以 ":" 冒号开头 格式:: 数字 r

SETNX、DEL、EXISTS、INCR、INCRBY、DECR、DECRBY、DBSIZE、LASTSAVE、RENAMENX、MOVE、LLEN、SADD、SREM、SISMEMBER、SCARD等命令都会返回整数

4、大字符串类型 Bulk Strings(多行字符串), 以 "#34;美元符号开头,长度限制512M

格式:$ 字符串的长度 r 字符串 r

多用于返回二进制安全的字符串, "$0rnrn"代表空字符串,redis-cli收到后显示的是"";"$-1rn"表示不存在,redis-cli收到显示的是nil

5、数组类型 Arrays,以 "*"开头 格式:* 数组元素个数 r 其他所有类型 (结尾不需要r )

不仅用于服务端向客户端发送命令,也可用于客户端向服务端发送命令

eg:

"*0r " #空数组

"*2r $3r foor $3r barr " #数组包含2个元素,分别是字符串foo和bar

"*3r :1r :2r :3r " #数组包含3个整数:1、2、3

"*5r :1r :2r :3r :4r $6r foobarr " #包含混合类型的数组

"*3r $3r SETr $2r aar $4r testr " #命令:SET aa test

三、代码手写实现

理解了jedis实现原理,我们就可以手写实现了,当然前提是先搭建一个redis服务,我们在本机搭建了一个redis server,端口号是6379

详解Redis 主从复制及主从复制原理

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

概述

在现有企业中80%公司大部分使用的是redis单机服务,在实际的场景当中单一节点的redis容易面临风险。

2、容量瓶颈。 当我们有需求需要扩容 Redis 内存时,从 16G 的内存升到 64G,单机肯定是满足不了。当然,你可以重新买个 128G 的新机器。

解决办法

要实现分布式数据库的更大的存储容量和承受高并发访问量,我们会将原来集中式数据库的数据分别存储到其他多个网络节点上。

Redis 为了解决这个单一节点的问题,也会把数据复制多个副本部署到其他节点上进行复制,实现 Redis的高可用,实现对数据的冗余备份,从而保证数据和服务的高可用。

主从复制

什么是主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的作用

1、数据冗余: 主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2、故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

3、负载均衡: 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

4、读写分离: 可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量。

5、高可用基石: 除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

主从复制启用

从节点开启主从复制,有3种方式:

1、配置文件: 在从服务器的配置文件中加入 slaveof《masterip》《masterport》。

2、启动命令: redis-server启动命令后加入 --slaveof《masterip》《masterport》。

3、客户端命令: Redis服务器启动后,直接通过客户端执行命令 slaveof《masterip》《masterport》,则该Redis实例成为从节点。

通过 info replication 命令可以看到复制的一些信息。

主从复制原理

主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。

在从节点执行 slaveof 命令后,复制过程便开始运作,下面图示可以看出复制过程大致分为6个过程。

主从配置之后的日志记录也可以看出这个流程。

1、保存主节点(master)信息

执行 slaveof 后 Redis 会打印如下日志:

2、从节点与主节点建立网络连接

从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接。

从节点与主节点建立网络连接。

从节点会建立一个 socket 套接字,从节点建立了一个端口为51234的套接字,专门用于接受主节点发送的复制命令。从节点连接成功后打印如下日志:

如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行 slaveofnoone 取消复制。

关于连接失败,可以在从节点执行 info replication 查看 master_link_down_since_seconds 指标,它会记录与主节点连接失败的系统时间。从节点连接主节点失败时也会每秒打印如下日志,方便发现问题:

3、发送 ping 命令

连接建立成功后从节点发送 ping 请求进行首次通信, ping 请求主要目的如下:

如果发送 ping 命令后,从节点没有收到主节点的 pong 回复或者超时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连。

从节点发送的 ping 命令成功返回,Redis 打印如下日志,并继续后续复制流程:

4、权限验证

如果主节点设置了 requirepass 参数,则需要密码验证,从节点必须配置 masterauth 参数保证与主节点相同的密码才能通过验证。如果验证失败复制将终止,从节点重新发起复制流程。

5、同步数据集

主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持有的数据全部发送给从节点,这部分操作是耗时最长的步骤。

6、命令持续复制

当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。

作者:LoyaltyLu

***隐藏网址***

redis缓存原理

redis缓存原理是sql语句时key值,查询结果resultSet是value,当同一个查询语句访问时(select * from t_product),只要曾经查询过,调用缓存直接返回resultSet,节省了数据库读取磁盘数据的时间。

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。

save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。

appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。

扩展资料

redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。

存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

redis的官网地址,redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

Redis持久化的方式选择与原理

通常Redis将数据存储在内存中或虚拟内存中,但它提供了数据持久化功能可以把内存中的数据持久化到磁盘。持久化有什么好处呢?比如可以保证断电后数据不会丢失,升级服务器也会变得更加方便。

1.RDB 持久化机制 :是对 redis 数据执行周期性的持久化。

这种方式就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为 dump.rdb。客户端也可以使用save或者bgsave命令通知redis做一次快照持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有客户端的请求,这种方式会阻塞所有客户端请求。所以不推荐使用。另一点需要注意的是,每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步增量数据。如果数据量大的话,写操作会比较多,必然会引起大量的磁盘IO操作,可能会严重影响性能。


2.AOF持久化机制 :AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。当然由于操作系统会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样的持久化还是有可能会丢失部分修改。不过我们可以通过配置文件告诉 redis我们想要通过fsync函数强制操作系统写入到磁盘的时机。

appendonly yes //启用日志追加持久化方式

(1)appendfsync always //收到写命令就立即强制写入磁盘。最慢的,但是保证完全持久化,不推荐使用。

(2)appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用。

(3)appendfsync no //完全依赖操作系统,性能最好,持久化没保证。

通过 RDB 或 AOF,都可以将 redis 内存中的数据持久化到磁盘上面来,然后可以将这些数据备份到别的地方去。

1.RDB方式

优点:

缺点:

2.AOF方式

优点:

缺点:

不要仅仅使用 RDB,因为那样会导致你丢失很多数据;也不要仅仅使用 AOF,因为那样有两个问题:第一,你通过 AOF 做冷备,没有 RDB 做冷备来的恢复速度更快;第二,RDB 每次简单粗暴生成数据快照,更加健壮,可以避免 AOF 这种复杂的备份和恢复机制的 bug;redis 支持同时开启开启两种持久化方式,我们可以综合使用 AOF 和 RDB 两种持久化机制,用 AOF 来保证数据不丢失,作为数据恢复的第一选择; 用 RDB 来做不同程度的冷备,在 AOF 文件都丢失或损坏不可用的时候,还可以使用 RDB 来进行快速的数据恢复。

***隐藏网址***

关于redis原理详解和了解redis底层原理,自己手写实现jedis的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

redis原理详解(了解redis底层原理,自己手写实现jedis)

本文编辑:admin

更多文章:


mathtype公式编号换成(怎样修改MathType公式编号的格式)

mathtype公式编号换成(怎样修改MathType公式编号的格式)

大家好,关于mathtype公式编号换成很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎样修改MathType公式编号的格式的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对

2026年1月1日 05:15

access如何用查询值给一维数组赋值(如何用vb读取access表中数据,并赋值给另一变量然后进行计算判断 急!)

access如何用查询值给一维数组赋值(如何用vb读取access表中数据,并赋值给另一变量然后进行计算判断 急!)

大家好,关于access如何用查询值给一维数组赋值很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何用vb读取access表中数据,并赋值给另一变量然后进行计算判断 急!的知识点,相信应该可以解决大家的一些困惑和问题,如果

2025年9月7日 11:00

surrendered是什么意思(提单问题surrendered 什么意思)

surrendered是什么意思(提单问题surrendered 什么意思)

今天给各位分享提单问题surrendered 什么意思的知识,其中也会对提单问题surrendered 什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录提单问题surrendered 什么意思surre

2026年5月21日 22:00

mysql和sqlyog区别(SQLyog和MySQL自带工具哪个好用)

mysql和sqlyog区别(SQLyog和MySQL自带工具哪个好用)

大家好,今天小编来为大家解答以下的问题,关于mysql和sqlyog区别,SQLyog和MySQL自带工具哪个好用这个很多人还不知道,现在让我们一起来看看吧!本文目录SQLyog和MySQL自带工具哪个好用sqlyog和JDBC操作mysq

2025年10月7日 07:30

school report(申请美国本科School report和official transcript 的问题)

school report(申请美国本科School report和official transcript 的问题)

“school report”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看school report(申请美国本科School report和official transcript 的问题)!本文目录申请美国本科Schoo

2026年3月11日 00:15

ubuntu进入root用户(ubuntu切换到root用户)

ubuntu进入root用户(ubuntu切换到root用户)

本篇文章给大家谈谈ubuntu进入root用户,以及ubuntu切换到root用户对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录ubunt

2026年5月11日 23:15

sftpget到指定目录(centos7 中使用sftp窗口的get命令下载文件到Windows,请问下载到了Windows的哪个目录)

sftpget到指定目录(centos7 中使用sftp窗口的get命令下载文件到Windows,请问下载到了Windows的哪个目录)

大家好,关于sftpget到指定目录很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于centos7 中使用sftp窗口的get命令下载文件到Windows,请问下载到了Windows的哪个目录的知识点,相信应该可以解决大家的

2026年1月30日 22:00

打印机normal模式(怎么设置打印机才能正常工作呢)

打印机normal模式(怎么设置打印机才能正常工作呢)

“打印机normal模式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看打印机normal模式(怎么设置打印机才能正常工作呢)!本文目录怎么设置打印机才能正常工作呢打印机色带频繁打烂为什么如何设置NORMAL并口模式(打印机

2026年9月11日 20:45

wps activex控件怎么启用(为什么我的安全设置不允许ActiveX控件!急!)

wps activex控件怎么启用(为什么我的安全设置不允许ActiveX控件!急!)

大家好,关于wps activex控件怎么启用很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于为什么我的安全设置不允许ActiveX控件!急!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注

2025年6月30日 02:15

计算机程序设计艺术的作者图灵奖(唐纳德·克努特的简介)

计算机程序设计艺术的作者图灵奖(唐纳德·克努特的简介)

其实计算机程序设计艺术的作者图灵奖的问题并不复杂,但是又很多的朋友都不太了解唐纳德·克努特的简介,因此呢,今天小编就来为大家分享计算机程序设计艺术的作者图灵奖的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录唐纳德

2026年6月5日 09:15

一切都是剧情需要 源代码(电脑一切都是代码组成的)

一切都是剧情需要 源代码(电脑一切都是代码组成的)

“一切都是剧情需要 源代码”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看一切都是剧情需要 源代码(电脑一切都是代码组成的)!本文目录电脑一切都是代码组成的源代码最后一条短信电脑一切都是代码组成的硬件和软件硬件就那些主板,c

2025年5月27日 08:15

goto语句c++(c++中可以使用goto语句吗)

goto语句c++(c++中可以使用goto语句吗)

这篇文章给大家聊聊关于goto语句c++,以及c++中可以使用goto语句吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录c++中可以使用goto语句吗C++ goto语句用法C++里面怎么跳出大循环C++里 goto语句用

2025年8月23日 21:00

稀疏矩阵是什么(什么是稀疏矩阵)

稀疏矩阵是什么(什么是稀疏矩阵)

本篇文章给大家谈谈稀疏矩阵是什么,以及什么是稀疏矩阵对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录什么是稀疏矩阵什么叫“稀疏数据”三元组表示稀疏矩阵是什么三元组表示稀疏矩阵是什么稀疏矩阵怎么理解矩阵分解中的块稀疏矩阵稀疏矩阵

2025年9月5日 16:30

电脑access数据库下载(access数据库在电脑上怎么下载安装)

电脑access数据库下载(access数据库在电脑上怎么下载安装)

本篇文章给大家谈谈电脑access数据库下载,以及access数据库在电脑上怎么下载安装对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录access数据库在电脑上怎么下载安装access 数据库下载怎么下载Microsoft

2025年9月22日 10:00

sql语句高到低排序(如何用数据库sql把一列数据从大到小排列)

sql语句高到低排序(如何用数据库sql把一列数据从大到小排列)

大家好,sql语句高到低排序相信很多的网友都不是很明白,包括如何用数据库sql把一列数据从大到小排列也是一样,不过没有关系,接下来就来为大家分享关于sql语句高到低排序和如何用数据库sql把一列数据从大到小排列的一些知识点,大家可以关注收藏

2026年9月12日 18:30

双向可控硅的触发原理图及原理是什么?数据结构——图graph(基础概念)

双向可控硅的触发原理图及原理是什么?数据结构——图graph(基础概念)

“双向连通图”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看双向可控硅的触发原理图及原理是什么?数据结构——图graph(基础概念)!本文目录双向可控硅的触发原理图及原理是什么数据结构——图graph(基础概念)离散数学第五

2026年8月28日 11:15

closet space(How should one invest a sum of money in these days of inflation (通货膨胀)全文翻译)

closet space(How should one invest a sum of money in these days of inflation (通货膨胀)全文翻译)

本篇文章给大家谈谈closet space,以及How should one invest a sum of money in these days of inflation (通货膨胀)全文翻译对应的知识点,希望对各位有所帮助,不要忘了收

2026年3月25日 08:30

fclose(stdout)什么意思(freopen在竞赛怎么用)

fclose(stdout)什么意思(freopen在竞赛怎么用)

其实fclose(stdout)什么意思的问题并不复杂,但是又很多的朋友都不太了解freopen在竞赛怎么用,因此呢,今天小编就来为大家分享fclose(stdout)什么意思的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析

2026年8月1日 06:30

date函数的使用(ACCESS中 date()的用法)

date函数的使用(ACCESS中 date()的用法)

本篇文章给大家谈谈date函数的使用,以及ACCESS中 date()的用法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录ACCESS中 date()的用法Linux系统下date函数的用法mysql date函数怎么用AC

2025年11月6日 00:45

编程工具栏图标下载免费(工具栏图标)

编程工具栏图标下载免费(工具栏图标)

大家好,关于编程工具栏图标下载免费很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于工具栏图标的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录工具栏图标p

2026年4月21日 12:30

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索