自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

帅枫的博客

本人博客大多数是自己的学习笔记,如有侵权,联系作者24小时之内删除!

  • 博客(117)
  • 收藏
  • 关注

原创 还不会 happens-before,冰冰教你啊

为什么要有 happens-beforehappe-before 是 JMM 最核心的概念,对应 Java 程序员来说,理解 happens-before 是理解 JMM 的关键。从 JMM 设计者的角度来看,可见性和有序性其实是互相矛盾的两点:一方面,对于程序员来说,我们希望内存模型易于理解、易于编程,为此 JMM 的设计者要为程序员提供足够强的内存可见性保证,专业术语称之为 “强内存模型”。而另一方面,编译器和处理器则希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化(比

2022-01-02 15:24:24 268

原创 常见的网络攻击手段

XSS 攻击跨站脚本攻击(Cross Site Scripting),就是攻击者在web页面插入恶意的script代码(这个代码可以是JS脚本、CSS样式或者其他意料之外的代码),当用户浏览该页面之时,嵌入其中的script代码会被执行,从而达到恶意攻击用户的目的。比如读取cookie,session,tokens,或者网站其他敏感的网站信息,对用户进行钓鱼欺诈等。常见的 XSS 攻击有反射型和持久型。反射型可以使用 http-only 让恶意脚本获取不到cookie,或者用一些转义字符,比如&l

2021-11-27 16:45:13 1492 1

原创 Git常用命令

常见名词Master:默认开发分支Origin:默认远程版本库Index / stage:暂存区Workspace:工作区Repository:仓库区(或本地仓库)Remote:远程仓库一、 新建代码库# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]二、配置Git的设置文件为.gitconfig,它可以在

2021-11-22 09:50:59 256

原创 表妹要我教她负载均衡算法

一、随机法(Random)完全随机:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。代码实现:public class Servers { public List<String> list = new ArrayList<>() { { add("192.168.1.

2021-11-22 09:44:57 794

原创 不会分布式锁,彬彬教你啊

为什么需要分布式锁我们为什么需要分布式锁呢?与分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。如果换做是多个进程,需要同时操作一个共享资源,如何互斥呢?例如,现在的业务应用通常都是微服务架构,这也意味着一个应用会部署多个进程,那这多个进程如果需要修改 MySQL 中的同一行记录时,为了避免操作乱序导致数据错误,此时,我们就需要引入「分布式锁」来解决这个问题了。想要实现分布

2021-11-22 09:43:56 123

原创 还不懂一致性哈希算法,看这篇就够了

为什么要有一致性哈希算法我们首先想象一个这样的场景,如果我们有3台缓存服务器用于缓存图片,为这3台服务器编号为0号、1号、2号、现在有3万张图片需要缓存在这3台服务器上,我们肯定希望这些图片被均匀的分散到这3台服务器上,以便能够分摊缓存的压力。那么我们应该怎么做呢?如果我们随意的将这3万张图片缓存在这3台服务器上,可以满足我们的需求吗?可以,但是如果这样做,当我们需要访问某个缓存项时,则需要遍历3台缓存服务器,从3万张缓存图片中找到我们需要访问的那张图片,遍历的过程效率太低,时间太长,当我们找到需要访问

2021-11-22 09:42:36 160

原创 全网最详细的 TCP 可靠传输

前置芝士在讲解 TCP 可靠传输之前,我们先搞清楚什么是 TCP 可靠传输?TCP 可靠传输就是保证接收方收到的字节流和发送方发出的字节流是完全一样的。那为什么需要 TCP 的可靠传输呢?由于网络层是没有可靠传输机制的,尽自己最大的努力进行交付。而传输层使用 TCP 实现可靠传输,TCP 保证可靠传输的机制有如下几种:1)校验和2)序列号和确认应答机制3)重传机制4)滑动窗口5)流量控制6)拥塞控制校验和所谓 TCP 的校验和(Checksum)就是说:由发送端计算待发送 TCP 报

