- 博客(54)
- 收藏
- 关注
原创 redis三种集群搭建方案
哨兵模式解决了主从复制不能自动故障转移,达不到高可用的问题,但还是存在难以在线扩容,Redis容量受限于单机配置的问题。Cluster模式实现了Redis的分布式存储,即每台节点存储不同的内容,来解决在线扩容的问题。Cluster模式集群节点最小配置6个节点(3主3从,因为需要半数以上),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。客户端可对主数据库进行读写操作,对从数据库进行读操作,主数据库写入的数据会实时自动同步给从数据库。
2025-12-17 17:49:47
340
原创 redis数据分片算法
一致性Hash算法也是使用取模的方法,只是1.hash取余算法是对服务器的数量进行取模,而一致性Hash算法是对2^ 32-1取模,简单来说,一致性Hash算法将整个Hash值控件组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1取模(即哈希值是一个32位无符号整型)直到2^ 32-1,也就是说0点左侧的第一个点代表2^ 32-1, 0和2^ 32-1在零点中方向重合,我们把这个由2^32个点组成的圆环称为Hash环。:根据得到的哈希槽编号,查找该槽被分配到的节点。
2025-12-17 16:08:04
245
原创 springboot集成redis -RedisTemplate使用
5.RedisTemplate使用(5种基本类型,3种特殊类型,管道类型)3.application.yml文件。4.redisconfig配置。1.安装redis单机。
2025-12-03 16:01:38
353
原创 redis 单机安装(linux)
root@localhost redis]# tar -xvf redis-7.0.0.tar.gz #解压redis安装包。[root@localhost redis-7.0.0]# cp redis.conf /usr/local/redis #复制redis.conf。1.下载redis安装包。
2025-12-02 12:00:53
178
1
原创 redis哨兵机制
Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。哨兵实现了什么功能呢?其中,监控和自动故障转移功能,使得哨兵可以及时发现主节点故障并完成转移;而配置提供者和通知功能,则需要在与客户端的交互中才能体现。这是由哨兵向主库发送 INFO 命令来完成的。哨兵 A 给主库发送 INFO 命令,主库接受到这个命令后,就会把从库列表返回给哨兵。接着,哨兵就可以根据从库列表中的连接信息,和每个从库建立连接,并在这个连接上持续地对从库进行监控。
2025-11-30 21:04:58
187
原创 redis主从复制
当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系,之后会按照三个阶段完成数据的第一次同步。主库在从库复制的同时不会停止服务,这个时候产生的新的数据,导致主从数据不一致,主库会维护repliaction——buff缓冲区,把这段时间产生的新数据,再次发给从库,完成数据的一致性。主要是为全量复制做准备。在这一步,从库和主库建立起连接,并告诉主库即将进行同步,主库确认回复后,主从库间就可以开始同步了。
2025-11-30 20:47:16
406
原创 redis基本类型 5种基本类型
List的另一个应用就是消息队列,可以利用List的 PUSH 操作,将任务存放在List中,然后工作线程再用 POP 操作将任务取出进行执行。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
2025-11-30 19:25:58
282
原创 redis持久化
通常的解决方案是从后端数据库恢复这些数据,但后端数据库有性能瓶颈,如果是大数据量的恢复,1、会对数据库带来巨大的压力,2、数据库的性能不如Redis。所以对Redis来说,实现数据的持久化,避免从后端数据库中恢复数据,是至关重要的。3.如果不存在正在执行的子进程,那么就fork一个新的子进程进行持久化数据,fork过程是阻塞的,fork操作完成后主进程即可执行其他操作;保存到磁盘上的过程,由于是某一时刻的快照,那么快照中的值要早于或者等于内存中的值。,Redis先执行命令,把数据写入内存,然后才记录日志。
2025-11-26 17:48:16
150
原创 redis缓存问题(缓存雪崩,缓存击穿,缓存穿透)
而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
2025-11-26 16:38:38
291
原创 mysql事务acid
如果事务执行过程中发生错误,系统会回滚(Rollback)到事务开始前的状态。定义:事务执行前后,数据库的状态必须满足所有业务规则和约束(如主键唯一、外键引用有效、数据类型合法等)。定义:多个并发事务之间相互隔离,一个事务的执行不能被其他事务干扰。事务的隔离级别(读未提交、读已提交、可重复读、串行化)决定了隔离的程度,详可见 数据库隔离级别。定义:一旦事务提交,其对数据库的修改将永久保存,即使系统崩溃或重启后数据也不会丢失。MVCC(多版本并发控制):为数据保存多个版本,允许事务读取历史版本,避免锁冲突。
2025-11-23 20:12:18
174
原创 redis数据类型 3种特殊类型详解
举个例子,A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9};那么基数(不重复的元素)= 1, 2, 4, 6, 7, 9;(允许容错,即可以接受一定误差)
2025-11-23 20:00:02
272
原创 redis使用场景
这个主要利用redis的setnx命令进行,setnx:"set if not exists"就是如果不存在则成功设置缓存同时返回1,否则返回0 ,这个特性在很多后台中都有所运用,因为我们服务器是集群的,定时任务可能在两台机器上都会运行,所以在定时任务中首先 通过setnx设置一个lock, 如果成功设置则执行,如果没有成功设置,则表明该定时任务已执行。而且,Redis内部是支持事务的,在使用时候能有效保证数据的一致性。在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。
2025-11-23 18:57:38
235
原创 mysql锁相关
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。为了避免DML在执行时,加的行锁和表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否枷锁,使用意向锁来减少表锁的检查。全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁,表级锁,行级锁。对于表级锁,主要分为以下三类:表锁,元数据锁,意向锁。
2025-11-14 17:47:38
333
原创 mvcc多版本并发控制
max_trx_id:不是当前正在活跃中的事务集合的最大id,而是预分配的事务id,即最大活跃中的事务id+1(因为事务id是自增的,因此加一)的时候,undo log只在回滚的时候需要,在事务提交后可以立即删除,不需要记录上一个版本该行的数据(因为上一版本该行不存在;的时候,不仅回滚的时候需要,多版本并发控制的时候也需要用来记录上一数据版本,用于多版本并发控制,因此事务提交后也不会立即删除。MVCC(多版本并发控制)是一种数据库并发控制方法,它通过维护数据的多个版本来提高数据库的并发性能并减少锁的使用。
2025-11-13 17:57:32
200
原创 mysql事务隔离级别
为了解决脏读、不可重复读、幻读问题,SQL标准规范中定义了4个事务的隔离级别,不同的隔离级别对事务的处理不同。它们分别是:1. Read Uncommitted 未提交读(未授权读),允许脏读,但不允许更新丢失,也可以通过“排他写锁”实现。2. Read Committed 已提交读(授权读取),允许不可重复读,但不允许脏读,也可以通过“瞬间共享读锁”和“排它写锁”实现。3. Repeatable Read 可重复读,禁止不可重复读和脏读,但可能出现幻读。
2025-11-13 11:59:33
167
原创 Mysql引擎
存储引擎是 MySQL 的组件,用于处理不同表类型的 SQL 操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。MySQL引擎是数据库的核心组件之一,决定了数据库的性能、可靠性和功能特性。存储数据:MySQL 引擎负责将数据存储在物理存储介质上,包括硬盘或固态硬盘等。它将数据组织成表、索引等结构,并提供对这些数据的高效访问方式。管理数据:MySQL 引擎管理数据的增删改查操作,包括插入新数据、更新已有数据、删除数据以及查询数据等操作。
2025-11-03 17:31:22
789
原创 mysql架构
我们常说的索引数据结构,就是由存储引擎层实现的。如果查询语句(select 语句),MySQL 就会先去查询缓存( Query Cache )里查找缓存数据,看看之前有没有执行过这一条命令,这个查询缓存是以 key-value 形式保存在内存中的,key 为 SQL 查询语句的哈希值,value 为 SQL 语句查询的结果。这里说的查询缓存是 server 层的,也就是 MySQL8.0 版本移除的是 server 层的查询缓存,并不是 Innodb 存储引擎中的 buffer poll。
2025-10-29 17:41:14
839
原创 mysql索引
在传统的索引扫描过程中,MySQL 会先通过索引定位到可能的行,然后将这些行从存储引擎读取到 MySQL 服务器层,再在服务器层进行条件过滤。在MySQL中,当使用非聚簇索引(即二级索引)进行查询时,存储引擎层会通过该索引定位到符合条件的行的主键ID。注:此处的n次回表为逻辑层面的回表次数(下文如未特殊说明,均表示逻辑回表次数),物理层面的回表次数由ID对应的行记录所在块分布情况决定,如果ID连续且在同一数据页,则实际上只需1次回表。最左前缀原则:复合索引中,查询条件必须从最左列开始,否则索引失效。
2025-10-27 15:39:02
679
原创 树 B树和B+树
B+树是一种平衡的多路查找树,它是B树的一种变体。B+树在数据库和文件系统等场景中被广泛应用,主要用于组织大量的有序数据,以便高效地进行查找、插入和删除操作。每个节点最多有m个孩子(m是B树的阶数),最少有ceil(m / 2)个孩子(除了根节点)。例如,对于一个4阶B树,每个节点最多有4个孩子,最少有2个孩子。每个节点最多有m - 1个关键字,最少有ceil(m / 2) - 1个关键字(除了根节点)。例如,一个有3个关键字的节点,它就有4个孩子,这些孩子分别对应关键字划分的4个区间。
2025-10-24 16:07:26
349
原创 JUC线程池:ThreadPoolExecutor详解
corePoolSize:核心线程数,当提交一个任务的时候,线程池会创建一个新线程来执行任务,直到当前线程数等于核心线程数(corePoolSize);即使有其他空闲线程来执行新的任务,也会继续创建新线程;如果线程数量等于核心线程数,继续提交任务不会再新建新线程,会将新提交的任务保存到阻塞队列中,等待被执行;如果当前阻塞队列满了,且有新任务提交,如果当前线程数小于最大线程数,则会创建新的线程执行任务。handler:线程池的拒绝策略,当阻塞队列满了且没有空闲的工作线程,如果继续提交任务,就会使用拒绝策略。
2025-09-26 11:49:07
355
原创 tomcat
service:service组件在Tomcat中的主要作用是管理一组关联的Connector和Engine组件。它负责接收和处理客户端请求,以及将这些请求传递给Engine组件进行进一步的处理。wrapper:管理Servlet实例,每个Wrapper组件都对应一个特定的Servlet,并负责该Servlet的加载、初始化、执行以及资源回收等生命周期管理。engine:负责处理来自客户端的请求,并将这些请求分发到对应的虚拟主机(Host)或Web应用程序(Context)进行处理。
2025-09-24 16:57:41
364
原创 ThreadLocal理解
这些变量与普通变量不同,每个线程访问 ThreadLocal 变量时,都会有自己独立的、初始化过的变量副本,其他线程无法访问。简而言之,ThreadLocal 为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。3.当调用 ThreadLocal 的 set(T value) 方法时,会先获取当前线程,然后将值存储在当前线程的 ThreadLocalMap 中。4.当调用 ThreadLocal 的 get() 方法时,会从当前线程的 ThreadLocalMap 中获取值。
2025-09-24 14:45:24
336
原创 mybaits-plus 乐观锁
version不能为空,需要查询先获取原本version的值,传给MP version null值得话 ,乐观锁会失效。乐观锁是一种并发控制机制,用于确保在更新记录时,该记录未被其他事务修改。MyBatis-Plus 提供了。在修改的同时会将 version =version+1 以及where 拼接version=?插件,使得在应用中实现乐观锁变得简单。
2025-09-22 17:17:07
382
原创 mybatis-plus多租户实现
是 MyBatis-Plus 提供的一个插件,用于实现多租户的数据隔离。通过这个插件,可以确保每个租户只能访问自己的数据,从而实现数据的安全隔离。,数据权限插件,动态表名插件,数据变动插件,非法SQL记录插件,防全表更新与删除插件。mybatis-plus提供了许多插件,分页插件,乐观锁插件,2.mybatis-plus插件配置文件。1.pom文件以及配置文件。
2025-09-19 17:51:00
314
原创 mybatis-plus数据权限
mybatis-plus提供了许多插件,DataPermissionInterceptor 是 MyBatis-Plus 提供的一个插件,用于实现数据权限控制。它通过拦截执行的 SQL 语句,并动态拼接权限相关的 SQL 片段,来实现对用户数据访问的控制。DataPermissionInterceptor 的工作原理与租户插件类似,它会在 SQL 执行前拦截 SQL 语句,并根据用户权限动态添加权限相关的 SQL 片段。实现的思路就是通过拦截器,拦截sql请求,根据权限注解类型来完成sql的拼接。
2025-09-19 16:58:40
487
原创 java并发编程 lock详解
ReentrantLock:可重入锁,是最常用的Lock实现。它支持可重入性,即同一个线程可以多次获取同一把锁。ReentrantLock还支持公平锁(fair),可以按照线程请求锁的顺序来分配锁。ReentrantReadWriteLock:读写锁,允许多个线程同时读取数据,但写操作是互斥的。它包含一对锁:读锁和写锁。读锁是共享的,写锁是排他的。StampedLock:引入于Java 8,是一种读写锁的替代品,提供了更好的性能。它使用“戳”(stamp)来管理锁状态,支持乐观读、写锁和验证操作。
2025-09-11 16:39:21
193
原创 java并发编程 JUC包
组件类别 核心类/接口 作用。原子变量 AtomicInteger, AtomicLong, AtomicReference 提供线程安全的原子操作。同步器 CountDownLatch, CyclicBarrier, Semaphore 线程协调工具。
2025-09-11 16:12:13
150
原创 java并发编程 AQS详解
AQS是抽象的队列式同步器。AQS定义了一套多线程访问共享资源的同步器框架,许多我们使用的同步器都是基于它来实现的,如常用的ReentrantLock、Semaphore、CountDownLatch、CyclicBarrie并发类都是通过实现AQS里面的模板方法来实现内部的组件。,如果当前线程获取state同步状态失败AQS会将该线程以及状态等信息构造一个Node节点,并将这个Node节点添加到队尾,同时阻塞当前线程,当同步状态释放时,唤醒队列头节点。AQS实现原理依赖内部。
2025-09-11 11:48:10
229
原创 java并发编程 同步器 CyclicBarrier
CyclicBarrier可以让一组线程到达某个屏障(也可以理解为关卡)时被阻塞,直到所有线程都到达该屏障时才能继续执行。
2025-09-08 17:27:35
128
原创 zookeeper安装部署
ZooKeeper 设计为一个轻量级、高可靠性的“协调中心”,主要用于:服务注册与发现、配置管理、分布式锁、主节点选举等场景。失败可以在/root/zookeeper0905/zookeeper/logs目录日志文件下查看详细错误日志。目录地址:/root/zookeeper0905/zookeeper/conf。目录地址:/root/zookeeper0905/zookeeper/bin。目录地址:/root/zookeeper0905/目录地址:/root/zookeeper0905。
2025-09-05 16:05:16
543
原创 Docker安装
安装过程中,如果提示密钥失败的可以执行以下命令。5.设置开启docker服务自启动命令。# 安装 docker 仓库。3.搜索docker版本命令。# 搜索 docker 版本。1.删除旧docker信息。2.安装docker残酷。4.安装docker命令。6.启动docker服务。# 安装 docker。
2025-09-04 15:05:36
328
原创 springboot集成rocketmq
name-server: 192.168.18.132:9876 #nameserver地址,支持用逗号分隔多个。group: my-producer-group #消费者组。2.application.yml配置文件。
2025-09-03 17:35:50
401
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