当前位置: 首页 > news >正文

佛山网站建设公司排行/杭州seo关键字优化

佛山网站建设公司排行,杭州seo关键字优化,asp.net网站建设项目实战 董义革,企业服务 免费网站建设主备切换 主从复制指的是把一台Redis服务器的数据复制到其他Redis服务器上,前者称为主节点Master,后者称为从节点Slave,只能从Master单向复制到Slave,一般Master以写操作为主,Slave以读操作为主,实现读写分…

主备切换
主从复制指的是把一台Redis服务器的数据复制到其他Redis服务器上,前者称为主节点Master,后者称为从节点Slave,只能从Master单向复制到Slave,一般Master以写操作为主,Slave以读操作为主,实现读写分离。

作用

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
命令
slaveof host port    将当前服务器转变为指定服务器的从属服务器。如果已是slave则停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。SLAVEOF NO ONE将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
info [section]    INFO命令以一种易于理解和阅读的格式,返回关于Redis服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息:
配置
以单机多服务为例(正常是多机多服务,然我只有一台服务器)

首先每个redis客户端都默认是主机,可以通过info replication命令查看
那么我们现在要同时开三个客户端,模拟一主两从,所以要修改配置:

修改端口号
修改pid名字
修改log名字
修改rdb名字
设置主机连接(可不选,用命令行)
先拷贝两份配置文件作为从机配置,主机可使用默认。

哨兵模式
上面的80上位和嵌套主从都是我们手动命令行输入的,其目的就是避免主机宕机后写操作的空窗期,这些都是需要人工干预。
哨兵Sentinel会作为一个独立的进程独立运行,其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis服务器。
如果哨兵检测到主机下线,则会选一个从机「上位」(自动故障迁移)成为新的主机。如果原主机上线,原主机将变成新主机的从机。其原理是通过发布订阅模式通知其他服务器,修改配置文件,从而切换主机。

如果哨兵宕机怎么办?可以使用多哨兵模式

主观下线(Subjectively Down, 简称 SDOWN)指的是单个哨兵实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN)指的是多个哨兵实例在对同一个服务器做出主观下线判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。
当主机客观下线后,哨兵会投票出新的主机(具体算法略 ),进行自动故障迁移(failover),通过发布订阅通知其他服务器切换主机。
多哨兵模式,配置不同端口的配置文件来开启多个哨兵客户端,然后照葫芦画瓢即可