2021-11-22 09:41:18 2859

原创 还不懂 IP 协议,我教你啊

IP 协议的基本认知IP(Internet Protocol)协议,中文叫网际协议 ,是位于网络层的一个协议。它用于屏蔽下层物理网络的差异,为上层提供统一的 IP 数据报。就像下面这样:IP 协议的特点:IP 协议提供无连接的、不可靠的、尽力的数据报投递服务:无连接的投递服务:发送端可于任何时候自由发送数据,而接收端永远不知道自己会在何时从哪里接收到数据。每个 IP 数据报独立处理和传输, 一台主机发出的数据报序列,可能会走不同的路径, 甚至有可能其中的一部分数据报会在传输过程中丢失。不可靠的投

2021-11-22 09:40:04 2605

原创 表妹教你进程调度算法

前言进程调度算法也称 CPU 调度算法,当 CPU 空闲时,操作系统就从就绪队列中按照一定的算法选择某个就绪状态的进程,并给其分配 CPU。通常以下几种情况会发生进程的调度:当进程从运行状态转到等待状态;当进程从运行状态转到就绪状态;当进程从等待状态转到就绪状态;当进程从运行状态转到终止状态;其中 1 和 4 称为非抢占式调度,2 和 3 称为抢占式调度。非抢占式调度就是当进程正在运行时,它就会一直运行,直到该进程完成或发生某个事件而被阻塞时,才会把 CPU 让给其他进程;抢占式调度就是进程

2021-11-22 09:38:08 1006

原创 吊打面试官之进程的基础知识

进程的概念试想一下这样的场景:我们编写好的代码是怎么运行起来的呢?我们编写好的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」。那进程的定义就是:进程是程序在某个数据集合上的运行过程,也是操作系统进行资源分配和调度的基本单位。简单来说,进程是程序的一次执行过程,它和程序的区别如下:程序是静态的,它作为系统中的一种资源是永远存在的进程是动态的,它是动态

2021-11-22 09:37:22 166

原创 梁非凡,还不懂进程间通信,吃屎啦你

前置知识说到进程通信,我们首先得知道怎么是线程通信吧,那什么是线程通信呢?顾名思义,进程通信( InterProcess Communication,IPC)就是指进程之间的信息交换。我们知道进程是分配系统资源的单位,包括内存地址空间(什么!你竟然不知道,等我????????????),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的。我们发现操作系统的内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。下面我

2021-11-15 09:54:43 915

原创 还不懂 TCP 三次握手和四次挥手,吃屎啦你

前置芝士在讲解 TCP 三次握手和四次挥手之前,我们先来简单的讲解 TPC 的基础知识,这样更有助于我们后面的理解。首先我们得知道什么是 TCP ?TCP 是面向连接的、可靠的、基于字节流的传输层通信协议,中文叫传输控制协议。下面简单的解释一下:面向连接:一定是一对一才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的。可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端。字节流:消息是没有边界的,所以无论我们消息

2021-11-15 09:52:43 269

原创 吊打面试官之浏览器输入网址发生了什么

前面我们学习了各种协议,应用层的 HTTP、DNS 协议,传输层的 TCP 协议,网络层的 IP 协议等等,今天我就带你看看一道常见的面试题:当在浏览器输入一个网址后会发生什么?探究一个数据包在网络的心路历程。解析 URL当我们在浏览器输入一个 URL 后,第一步就是对 URL 进行解析,得到里面的参数,将域名和需要请求的资源分离开来,从而知道需要请求的是哪个服务器,请求的是服务器上的哪些资源等。我们首先看看 URL 各元素的组成:服务器上面的资源的文件路径为:封装 HTTP 请求报文对 UR

2021-11-15 09:51:42 1732

原创 DNS 协议详解

