(十)redis源码解读

一、redis工作机制

(十)redis源码解读

redis是 单线程,所有命令(set,get等)都会加入到队列中,然后一个个执行。

二、为什么redis速度快?

1、基于内存

2、redis协议resp 简单、可读、效率高

三、什么是resp

redis是一个ServerSocket服务器,而Jedis是一个Socket客户端类似redis-cli,用于与redis通讯,而redis和jedis之间通讯用的就是resp,如下图,如果jedis要设置一个值,命令是:set name shyroke,转为resp协议为:

*3
$3
set
$4
name
$7
shyroke

而如果jedis想要获取一个值,发送指令:get name,转为resp为:

*2
$3
get
$4
name

(十)redis源码解读

四、redis分表分库

如果数据量太大,一个redis存不下,那么此时就需要分表分库。

(十)redis源码解读

最简单的做法编写一个代理服务器,不管是数据库还是客户的缓存都通过代理,然后key进行路由,具体做法是对key长度进行取模,所得的结果就是相应的redis服务器。

案例:

(1)启动3个redis服务器,只要复制3份redis的配置文件(redis.window.conf),修改其中的端口号,然后分别脚本启动启动:redis-serve.exe 配置1.conf redis-serve.exe 配置2.conf redis-serve.exe 配置3.conf

(十)redis源码解读

(2)客户端请求代理服务器,代理服务器解析resp协议,并使用代理算法(key长度取模)计算相应的redis服务器,然后进行操作。代理算法:此时有3台服务器,此时执行:set name shyroke ,key的值为name,那么对key长度取模 = 4%3 = 1 ,所以此时会执行第二台redis服务器,也就是会往第二台代理服务器中存数据。

(十)redis源码解读

(3)测试如下图,19000是代理服务器的端口,此时jedis连接代理服务器,然后存一个值a=enjoy_a,a的长度是1,此时服务器有3台,所以1%3=1,所以此时会向第二台服务器也就是127.0.0.1:6380这台服务器存一个值。

(十)redis源码解读

五、redis之读写分离

如果有读多写少或者读少写多的场景,尤其是电商项目,读多写少,此时可以进行读写分离,也就是说可以用一台服务器用于写操作,多台服务器进行读操作。

案例

以三台服务器为例如下图,关键是数据同步,也就是说写的那台数据库的数据如何同步到其他用于读的数据库里。

(十)redis源码解读

1、修改两台读的redis服务器的配置文件,如下图,需要注意的是,加了下图的配置后就不能进行写(set)操作,只能往主节点(即写服务器)中写,只能进行读操作(get)

(十)redis源码解读

2、主节点(本例中为写服务器)挂了怎么办?

使用哨兵机制。即设置定时器,定时去ping主节点,如果pign不通则说明主节点(写服务器)挂了,此时就需要从子节点(读服务器)中选一个作为主节点,然后其他子节点作为新主节点的子节点。主节点中执行redis命令:info application 中可以获取主节点中所有子节点。

1、检查主节点状态

2、切换主节点。

(十)redis源码解读

Original: https://www.cnblogs.com/shyroke/p/12030886.html
Author: shyroke、
Title: (十)redis源码解读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529332/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何在 pyqt 中捕获并处理 Alt+F4 快捷键

    前言 如果在 Windows 系统的任意一个窗口中按下 Alt + F4,默认行为是关闭窗口(或者最小化到托盘)。对于使用了亚克力效果的窗口,使用 Alt + F4 最小化到托盘,…

    Linux 2023年6月7日
    0116
  • Linux Centos 打开和关闭防火墙

    systemctl status firewalld.service # 查看防火墙状态 systemctl start firewalld.service # 开启防火墙 sys…

    Linux 2023年6月13日
    0109
  • Linux 命令行设置网络代理

    echo $SHELL/usr/bin/zsh 根据当前的shell类型来设置,我这里以zsh为例,vim ~/.zshrc export ALL_PROXY=”htt…

    Linux 2023年6月6日
    0191
  • 自动化集成:Pipeline流水语法详解

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作; 本篇文章主要描述Pipeline流水线用法。 一…

    Linux 2023年5月27日
    0114
  • WPF 解决 ObservableCollection 提示 Cannot change ObservableCollection during a CollectionChanged event 异常

    本文告诉大家在使用 ObservableCollection 时,抛出 InvalidOperationException 异常,提示 Cannot change Observab…

    Linux 2023年6月6日
    075
  • 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年。2008 年左…

    Linux 2023年6月14日
    091
  • 20 年老程序员告诉你的 20 条编码原则

    我从 1999 年就开始了编程生涯,到今年已经有 20 多年了。我先是从 Basic 开始,很快转到了 Pascal 和 C 语言,然后又学习了面向对象编程语言 Delphi 和 …

    Linux 2023年6月8日
    097
  • 中土批量运维神器《ps1屠龙刀》 pk 西域批量运维圣器《ansible圣火令》

    据故老相传,运维界有句话:”脚林至尊,宝刀【ps1屠龙】,号令被控,莫敢不从”。 https://gitee.com/chuanjiao10/kasini3…

    Linux 2023年6月14日
    0110
  • C语言静态库与动态库

    库 是一种代码的二进制的封装形式,将.o文件打包封装就成了库。库可以在任何地方使用,但用户却不能看见他的具体实现。库有利于代码模块化,只要接口设计得合理,改变库的内部实现,不会影响…

    Linux 2023年6月7日
    089
  • 配置免密登陆服务器

    前言 原来自己学习的时候在阿里云买自己的学习机,一台主机自己瞎折腾。但是参加工作以后管理的主机越来越多了,上服务器看的频率也越来越频繁,虽然有时候shell管理工具可以很方便的保存…

    Linux 2023年5月27日
    0128
  • Docker容器网络

    Docker容器网络 1、Docker容器网络 Docker在安装后自动提供3种网络,可以使用`docker network ls命令查看 [root@localhost ~]# …

    Linux 2023年6月7日
    097
  • JDK的环境变量

    jdk下载并配置下载jdk下图是自己资源管理器中jdk的安装路径,双击然后next就好,不需要改什么配置 手里没有安装包的,下载地址在这里 :https://www.oracle….

    Linux 2023年6月13日
    069
  • CentOS 7服务器安装Redis并配置集群(上)

    一、环境准备及规划 3台服务器都是CentOS 7.x,服务器IP如下: 10.223.201.141 ,10.223.201.142,10.223.201.143(这3台作为服务…

    Linux 2023年5月28日
    075
  • 分布式数据库

    目录: 1.分布式数据库的核心功能 2.分布式数据库的优点 3.分布式数据库的缺点 4.市面上分布式数据库的产品分类 5.分布式数据库的搭建 随着互联网的发展,人类社会的数据量迅速…

    Linux 2023年6月6日
    063
  • redis

    常用操作 LLEN KEY_NAME # 返回列表的&#x95…

    Linux 2023年5月28日
    099
  • Gitlab 403 forbidden 并发引起IP被封

    问题 在工作中自搭建的Gitlab。但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden。 原因 Gitlab使用rack_attack做了并发访问的限制。 解…

    Linux 2023年6月14日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球