如何应对缓存穿透、缓存击穿、缓存雪崩问题
8.1. Key 的过期淘汰机制
Redis 可以对存储在 Redis 中的缓存数据设置过期时间,比如我们获取的短信验证码一般十分钟
过期,我们这时候就需要在验证码存进 Redis 时添加一个 key 的过期时间,但是这里有一个需要格
外注意的问题就是:并非 key 过期时间到了就一定会被 Redis 给删除。
8.1.1. 定期删除
Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 Key ,检查其是否过期,如果过
期就删除。为什么是随机抽取而不是检查所有 key ?因为你如果设置的 key 成千上万,每 100 毫秒
都将所有存在的 key 检查一遍,会给 CPU 带来比较大的压力。
8.1.2. 惰性删除
定期删除由于是随机抽取可能会导致很多过期 Key 到了过期时间并没有被删除。所以用户在
从缓存获取数据的时候, redis 会检查这个 key 是否过期了,如果过期就删除这个 key 。这时候就
会在查询的时候将过期 key 从缓存中清除。
8.1.3. 内存淘汰机制
# 最大空闲连接,默认 8
max-idle : 200
# 最小空闲连接,默认 0
min-idle : 5
# 哨兵模式
sentinel :
# 主节点名称
master : mymaster
# 节点
nodes :
192.168.10.100 : 26379,192.168.10.100 : 26380,192.168.10.100 : 26381
@Bean
public RedisSentinelConfiguration redisSentinelConfiguration (){
RedisSentinelConfiguration sentinelConfig = new
RedisSentinelConfiguration ()
// 主节点名称
. master ( "mymaster" )
// 主从服务器地址
. sentinel ( "192.168.10.100" , 26379 )
. sentinel ( "192.168.10.100" , 26380 )
. sentinel ( "192.168.10.100" , 26381 );
// 设置密码
sentinelConfig . setPassword ( "root" );
return sentinelConfig ;
} 仅仅使用定期删除 + 惰性删除机制还是会留下一个严重的隐患:如果定期删除留下了很多已
经过期的 key ,而且用户长时间都没有使用过这些过期 key ,导致过期 key 无法被惰性删除,从而
导致过期 key 一直堆积在内存里,最终造成 Redis 内存块被消耗殆尽。那这个问题如何解决呢?这
个时候 Redis 内存淘汰机制应运而生了。 Redis 内存淘汰机制提供了 6 种数据淘汰策略:
volatile-lru :从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile - ttl :从已设置过期时间的数据集中挑选将要过期的数据淘汰。
volatile - random :从已设置过期时间的数据集中任意选择数据淘汰。
allkeys - lru :当内存不足以容纳新写入数据时移除最近最少使用的 key
allkeys - random :从数据集中任意选择数据淘汰。
no - enviction (默认) :当内存不足以容纳新写入数据时,新写入操作会报错。
一般情况下,推荐使用 volatile - lru 策略,对于配置信息等重要数据,不应该设置过期时
间,这样 Redis 就永远不会淘汰这些重要数据。对于一般数据可以添加一个缓存时间,当数据失
效则请求会从 DB 中获取并重新存入 Redis 中。
8.2. 缓存击穿
首先我们来看下请求是如何取到数据的:当接收到用户请求,首先先尝试从 Redis 缓存中获取
到数据,如果缓存中能取到数据则直接返回结果,当缓存中不存在数据时从 DB 获取数据,如果
数据库成功取到数据,则更新 Redis ,然后返回数据
定义 :高并发的情况下,某个热门 key 突然过期,导致大量请求在 Redis 未找到缓存数据,进而
全部去访问 DB 请求数据,引起 DB 压力瞬间增大。
解决方案 :缓存击穿的情况下一般不容易造成 DB 的宕机,只是会造成对 DB 的周期性压力。对
缓存击穿的解决方案一般可以这样:
Redis 中的数据不设置过期时间,然后在缓存的对象上添加一个属性标识过期时间,每次获
取到数据时,校验对象中的过期时间属性,如果数据即将过期,则异步发起一个线程主动
更新缓存中的数据。但是这种方案可能会导致有些请求会拿到过期的值,就得看业务能否
可以接受,
如果要求数据必须是新数据,则最好的方案则为热点数据设置为永不过期,然后加一个互
斥锁保证缓存的单线程写。
8.3. 缓存穿透
定义 :缓存穿透是指查询缓存和 DB 中都不存在的数据。比如通过 id 查询商品信息, id 一般大
0 ,攻击者会故意传 id -1 去查询,由于缓存是不命中则从 DB 中获取数据,这将会导致每次缓
存都不命中数据导致每个请求都访问 DB ,造成缓存穿透。
解决方案
利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则
休眠一段时间重试
采用异步更新策略,无论 key 是否取到值,都直接返回。 value 值中维护一个缓存失效时
间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热 ( 项目启动
前,先加载缓存 ) 操作。
提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列
合法有效的 key 。迅速判断出,请求所携带的 Key 是否合法有效。如果不合法,则直接返
回。 如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为
60 秒。
8.4. 缓存雪崩
定义 :缓存中如果大量缓存在一段时间内集中过期了,这时候会发生大量的缓存击穿现象,所
有的请求都落在了 DB 上,由于查询数据量巨大,引起 DB 压力过大甚至导致 DB 宕机。
解决方案
给缓存的失效时间,加上一个随机值,避免集体失效。如果 Redis 是集群部署,将热点数据
均匀分布在不同的 Redis 库中也能避免全部失效的问题
使用互斥锁,但是该方案吞吐量明显下降了。
设置热点数据永远不过期。
双缓存。我们有两个缓存,缓存 A 和缓存 B 。缓存 A 的失效时间为 20 分钟,缓存 B 不设失效时
间。自己做缓存预热操作。然后细分以下几个小点
1. 从缓存 A 读数据库,有则直接返回
2. A 没有数据,直接从 B 读数据,直接返回,并且异步启动一个更新线程。
3. 更新线程同时更新缓存 A 和缓存 B

相关文章:

redis主备切换,哨兵模式,缓存穿透、缓存击穿、缓存雪崩问题

主备切换 主从复制指的是把一台Redis服务器的数据复制到其他Redis服务器上,前者称为主节点Master,后者称为从节点Slave,只能从Master单向复制到Slave,一般Master以写操作为主,Slave以读操作为主,实现读写分…...

2023山东icpc省赛总结

距离比赛结束已经一天多了,现在的感觉就是三个字:意难平。 这是我们第一次打现场赛,去之前真的是很激动。因为我们比赛前做了很多其他省的省赛模拟,也做了几套今年别的省的题目,做完会去搜题解,会看到别人写…...

linux0.12-12-fs

[606页] 第12章 文件系统 606–12-1-总体功能 607–12-1-1-MINIX文件系统 611–12-1-2-文件类型、属性和目录项 615–12-1-3-高速缓冲区 616–12-1-4-文件系统底层函数 616–12-1-5-文件中数据的访问操作 618–12-1-6-文件和目录管理系统调用 619–12-1-7-360KB软盘中文件系统…...

