微服务实战系列之Redis(cache)

前言

云淡天高,落木萧萧,一阵西北风掠过,似寒刀。冬天渐渐变得更名副其实了。“暖冬”的说法有点言过其实了。——碎碎念

  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

此刻,博主的“微服务实战系列”的队伍已满10员“悍将”,但是如何征服微服务这座大山,依然尚需时日。所谓一人一岗一责,术业有专攻。就像攻城离不开挖地道的、投石块的、射箭的,学习微服务自然也要“四面八方”,面面俱到。
昨天一篇Cache,突然给博主带来了灵感,索性做个Cache系列吧,分享各位盆友。
闲言少叙,言归正传。今天主讲Cache第一悍将:Redis,从实战出发,理论联系实际。
在这里插入图片描述


一、Redis入门

Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

是不是和Map类似?先开始安装吧。

1. 快速安装

首先准备一个redis稳定的tar包,上传至 /usr/local/redis

mkdir -p /usr/local/redis //创建目录
cd /usr/local/redis
tar -zxvf redis-7.0.10.tar.gz
cd /usr/local/redis/redis-7.0.10
make
make PREFIX=/usr/local/redis install

如看到“Hint:It's a good idea to run make...”,那么恭喜你!
修改必要配置:

requirepass xxx  //设置密码
daemonize yes //后台启动

到此,可以启动了:

cd  /usr/local/redis/bin
redis-server /usr/local/redis/redis-7.0.10/redis.conf
2. 数据结构

既然是K-V数据库,那必须有一对Key和Value。

2.1 Key

key一般使用字符串存储,但是定义key时,有两点注意:

  1. 长度不能太长,太长会占用内存,影响效率;
  2. 长度也不宜太短,太短影响可读性;
2.2 Value
  1. String-字符串
  2. Hash 哈希
  3. List 列表
  4. Set 集合
  5. Sorted_set 有序集合
    在这里插入图片描述

二、单点模式

什么是单点?顾名思义,有且仅有一个实例,即一个redis server。
单点模式最简单,适合于业务量较小,并发要求较低的场景,比如:
在这里插入图片描述
通过合理的定义K,实现高热数据的缓存同步,下次再请求时,可从缓存读取。
当然此模式仍需关注内存占用率和单点故障。

三、集群模式

Redis集群是一种通过将多个Redis节点互联,实现高可用、高性能的数据缓存方案。该方案可以促使Redis在不同节点上同时提供服务,提高整体可靠性。
Redis集群主要有三种模式:主从复制模式(Master-Slave),哨兵模式(Sentinel)、Cluster模式

1. 主从复制模式

在这里插入图片描述
主从复制从上图可以看出,由Master负责写操作,其Slave负责同步和读操作。
当然Slave也可以同步到多级Slave,让我们把目光聚焦下图:
在这里插入图片描述
那么,如何实现主从复制呢,命令如下:

# 在Slave节点中,新增:replicaof 主节点IP和端口
replicaof Master_IP 6379
2. 哨兵模式

简单讲,哨兵模式是在主从复制模式基础上,新增了一个“岗哨”,负责警卫。如Master发生故障,立即在集群中指定新的Master,实现服务高可用。哨兵一般使用Sentinel,前序文章已讲过哦,可回看。

在这里插入图片描述
如何实现哨兵模式呢?
可指定其中一个Redis节点为哨兵,同时配置sentinel(一般在sentinel.conf文件完成):

# 哨兵端口号
port 16379
# sentinel monitor 配置被监控主节点以及触发故障转移所需的最小哨兵节点数
sentinel monitor yourmaster IP 6379 1
# sentinel down-after-milliseconds 被监控主节点时效时间(毫秒)
sentinel down-after-milliseconds yourmaster 60000
# sentinel failover-timeout 被监控主节点故障转移超时时间(毫秒)
sentinel failover-timeout yourmaster 180000

启动哨兵模式:

redis-sentinel /usr/local/redis/sentinel/sentinel.conf
3. Cluster模式

Cluster为实现缓存的高可用,引入了数据分片的概念。可以理解为把数据拆为一份一份的数据单元,根据一定算法(CRC16),完成数据拆分,从而实现分布式存储。
在这里插入图片描述
那该如何实现呢?准备多个Redis节点(注意端口不同),并参考如下配置redis.conf

# cluster节点端口号
port 16379
# 开启集群模式
cluster-enabled yes
# 节点超时时间
cluster-node-timeout 10000

参考如下命令,启动每个节点:

redis-server /usr/local/redis/redis-7.0.10/redis.conf

最后,一键完成Cluster(实现2主2从Cluster):

redis-cli --cluster create IP:16379 IP:26379 IP:36379 IP:46379 --cluster-replicas 1

结语

今天博主对Redis的基本使用进行了介绍,无论什么架构、什么模式,取决于业务的场景和发展趋势。工具服务于业务,结合业务选择合适的工具,是当下急需的能力。
好了,缓存第一篇到此为止,欢迎分享与讨论!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/201025.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【hacker送书第4期】推荐4本Java必读书籍(各送一本)

第4期图书推荐 Java从入门到精通(第7版)内容简介参与方式 项目驱动零基础学Java内容简介参与方式 深入理解Java高并发编程内容简介参与方式 Java编程讲义内容简介参与方式 Java从入门到精通(第7版) 内容简介 《Java从入门到精通&…

Linux下文件操作函数