我们知道,当我们访问一个服务器上的资源时,是需要 IP 地址的,但是在我们平常使用浏览器的时候,却并没有输入那一长串的 IP 地址,而是在地址栏输入了一串网址,那为啥输入网址就能请求到服务器上的资源了呢?这就离不开域名解析协议(DNS)的功劳了,今天我就带你看看 DNS 是怎么工作的????????????。什么是 DNS 协议在介绍 DNS 协议之前,我们先得知道 IP地址和域名的概念:IP 地址:一长串能够唯一地标记网络上的计算机的数字。域名:又称网域,是由一串用点分隔的名字组成的 Inter

2021-11-15 09:50:00 1455

原创 HTTPS 看这篇就够了

我们之前讲解过了 HTTP,如果面看过的建议先去看看 HTTP(传送门),我们知道 HTTP 有三大缺点:通信使用明文、不验证通信方的身份、无法证明报文的完整性。今天,我就来带你看看 HTTPS 相比 HTTP 有哪些优点,是如何解决这些问题的,话不多说,直接开干。不安全的 HTTP在上篇文章中我们只是简单的介绍了 HTTP 不安全的几点,并没有详细分析,今天我们就来详细的分析 HTTP 在不安全方面的三个缺点,如下所示:通信使用明文( 不加密) , 内容可能会被窃听不验证通信方的身份, 因此有可

2021-11-15 09:48:45 1463

原创 杰哥教你布隆过滤器

布隆过滤器BloomFilter概念及原理布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。布隆过滤器的原理是,当⼀个元素被加⼊集合时,通过K个散列函数将这个元素映射成⼀个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(⼤约)知道集合中有没有它了:如果这些点有任何⼀个0,则被检元素⼀定不在;如果都是1,则被检元素很可能在。 如下图所示:比如:我们现在把元素

2021-11-08 11:02:48 718

原创 还不会哨兵机制,我教你啊

为什么需要哨兵机制我们现在的 Redis 一般都是以主从库集群的方式部署的,在这个模式下,如果从库发生了故障,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。 而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。此时,也没有实例可以来服务客户端的写操作请求了,如下图所示:

2021-11-08 11:02:04 474

原创 还不懂Redis中的高级数据结构,我教你啊

前面我们学习 Redis 中的5中基础数据类型,今天我又来了,没错,就是 Redis 中剩余的3中高级数据类型,废话不多说,我们开始吧。BitmapBitmap 翻译过来就是位图,那它有什么作用呢?我们首先想这么一个场景,二值状态统计,这个二值状态就是指集合元素的取值就只有0和1两种。比如:在签到打卡的场景中,我们只用记录签到(1)或未签到(0),这就是典型的二值状态。在我们签到统计时,每个用户的一天的签到用1个bit位就能表示,有多少天就只需要多少个bit位,不需要使用太复杂的集合类型,这时我们就可

2021-11-08 11:01:01 622

原创 吊打面试官之缓存雪崩、击穿、穿透

我们知道缓存雪崩、击穿、穿透是缓存异常最常见的三个问题,一旦这三个问题发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障,这肯定是我们不能容忍的。今天我就带你彻底剖析这三个问题,让你知道这三个问题的表现、诱发原因以及解决方法,废话不多说,直接开始。缓存雪崩缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。 缓存雪崩一般是由下面这两个原因导致的,我们慢慢来看。第一个原因是:缓存中有大量数据同时

2021-11-08 11:00:15 1841

原创 哨兵集群:哨兵挂了,主从还能切换吗

前言我们之前在哨兵机制中讲过了(如果没有看过这篇文章的,必须先看这篇文章之后再来看本篇),哨兵可以实现主从库的自动切换。通过部署多个实例,就形成了一个哨兵集群,哨兵集群中的多个实例共同判断,可以降低对主库下线的误判率。但是你有没有想过这样一个问题:如果有哨兵实例在运行时发生了故障,主库还能正常切换吗?实际上,一旦多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户端。如果你部署过哨兵集群的话就会知