快速入门SpringMVC 学习

目录 SpringMVC 定义 MVC定义 创建SpringMVC项目 SpringMVC掌握功能 一、连接功能 RequestMapping(请求映射) GetMapping 和 PostMapping 二、获取参数功能 传递单个参数/多个参数 注意点: RequestParam(前后端参数映射) 前后端参数映射 RequestParam特…...

leetcode96--不同的二叉搜索树[java]

不同的二叉搜索树 leetcode 96 题 不同的二叉搜索树题目描述暴力递归解题思路代码演示执行效率 递归 缓存解题思路代码演示执行效率 动态规划专题 leetcode 96 题 不同的二叉搜索树 原题链接: 难度—中等 https://leetcode.cn/problems/unique-binary-search-trees/ 题目描述 …...

【Spring 项目的创建和使用】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1. 创建 Spring 项目 2. 创建一个 普通 Maven…...

数据类型.

数据类型 数据类型分类 数值类型 tinyint类型 数值越界测试: mysql> create table tt1(num tinyint); Query OK, 0 rows affected (0.02 sec)mysql> insert into tt1 values(1); Query OK, 1 row affected (0.00 sec)mysql> insert into tt1 values(128…...

深入了解JavaScript中的Promise

在JavaScript中,异步编程是必不可少的。过去,我们通常使用回调函数来处理异步操作,但回调地狱(callback hell)和复杂的错误处理使得代码难以维护。为了解决这些问题,ES6引入了Promise,它是一种更…...

Solidity基础六

生活本来就是平凡琐碎的,哪有那么多惊天动地的大事,快乐的秘诀就是不管对大事小事都要保持热情 目录 一、Solidity的特殊变量(全局) 二、Solidity的不可变量 immutable的赋值方式 三、Solidity的事件与日志 事件和日志加深理解 四、Solidity的异常…...

自学网络安全解决问题方法

自学网络安全很容易学着学着就迷茫了,找到源头问题,解决它就可以了,所以首先咱们聊聊,学习网络安全方向通常会有哪些问题,看到后面有惊喜哦 1、打基础时间太长 学基础花费很长时间,光语言都有几门&#xf…...

Java之旅(七)

Java 异常 Java异常(Exception)是在程序运行过程中出现错误或异常情况时,由程序自动抛出,导致程序无法正常运行,用于向上层调用程序传递错误信息或中断程序执行的一种机制。 异常与错误不同,错误是由于程…...

测试报告模板二

项目名称 系统测试报告 平台测试小组 2023年x月xx日 文档信息 文档名称: 作者:...

C语句概述

1 、 C 语句分类: ①控制语句:二个分支语句( if-else 、 switch ),三个循环语句( for 、 while 、 do - while ),四个转移语句( continue 、 break 、 goto 、 return…...

C++ [STL之vector模拟实现]

本文已收录至《C语言和高级数据结构》专栏! 作者:ARMCSKGT STL之vector模拟实现 前言正文空间结构默认成员函数构造函数拷贝构造函数赋值重载析构函数关于数据拷贝问题 迭代器容量操作查询容量容量操作 数据访问下标访问头尾数据访问 数据增删尾插尾删重…...

【算法竞赛进阶指南】141.周期 题解 KMP 最小循环节

题目描述 一个字符串的前缀是从第一个字符开始的连续若干个字符,例如 abaab 共有 5 5 5 个前缀,分别是 a,ab,aba,abaa,abaab。 我们希望知道一个 N N N 位字符串 S S S 的前缀是否具有循环节。 换言之…...

【Springboot 入门培训 】#19 Spring Boot 组件扫描与bean生命周期

目录 1 什么是组件扫描2 何时使用组件扫描3 扫描整个包basePackages与 includeFilters4 Spring boot 的 Bean 生命周期4.1 生命周期4.2 Bean 生命周期4.3 周期各个阶段 首先,我想先为你介绍一下“Spring”,这是一个开放源代码的设计模式解决方案和轻量级…...

Linux printf 函数输出问题

printf 函数并不会直接将数据输出到屏幕&#xff0c;而是先放到缓冲区中&#xff0c;只有一下三种情况满足&#xff0c;才会输出到屏幕。 1&#xff09; 缓冲区满 2&#xff09; 强制刷新缓冲区 fflush 3&#xff09; 程序结束时 1 #include<stdio.h>2 #include<st…...

皮卡丘Unsafe Fileupload

1.不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见&#xff0c;比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后&#xff0c;后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等&#xff0c;然后将其按照设计的格式进行…...

最优化简明版(上)

引言 本文简单地介绍一些凸优化(Convex Optimization)的基础知识&#xff0c;可能不会有很多证明推导&#xff0c;目的是能快速应用到机器学习问题上。 凸集 直线与线段 设 x 1 ≠ x 2 x_1 \neq x_2 x1​x2​为 R n \Bbb R^n Rn空间中的两个点&#xff0c;那么具有下列形…...

MySQL的一些介绍

1. SQL的select语句完整的执行顺序 SQL Select语句完整的执行顺序&#xff1a; 1、from子句组装来自不同数据源的数据&#xff1b; 2、where子句基于指定的条件对记录行进行筛选&#xff1b; 3、group by子句将数据划分为多个分组&#xff1b; 4、使用聚集函数进行计算&am…...

unity发布webGL后无法预览解决

众所周知&#xff0c;unity发布成webgl后是无法直接预览的。因为一般来说浏览器默认都是禁止webgl运行的。 直接说我最后的解决方法&#xff1a;去vscode里下载一个live server ,安装好。 下载vscode地址Visual Studio Code - Code Editing. Redefined 期间试过几种方法都不管…...

Flume和Kafka的组合使用

一.安装Kafka 1.1下载安装包 通过百度网盘分享的文件&#xff1a;复制链接打开「百度网盘APP 即可获取」 链接&#xff1a;https://pan.baidu.com/s/1vC6Di3Pml6k1KMbnK0OE1Q?pwdhuan 提取码&#xff1a;huan 也可以访问官网&#xff0c;下载kafka2.4.0的安装文件 1.2解…...

JSONSQL:使用SQL过滤JSON类型数据(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

1. 简介 在开发中&#xff0c;经常需要根据条件过滤大批量的JSON类型数据。如果仅需要过滤这一种类型&#xff0c;将JSON转为List后过滤即可&#xff1b;如果相同的条件既想过滤数据库表中的数据、也想过滤内存中JSON数据&#xff0c;甚至想过滤Elasticsearch中的数据&#xff…...

Linux输入输出重定向

目录 Linux输入输出重定向 Linux中的默认设备 输入输出重定向定义 输入输出重定向操作符 实用形式 标准输入、标准输出、标准错误 输出重定向案例 案例1 --- 输出重定向&#xff08;覆盖&#xff09; 案例2 --- 输出重定向&#xff08;追加&#xff09; 案例3 --- 错误…...

使用kettle进行数据统计

1.使用kettle设计一个能生成100个取值范围为0到100随机整数的转换。 为了完成该转换&#xff0c;需要使用生成记录控件、生成随机数控件、计算器控件及字段选择控件。控件布局如下图所示 生成记录控件可以在限制框内指定生成记录的个数&#xff0c;具体配置如图所示 生成随机数…...

线程的取消和清理

一、线程的取消 意义&#xff1a;随时杀掉一个线程 int pthread_cancel(pthread_t thread); 注意&#xff1a;线程的取消要有取消点才可以&#xff0c;不是说取消就取消&#xff0c;线程的取消点主要是阻塞的系统调用 二、运行段错误调试 可以使用gdb调试 使用gdb 运行代…...

day8 -- 全文本搜索

brief InnoDB存储引擎从MySQL 5.6开始支持全文本搜索。具体来说&#xff0c;MySQL使用InnoDB存储引擎的全文本搜索功能称为InnoDB全文本搜索&#xff08;InnoDB Full-Text Search&#xff09;。InnoDB全文本搜索支持标准的全文本搜索查询语法和多语言分词器&#xff0c;因此可…...

C语言:if-else语句

嗨&#xff0c;今天咱们讲讲C语言控制语句里的条件选择&#xff0c;主要总结下if else语句。 咱们生活里经常会有这样的场景&#xff0c;明天该怎么穿呢&#xff0c;得考虑下具体的天气。如果是晴天&#xff0c;温度还不错&#xff0c;可以穿T恤&#xff1b;如果是阴天&#xf…...

C语言---函数

1、函数是什么 学习库函数网站&#xff1a; https://cplusplus.com/reference/http://en.cppreference.comhttp://zh.cppreference.com 我们参考文档&#xff0c;学习几个库函数 2、库函数 3、自定义函数 自定义函数和库函数一样&#xff0c;有函数名&#xff0c;返回值类…...

【JVM】什么是双亲委派机制?

一、为什么会有这种机制&#xff1f; 类加载器将.class类加载到内存中时&#xff0c;为了避免重复加载&#xff08;确保Class对象的唯一性&#xff09;以及JVM的安全性&#xff0c;需要使用某一种方式来实现只加载一次&#xff0c;加载过就不能被修改或再次加载。 二、什么是双…...