![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 93
skier~
Java 偏执狂
展开
-
Redis 实现主从库数据一致
前置知识我们知道 Redis 有 AOF 和 RDB 两种持久化机制,如果 Redis 发生宕机,可以通过这两种机制恢复数据,从而保证尽量少丢失数据,提升可靠性。不过使用了这两种机制依然存在服务不可用的问题,比如我们实际只运行了一个 Redis 实例,如果这个实例宕机了,他在恢复期间,是无法服务新来的数据存储请求的。那我们总说的 Redis 具有高可用性是怎么回事呢?其实这包括两个方面:1、数据尽量少丢失,2、服务尽量少中断。AOF 和 RDB 保重了第一点,而对于第二点,Redis 的做法就是增加副原创 2021-11-23 12:45:30 · 188 阅读 · 0 评论 -
为什么单线程的Redis那么快
Redis 为什么用单线程首先,我们说一下为什么 Redis 要使用单线程,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格来说,Redis 并不是单线程。多线程的开销我们经常会说,使用多线程,可以增加系统吞吐率,或是可以增加系统扩展性。但是这是基于在有合理的资源分配的情况下。可以增加系统中处理请求操作的资原创 2021-11-23 12:44:42 · 101 阅读 · 0 评论 -
深入浅出Redis事务
事务大家都熟悉吧,要么全部执行,要么全部不执行,今天我们就来讲讲 Redis 的事务????????????一、事务基本使用在讲解事务的原理之前,我们先来看看 Redis 事务是如何使用的吧事务在其他语言中,一般分为以下三个阶段:开启事务——Begin Transaction执行业务代码,提交事务——Commit Transaction业务处理中出现异常,回滚事务——Rollback Transaction但是,Redis 中的事务是不是也是如此呢?????????????Redis原创 2021-11-23 12:44:07 · 113 阅读 · 0 评论 -
深入浅出Redis持久化
一、Redis 持久化总览持久化,顾名思义就是将内存中的数据存储到磁盘中。由于Redis 的读写都是在内存中,所以读写性能比较高,但是呢,内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。Redis 持久化的方式:快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;文件追加方式(AOF, Append Only File原创 2021-11-22 12:33:48 · 101 阅读 · 0 评论 -
Redis 哨兵集群
哨兵集群:哨兵挂了,主从还能切换吗前言我们之前在哨兵机制中讲过了(如果没有看过这篇文章的,必须先看这篇文章之后再来看本篇),哨兵可以实现主从库的自动切换。通过部署多个实例,就形成了一个哨兵集群,哨兵集群中的多个实例共同判断,可以降低对主库下线的误判率。但是你有没有想过这样一个问题:如果有哨兵实例在运行时发生了故障,主库还能正常切换吗?实际上,一旦多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户原创 2021-11-22 12:32:43 · 57 阅读 · 0 评论 -
Redis 哨兵机制
为什么需要哨兵机制我们现在的 Redis 一般都是以主从库集群的方式部署的,在这个模式下,如果从库发生了故障,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。 而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。此时,也没有实例可以来服务客户端的写操作请求了,如下图所示:原创 2021-11-21 16:04:45 · 114 阅读 · 0 评论 -
浅谈Redis内存淘汰机制
浅谈 Redis 内存淘汰机制在讲解 Redis 内存淘汰机制之前,相信大家都了解过 Redis 键的过期策略,其实,这两者是完全不同的东西。Redis 过期策略指的是 Redis 采用哪种策略来删除已经过期的键值对;而 Redis 内存淘汰机制是当 Redis 的运行内存超过 Redis 设置的最大内存之后,将采用什么策略来删除符合条件的键值对,以此来保障 Redis 高效的运行。所以,今天让我们谈谈 Redis 的内存淘汰机制一、Redis 最大运行内存只有在 Redis 的运行内存达到了某个阀原创 2021-11-21 16:04:10 · 145 阅读 · 0 评论 -
浅谈 Redis 键过期策略
浅谈 Redis 键过期策略在 Redis 中,我们都知道 Redis 的键值对都是存储在内存中的,要是我们一直往 Redis 中添加键值对,最后就会导致 OOM,所以我们需要定期的去删除一些键值对,来保证内存不会爆,此时我们就需要了解 Redis 的键过期策略了在学会键过期策略之前,我们还是先来讲解如何使用键过期策略吧????????????一、过期设置Redis 中设置过期时间主要通过以下四种方式:expire key seconds:设置 key 在 n 秒后过期;pexpire key原创 2021-11-20 08:10:45 · 374 阅读 · 2 评论 -
Redis 缓存和数据库一致性问题
如何保证缓存和数据库一致性,相信大家一定被这个搞的头疼过吧,今天,我就来治治你的头痛,带你一步一步,由浅入深地剖析缓存一致性问题,保证华强都能听懂。为什么要引入缓存我们都知道,引入缓存是为了提高性能,我们先从最简单的场景开始讲起。如果你的业务处于起步阶段,流量非常小,那无论是读请求还是写请求,直接操作数据库即可,这时你的架构模型是这样的:但随着业务量的增长,你的项目请求量越来越大,这时如果每次都从数据库中读数据,那肯定会有性能问题。这个阶段通常的做法是,引入「缓存」来提高读性能,架构模型就变成了原创 2021-11-20 08:10:12 · 102 阅读 · 0 评论 -
Redis 缓存雪崩、击穿、穿透
缓存雪崩、击穿、穿透我们知道缓存雪崩、击穿、穿透是缓存异常最常见的三个问题,一旦这三个问题发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障,这肯定是我们不能容忍的。今天我就带你彻底剖析这三个问题,让你知道这三个问题的表现、诱发原因以及解决方法,废话不多说,直接开始。缓存雪崩缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。 缓存雪崩一般是由下面这两个原因导致的,我们慢慢来看。第一个原因是原创 2021-11-19 22:37:31 · 119 阅读 · 0 评论 -
Redis 高级数据结构
Redis 中的高级数据结构前面我们学习 Redis 中的5中基础数据类型,今天我又来了,没错,就是 Redis 中剩余的3中高级数据类型,废话不多说,我们开始吧。BitmapBitmap 翻译过来就是位图,那它有什么作用呢?我们首先想这么一个场景,二值状态统计,这个二值状态就是指集合元素的取值就只有0和1两种。比如:在签到打卡的场景中,我们只用记录签到(1)或未签到(0),这就是典型的二值状态。在我们签到统计时,每个用户的一天的签到用1个bit位就能表示,有多少天就只需要多少个bit位,不需要使用原创 2021-11-19 22:36:56 · 225 阅读 · 0 评论 -
Redis 分布式锁
Redis 分布式锁为什么需要分布式锁我们为什么需要分布式锁呢?与分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。如果换做是多个进程,需要同时操作一个共享资源,如何互斥呢?例如,现在的业务应用通常都是微服务架构,这也意味着一个应用会部署多个进程,那这多个进程如果需要修改 MySQL 中的同一行记录时,为了避免操作乱序导致数据错误,此时,我们就需要引入「分布式锁」来解决这个问原创 2021-11-19 22:36:23 · 1850 阅读 · 0 评论 -
布隆过滤器
BloomFilter概念及原理布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。布隆过滤器的原理是,当⼀个元素被加⼊集合时,通过K个散列函数将这个元素映射成⼀个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(⼤约)知道集合中有没有它了:如果这些点有任何⼀个0,则被检元素⼀定不在;如果都是1,则被检元素很可能在。 如下图所示:比如:我们现在把元素 A、B、C加原创 2021-11-16 16:33:37 · 117 阅读 · 0 评论 -
把Redis当作队列来用,真的合适吗
经常听到很多人讨论,关于「把 Redis 当作队列来用是否合适」的问题。有些人表示赞成,他们认为 Redis 很轻量,用作队列很方便。也些人则反对,认为 Redis 会「丢」数据,最好还是用「专业」的队列中间件更稳妥。究竟哪种方案更好呢?今天我就和你聊一聊把 Redis 当作队列,究竟是否合适这个问题。从最简单的开始:List 队列如果你的业务需求足够简单,想把 Redis 当作队列来使用,肯定最先想到的就是使用 List 这个数据类型。因为 List 底层的实现就是一个「链表」,在头部和尾部操作原创 2021-11-15 09:25:11 · 136 阅读 · 0 评论 -
Redis底层数据结构详解
1、前置知识我们知道,Redis 很快,但是 Redis 为啥能这么快呢,首先,因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快。另一方面,就要归功于它的数据结构了。Redis 是一个键值对数据库,键值对是按照一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是 Redis 快速处理数据的基础。那 Redis 中的数据结构是啥呢?你可能会说 String(字符串)、List(列表)、Hash(哈希表)、Set(集合)和 Sorted Set(有序原创 2021-11-14 07:59:48 · 183 阅读 · 0 评论