Redis
文章平均质量分 95
记录学习Redis的历程
SunAlwaysOnline
开始工作的第3年!
展开
-
Redis哨兵机制原理浅析
一、前言上一篇文章Redis主从复制原理中简要地说明了主从复制的一个基本原理,包含全量复制、复制积压缓冲区与增量复制等内容,有兴趣的同学可以先看下。利用主从复制,可以实现读写分离、数据备份等功能。但如果主库宕机后,需要运维人员手动地将一个从库提升为新主库,并将其他从库slaveof新主库,以此来实现故障恢复。因此,主从模式的一个缺点,就在于无法实现自动化地故障恢复。Redis后来引入了哨兵机制,哨兵机制大大提升了系统的高可用性。二、什么是哨兵哨兵,就是站岗放哨的,时刻监控周围的一举一动原创 2021-12-30 23:32:23 · 2691 阅读 · 6 评论 -
Redisson可重入与锁续期源码分析
Redisson是一个可以在java项目中使用的Redis客户端,其屏蔽了原子性、可重入、锁续期的诸多细节,内部实现各种各样的锁。例如可重入锁、公平锁、MultiLock与Red Lock与读写锁等,今天主要分析可重入锁与锁续期的源码。原创 2021-12-18 00:42:03 · 2944 阅读 · 4 评论 -
面试官:说说你了解几种限流算法,手写个demo?
在流量突增的场景下,为了保证后端服务在整体上一个稳定性,我们需要对请求进行限流,来避免系统崩溃。不过限流会对少部分用户的请求直接进行拒绝或者延迟处理,影响这些用户的体验。本文会介绍一些常见的限流算法,并在最后附上对分布式限流的一些思考。原创 2021-12-05 22:55:58 · 10915 阅读 · 13 评论 -
8种方案,保证缓存和数据库的最终一致性
我们通常使用缓存机制来提升系统的性能,缓存系统下的读写操作,一般都需要操作数据库与缓存。对于读操作,一般是先查询缓存,查询不到再查询数据库,最后回写进缓存。而对于写操作,究竟是先删除(更新)缓存,再更新数据库,还是先更新数据库,再删除(更新)缓存呢?由于对数据库以及缓存的整体操作,并不是原子性的,再加上读写并发,究竟什么样的方案可以保证数据库与缓存的一致性呢?下面介绍8种方案,配合读写时序图,希望你能从其中了解到保证一致性的设计要点。原创 2021-11-25 23:42:24 · 11727 阅读 · 6 评论 -
Redis主从复制原理
单机Redis面临的问题单机Redis在发生故障时,由于无法做到故障转移,所以接下来的请求将会直接打到数据库。大量的查询使得数据库连接数达到峰值,且内部锁冲突严重,造成慢查询、连接超时等后果。所以这个时候,我们想着能不能将Redis数据以多副本的形式保存在多台Redis上,当发生故障时,快速地手动去切换连接的Redis?当然,Redis本身也提供了这个功能。主从模式能将Master节点的数据冗余到多台Slave上,配合哨兵模式能够快速感知Master宕机从而进行主从切换实现故障转移。原创 2021-11-04 21:09:41 · 1250 阅读 · 2 评论 -
谈谈Redis的持久化——AOF日志与RDB快照
一、前言对于Mysql,数据是持久化在磁盘上的。如果误删数据,可以使用binlog进行恢复;突然宕机时,其本身可以借助redo log进行崩溃恢复。更多关于Mysql日志的内容,可以参考我的另外一篇文章数据库日志——binlog、redo log、undo log扫盲而对于Redis,一般是把数据直接存储在内存中。如果不做任何持久化工作,在出现宕机后,内存中的全部数据就会丢失。显然,业务方是不能容忍这样的情况发生的。好在Redis提供了一系列的持久化机制,分别是AOF日志与RDB快照。二原创 2021-10-11 23:17:17 · 1642 阅读 · 0 评论 -
我用了上万字,走了一遍Redis实现分布式锁的坎坷之路,从单机到主从再到多实例,原来会发生这么多的问题
一、分布式锁的背景在同一个jvm进程内,我们可以使用synchronized或者lock锁,来完成对共享资源的互斥访问。然而现在大多数系统都是分布式系统,jvm进程分布在不同的节点上,为了全局数据的一致性,这个时候就需要分布式锁了。实现分布式锁,有多种方案(1)借助于数据库,乐观锁使用版本号机制,悲观锁使用for update机制。(2)借助于Zookeeper,通过创建临时的顺序节点。(3)借助于Redis,这篇文章会详细说明Redis锁的演进历程。二、Redis实现分布式锁的原创 2021-08-29 21:59:52 · 2192 阅读 · 3 评论 -
面试常问集锦——Redis部分
Redis面试集锦,看完直接起飞原创 2021-04-01 22:43:19 · 324 阅读 · 0 评论 -
带你一步一步认识跳跃链表
一、链表单链表是一种很常见的数据结构,其进行查找时,需要从头开始遍历,直到查找到指定的值,因此查找的时间复杂度为O(n)。双链表在单链表的基础上,为每个结点增加前驱指针(pre)。那么在查找的时候,可以从两头开始遍历。因此双链表的查询效率高于单链表,不过其实在使用率上,单链表的使用率远远高于双链表。具体原因可以先移步我的另外一篇文章谈谈单链表和双链表...原创 2020-10-24 15:04:16 · 1617 阅读 · 0 评论 -
Redis的键过期策略、内存淘汰机制与LRU实现,这一篇给你安排了!
定时删除惰性删除定期删除原创 2020-08-31 20:08:23 · 1498 阅读 · 0 评论 -
基于SpringBoot与Redis实现分布式锁
首先,使用Docker运行Redis拉取最近版本的Redis镜像:docker pull redis启动容器:docker run -d --name redis -p 6379:6379 redis:latest进入容器内部,测试存储:# docker exec -it redis redis-cli127.0.0.1:6379> set name qcyOK127.0.0.1:6379> get name"qcy"到这里,说明我们启动成功了。.原创 2020-08-28 18:11:36 · 4841 阅读 · 1 评论 -
谈谈布隆过滤器
介绍先来一段官方的介绍:布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。嗯,你好像没听懂。图例现在这里有一个长度为m的大数组,所有位置初始值都是0。下图时是当m为8时的结构。(...原创 2019-12-17 17:16:23 · 1188 阅读 · 0 评论 -
【SpringBoot】SpringBoot整合Redis
SpringBoot整合Redis 首先我是在Windows上开发的,因此需要在Windows安装Redis,安装的教程Windows下安装Redis服务,这个教程很容易懂,我按照教程一步一步安装下来,很久就可以运行Redis了。 这个教程在【JAVA】IDEA中SpringBoot整合M...原创 2019-05-28 16:59:37 · 2366 阅读 · 0 评论