2021-11-08 10:59:04 181

原创 吊打面试官之 redo log 详解

不知道大家是否还记得事务的四大特性,现在我们回忆一下吧,持久性、一致性、隔离性、原子性。没错,我们今天讲的就是持久性。一、啥是 redo log我们想象有这么一个生产环境,就是如果我们只在内存的 Buffer Pool 中修改了页面,事务提交后突然发生了某个故障,导致内存中的数据都失效了,那么这个已经提交了的事务对数据库中所做的更改也就跟着丢失了,这你能忍?反正我是不能忍。???????????? 这就是持久性遭到了破坏,那我们如何保证持久性呢? 有同学可能说每次事务提交之前把该事务所修改的所有页面都刷

2021-11-08 10:56:15 3685 2

原创 冰冰要我教她 undo log,怎么办

一、事务回滚的需求我们说过事务需要保证原子性 ,也就是事务中的操作要么全部完成,要么什么也不做。但是偏偏有时候事务执行到一半会出现一些情况,比如:情况一:事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误。情况二:程序员可以在事务执行过程中手动输入 ROLLBACK 语句结束当前的事务的执行。这两种情况都会导致事务执行到一半就结束,但是事务执行过程中可能已经修改了很多东西,为了保证事务的原子性,我们需要把东西改回原先的样子,这个过程就称之为 回滚 (英文

2021-11-08 10:55:37 104

原创 表妹问我有哪些索引,我还能不会

上次我们讲了 MySQL 索引的底层原理,现在我们讲讲如何使用 MySQL 索引吧一、索引的代价空间上的代价每建立一个索引都要为它建立一棵 B+ 树,每一棵 B+ 树的每一个节点都是一个数据页,一个页默认会占用 16KB 的存储空间,一棵很大的 B+ 树由许多数据页组 成,那可是很大的一片存储空间呢,我们可是节约资源的好小孩呢 ????????????时间上的代价每次对表中的数据进行增、删、改操作时,都需要去修改各个 B+ 树索引。而且我们讲过, B+ 树每层节点都是按照索引列的值从小到大的顺序

2021-11-08 10:54:45 85

原创 吊打面试官之 Hashtable 详解

如何保证 HashMap 线程安全我们知道 HashMap 是线程不安全的,我们一般使用这三种方式来代替原生的线程不安全的 HashMap:1)使用 java.util.Collections 类的 synchronizedMap 方法包装一下 HashMap,得到线程安全的 HashMap,其原理就是对所有的修改操作都加上 synchronized。方法如下:public static <K,V> Map<K,V> synchronizedMap(Map<K,V>

2021-11-08 10:52:06 222

原创 吊打面试官之 ArrayList 详解

ArrayList 概述ArrayList 实现了 List 接口,其实就是一个数组列表,不过作为 Java 的集合框架,它只能存储对象引用类型,也就是说当我们需要装载的数据是诸如 int、float 等基本数据类型的时候,必须把它们转换成对应的包装类。ArrayList 的底层实现是一个 Object 数组:transient Object[] elementData;既然它是基于数组实现的,数组在内存空间中是连续分配的,那必然查询速率非常快,不过当然也肯定逃不过增删效率低的缺陷。另外,和 A

2021-11-08 10:51:11 146

原创 排序算法详解

排序算法平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性冒泡排序O(n^2)O(n)O(n^2)O(1)In-place稳定选择排序O(n^2)O(n^2)O(n^2)O(1)In-place不稳定插入排序O(n^2)O(n)O(n^2)O(1)In-place稳定希尔排序O(n(logn)^2)O(nlogn)O(n(logn)^2)O(1)In-place不稳定归并排序O(nlogn)O(nl...

2021-11-02 09:31:28 85

原创 面试必备算法模板

一、基础算法快速排序算法模板#include <iostream>#include <algorithm>using namespace std; const int N = 100010;int n;int q[N];void quick_sort(int q[], int l, int r){ if (l >= r) return; int mid = q[l + r >> 1], i = l - 1, j = r +

2021-11-02 09:25:48 300

原创 缓存和数据库一致性问题,看这篇就够了

如何保证缓存和数据库一致性,相信大家一定被这个搞的头疼过吧,今天,我就来治治你的头痛,带你一步一步,由浅入深地剖析缓存一致性问题,保证华强都能听懂。为什么要引入缓存我们都知道,引入缓存是为了提高性能,我们先从最简单的场景开始讲起。如果你的业务处于起步阶段,流量非常小,那无论是读请求还是写请求,直接操作数据库即可,这时你的架构模型是这样的:但随着业务量的增长,你的项目请求量越来越大,这时如果每次都从数据库中读数据,那肯定会有性能问题。这个阶段通常的做法是,引入「缓存」来提高读性能,架构模型就变成了

2021-11-02 09:14:33 213

原创 华强都懂的反射,你懂吗

我们都知道反射是框架设计的灵魂,是必须要掌握的内容,华强都懂了,你还不懂吗,今天我就来带你揭开反射的真面目,就问你看不看吧。为什么要使用反射我们先想一下为什么要有反射,看下面的例子:假如我们有一个接口 X 及其方法 test,和两个对应的实现类 A、B:public class Test { interface X { public void test(); } class A implements X{ @Override p

2021-11-02 09:12:26 125

原创 杰哥教你学动态代理

我们知道,动态代理使用了反射,Spring 中的 AOP 由于使用了动态代理,所以也相当于使用了反射机制。那么,代理是什么?动态代理又是什么?动态代理中是如何使用反射的?今天,我就带你剖析动态代理的真面目。代理模式概述简单来说,代理模式就是使用代理对象来代替对真实对象的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式大致有三种角色:Real Subject:真实类,也就是被代理类、委托类。用来真正完成业务服务功能;Proxy:代理类,将自身的请求用 R

2021-11-02 09:11:40 158

原创 把 Redis 当作队列使用真的合适吗

经常听到很多人讨论,关于「把 Redis 当作队列来用是否合适」的问题。有些人表示赞成,他们认为 Redis 很轻量,用作队列很方便。也些人则反对,认为 Redis 会「丢」数据,最好还是用「专业」的队列中间件更稳妥。究竟哪种方案更好呢?今天我就和你聊一聊把 Redis 当作队列,究竟是否合适这个问题。从最简单的开始:List 队列如果你的业务需求足够简单,想把 Redis 当作队列来使用,肯定最先想到的就是使用 List 这个数据类型。因为 List 底层的实现就是一个「链表」,在头部和尾部操作

2021-11-02 09:10:35 104

原创 不懂 MySQL Buffer Pool,看这篇就够了

我们都知道,MySQL 是基于磁盘存储的数据库,那我们每次查询一个页的记录时都得从磁盘加载整个页进内存然后读取呢,那这样既不是很慢。所以 MySQL 实现了一种叫做 Buffer Pool 的玩意,那 Buffer Pool 是啥玩意呢,我们接着往下看 ????????????一、Buffer Pool其实,Buffer Pool 是 MySQL 服务器向操作系统申请的一片连续的内存区域,我们可以通过 innodb_buffer_pool_size 设置 Buffer Pool 的大小小贴士:inn

2021-11-02 09:08:45 366

原创 吊打面试官之MySQL事务

一、事务的概念那到底何为事务呢?我们把需要保证 原子性 、隔离性、 一致性 和 持久性 的一个或多个数据库操作称之为一个事务它大致分为如下几个状态:活动的(active)事务对应的数据库操作正在执行过程中时,我们就说该事务处在 活动的 状态。部分提交的(partially committed)当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们就说该事务处在 部分提交的 状态。失败的(failed)当事务处在 活动的 或者 部分提交的 状态时,可

2021-11-02 09:07:25 86

原创 杰哥教你 MVCC,你听吗

在讲解 MVCC 之前,我们先简单来复习一下事务的四大特性(ACID):原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响今天,我们讲解的就是隔离性 ????????????

2021-10-31 10:17:42 157

原创 主从库如何实现数据一致

前置知识我们知道 Redis 有 AOF 和 RDB 两种持久化机制,如果 Redis 发生宕机,可以通过这两种机制恢复数据,从而保证尽量少丢失数据,提升可靠性。不过使用了这两种机制依然存在服务不可用的问题,比如我们实际只运行了一个 Redis 实例,如果这个实例宕机了,他在恢复期间,是无法服务新来的数据存储请求的。那我们总说的 Redis 具有高可用性是怎么回事呢?其实这包括两个方面:1、数据尽量少丢失,2、服务尽量少中断。AOF 和 RDB 保重了第一点,而对于第二点,Redis 的做法就是增加副

2021-10-30 14:58:52 986

原创 吊打面试官之 HTTP 协议的前世今生

1、HTTP 的基本概念HTTP 是超文本传输协议(HyperText Transfer Protocol),下面具体解释一下:协议:HTTP 是一个用在计算机世界里的协议,它使用计算机能够理解的语言确立了一种计算机之间交流通信的方式(两个及以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。传输:HTTP 是一个双向协议,比如 A 浏览器访问 B 服务器,使用 HTTP 协议来通信,数据就在 A 和 B 之间传输,但是中间允许有中转或接力。HTTP 是一个在计算机世界里专门用来在

2021-10-29 22:08:56 117

原创 为什么单线程的 Redis 能那么快

Redis 为什么用单线程首先,我们说一下为什么 Redis 要使用单线程,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格来说,Redis 并不是单线程。多线程的开销我们经常会说,使用多线程,可以增加系统吞吐率,或是可以增加系统扩展性。但是这是基于在有合理的资源分配的情况下。可以增加系统中处理请求操作的资

2021-10-29 22:04:31 733

原创 深入浅出 Redis 事务

一、事务基本使用在讲解事务的原理之前,我们先来看看 Redis 事务是如何使用的吧事务在其他语言中,一般分为以下三个阶段:开启事务——Begin Transaction执行业务代码,提交事务——Commit Transaction业务处理中出现异常,回滚事务——Rollback Transaction但是,Redis 中的事务是不是也是如此呢?????????????Redis 中的事务从开始到结束也是要经历三个阶段:开启事务命令入列执行事务/放弃事务其中,开启事务使用 mul

2021-10-29 22:03:40 145

原创 浅谈 Redis 内存淘汰机制

在讲解 Redis 内存淘汰机制之前,相信大家都了解过 Redis 键的过期策略,其实,这两者是完全不同的东西。Redis 过期策略指的是 Redis 采用哪种策略来删除已经过期的键值对;而 Redis 内存淘汰机制是当 Redis 的运行内存超过 Redis 设置的最大内存之后,将采用什么策略来删除符合条件的键值对,以此来保障 Redis 高效的运行。所以,今天让我们谈谈 Redis 的内存淘汰机制一、Redis 最大运行内存只有在 Redis 的运行内存达到了某个阀值,才会触发内存淘汰机制,这个阀

2021-10-29 22:00:32 313

原创 浅谈 Redis 键过期策略

在 Redis 中,我们都知道 Redis 的键值对都是存储在内存中的,要是我们一直往 Redis 中添加键值对,最后就会导致 OOM,所以我们需要定期的去删除一些键值对,来保证内存不会爆,此时我们就需要了解 Redis 的键过期策略了在学会键过期策略之前,我们还是先来讲解如何使用键过期策略吧????????????一、过期设置Redis 中设置过期时间主要通过以下四种方式:expire key seconds:设置 key 在 n 秒后过期;pexpire key milliseconds:设

2021-10-29 21:56:27 418

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除