一.常见IO函数 fopen fclose fread fwrite fseek fflush fopen 运行过程 :打开文件 写入数据 数据写到缓冲区 关闭文件后 将数据刷新入磁盘 1.fopen 返回文件类型的结构体的指针 包括三部分 1).文件描述符(整形值 索引到磁盘文件)…

【执行批处理后 executeBatch() 没反应,一个参数相信就能搞定】

一、场景是在使用EasyExcel读取全表时,每次手动提交事务6w多条,总计190w数据量的情况下发生的。 博主比较fw,卡住了两天😶 此问题还有一个比较bug的地方,就是当你在 executeBatch() 上下打断点时还能够执行出来&…

目标检测——R-CNN算法解读

论文:Rich feature hierarchies for accurate object detection and semantic segmentation 作者:Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik 链接:https://arxiv.org/abs/1311.2524 代码:http://www.cs.berke…

信创之国产浪潮电脑+统信UOS操作系统体验8:安装Docker并进行测试验证scratch镜像

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、前言 今日在进行Docker容器相关知识的学习,不过学习环境都不是基于统信UOS操作系统的,为了实验,老猿觉得手头国产浪潮电脑统信UOS操作系统就是原生的linux操作系统&a…

【SparkSQL】基础入门(重点:SparkSQL和Hive的异同、SparkSQL数据抽象)

【大家好,我是爱干饭的猿,本文重点介绍Spark SQL的定义、特点、发展历史、与hive的区别、数据抽象、SparkSession对象。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一…

用flutter 写一个专属于儿子的听书的app

背景: 儿子最近喜欢上了用儿童手表听故事,但是手表边里的应用免费内容很少,会员一年要300多,这么一笔巨款,怎能承担的起,所以打算自己开发一个专属于儿子的听书app。 最终效果: 架构: 后端由两…

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章,本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…

解决:ModuleNotFoundError: No module named ‘qt_material‘

解决:ModuleNotFoundError: No module named ‘qt_material’ 文章目录 解决:ModuleNotFoundError: No module named qt_material背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时,报错&…

Django快速搭建静态网页

Django的快速搭建 这个是例子 这个是一个目录 项目名称:项目似乎被命名为DJ0928,这是Django项目的根目录。 文件都是Django项目的核心配置文件。 settings.py 包含了项目的配置设置。urls.py 定义了项目的URL路由。wsgi.py 和 asgi.py 分别用于Web服务器…

力扣刷题篇之分治

系列文章目录 目录 系列文章目录 前言 一、分解问题 二、解决子问题 三、合并结果 总结 前言 刷题按照: [力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode) 参考: 「五大常用算法」一文搞懂分治算法…

爬虫学习 异步爬虫(五)

多线程 多进程 协程 进程 运行中的程序 线程 被CPU调度的执行过程,操作系统 运算调度的min单位 在进程之中,进程中实际运作单位 from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(target …

异步操作的方法

在高级语言中已经有了异步的原语言,而在C 中的最好的方式就是 libevent 的方式,我这还是相当认同的,高级语言就不需要在苦哈哈的,事件转圈了,但是原理还是以事件为基础的 一句话就是在一个循环中等着他执行完,这个循环中有很多其他…

CodeMeter软件保护及授权管理解决方案(二)

客户端管理工具 CodeMeter Runtime是CodeMeter解决方案中的重要组成部分,其为独立软件包,开发者需要把CodeMeter Runtime和加密后的软件一起发布。CodeMeter Runtim包括以下组件用于实现授权的使用: CodeMeter License Server授权服务器 Co…

Leetcode(面试题 08.01.)三步问题

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中,我们将要详细介绍一下Leetcode(面试题 08.01.)三步问题相关的内容 一、题目分析 1.小孩可以上一阶,两阶&#xff…

2948. 交换得到字典序最小的数组 (分组排序)

Problem: 2948. 交换得到字典序最小的数组 文章目录 题目思路Code 题目 给你一个下标从 0 开始的 正整数 数组 nums 和一个 正整数 limit 。 在一次操作中&#xff0c;你可以选择任意两个下标 i 和 j&#xff0c;如果 满足 |nums[i] - nums[j]| < limit &#xff0c;则交换…

Python之数据可视化

文章目录 一、1、matplotlib简单应用1.1、绘制带有中文标签和图例的图1.2、 绘制散点图1.3、绘制饼状图1.4、多个图形一起显示 一、 1、matplotlib简单应用 matplotlib模块依赖于numpy模块和tkinter模块&#xff0c;可以绘制多种形式的图形&#xff0c;包括线图、直方图、饼状…

05_MySQL主从复制架构

任务背景 ##一、真实案例 某同学刚入职公司&#xff0c;在熟悉公司业务环境的时候&#xff0c;发现他们的数据库架构是一主两从&#xff0c;但是两台从数据库和主库不同步。询问得知&#xff0c;已经好几个月不同步了&#xff0c;但是每天会全库备份主服务器上的数据到从服务…

一文详解Python中常用数据类型

文章目录 Python 中常用的数据类型包括&#xff1a;Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典&#xff08;Dictionary&#xff09;Python中的集合&#xff08;Set&#xff09;Python中的…

Python---练习:求某同学成绩的总分及平均分

需求&#xff1a; 已知某同学的语文(70)、数学(90) 、英语(80)、历史(75)、地理(85)五门课的成绩,编程求该同学的总分以及平均分。 思考&#xff1a; 要求是算总分和平均分&#xff0c;先看总分&#xff0c;已经知道了各科成绩&#xff0c;那么可以用把成绩赋值给每个学科的…