- 博客(47)
- 收藏
- 关注
原创 Redis教程——哨兵
选举结束后,哨兵领导者会对选举出来的新主机执行slaveof no one操作,将其提升为主机Redis,再向从机发送命令,让剩余的从机成为新主机的从机,再让原主机降级为从机并恢复正常工作。简单来说,当主机Redis发生宕机后,一个哨兵主观认为主机Redis宕机,多个哨兵进行投票后,客观认为Redis已经宕机,接着选举新主机Redis并确定主从关系。通过上面的内容,我们可以知道当一个主从配置中主机Redis失效后,哨兵会选举出一个新的主机Redis来接替原主机Redis的工作。
2025-08-07 17:02:41
1056
原创 Redis教程——主从复制
主机Redis一般情况下都会设置登录密码,那么从机Redis需要配置masterauth来设置校验密码,否则主机Redis会拒绝从机Redis的访问请求。可以发现,当执行完命令后,47.119.21.164就变为了主机,175.178.108.75就变为了从机。好了,Redis教程——主从复制就讲到这里了,下篇文章我们学习Redis教程——哨兵监控。注意:使用命令行实现主从后,当从机Redis断开连接后,主从关系也会断开。注意:如果是配置实现主从的话,从机Redis重启后,又会重新建立主从关系。
2025-08-07 16:38:37
781
原创 Redis教程——管道
管道可以一次性发送多条命令给服务器,服务器依次处理完毕后,通过一条响应一次性将结果返回,通过减少客户端与Redis的通信次数来实现降低往返延时时间。,发送网络请求,同时需要Redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,影响性能。好了,Redis教程——管道就讲到这里了,下篇文章我们学习Redis教程——主从复制。如果同时需要执行大量命令,那么就需要等待上一条命令应答后再执行,这中间不仅仅多了。执行如下代码,将命令发送给Redis服务器,
2025-07-24 21:58:08
441
原创 Redis教程——事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,所以这些操作要么同时成功,要么同时失败。其中:QUEUED表示的是队列,当我们每次执行操作命令时,会将操作命令放在一个队列中,当执行EXEC命令时,就会执行队列中所有命令。可以看出在标记事务开始后,执行的操作命令都没错误,但操作逻辑有错时,正常无误的操作命令会被成功执行。事务监听后,在执行EXEC命令之前,如果监听的数据被修改了,整个事务块内的操作命令都会失效。标记一个事务块的开始,使用。
2025-07-24 21:55:03
913
原创 Redis教程——持久化(AOF)
可以发现,当我们执行写操作后,Redis就会在myRedis文件夹创建appendonlydir文件夹并生成三个AOF文件,当我们再次执行写操作后,三个AOF文件,只有incr的AOF发生变化。为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,保留可以恢复数据的最小指令集。在Redis执行写操作时,不会立刻将写操作写入AOF文件中,而是先将写命令保存在AOF缓存区,根据写入策略将所有写操作保存在AOF文件中。
2025-07-24 21:49:11
1171
原创 Redis教程——持久化(RDB)
用命令方式禁用快照时,当Redis服务重启时,数据变动时,还是会执行快照,当我们想永久不使用快照时,在配置文件中的save设置为空字符,并在stop-writes-on-bgsave-error设置为no,这样即使生成 RDB 文件时出现错误,Redis 仍然会继续写入。上面的案例中,当某个条件满足时,自动触发执行快照,假设有个重要的数据发生变化,需要及时执行快照备份,但还没满足触发条件时,这时就需要手动触发执行快照。修改完Redis.conf配置文件后,最好执行如下代码重启redis服务,
2025-07-22 15:48:27
1062
原创 Redis教程——数据类型(流)
功能、支持自动生成全局唯一ID、支持ack确认消息的模式,支持消费组模式等,可以让任何客户端访问任何时刻的数据,并且能记住每个客户端访问的位置,让消息队列更加的稳定可靠。首先在原窗口执行xread命令获取比最大ID还大的ID消息就会形成阻塞状态,当新开的窗口添加最新的消息,原窗口就获取到比之前更大的ID消息,从而结束阻塞。消息一旦被消费组的消费者读取后,就不能被同组的其他消费者读取但可以被其他消费组的消费者读取,所以第二条命令返回两条,第四条命令返回空。在上面的消费中,都是已读取但未确认的消息,使用。
2025-07-20 17:06:01
1124
原创 Redis教程——数据类型(基数统计、地理空间、位域)
但HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能返回输入的各个元素,而且返回元素去重后的个数。通过bitfield命令可以一次性操作连续的多个bit位,它执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果,能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。HyperLogLog是用来做基数统计的算法,在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定且是很小的。注意:当溢出时,会归零。
2025-07-20 17:00:28
1040
原创 Redis教程——数据类型(有序集合、位图)
好了,Redis教程——数据类型(有序集合、位图)就讲到这里了,下篇文章我们学习Redis教程——数据类型(基数统计、地理空间、位域)。bitmap由0和1状态表现的二进制位的bit数组,实现一种统计二值状态的数据类型,每个bit只能放1或0,用来判断Y/N状态。不同的是有序集合每个元素都会关联一个double类型的分数,通过分数对集合中的成员进行从小到大的排序。bitmap支持的最大位数是2的32次方位,它可以极大的节约存储空间。有序集合和集合都是string类型的无序集合,其数据是唯一,都是通过。
2025-07-20 16:56:00
858
原创 Redis教程——数据类型(哈希、集合)
集合是string类型的无序集合,其成员是唯一的,Set集合是通过哈希表实现的,集合对象的编码可以是intset或hashtable,所以添加、删除、查找的复杂度都是O(1)。好了,Redis教程——数据类型(哈希、集合)就讲到这里了,下篇文章我们学习Redis教程——数据类型(有序集合、位图)。其中:numkeys表示集合的个数,limit表示返回的数量,当limit大于集合个数时,返回集合的个数。注意:由于集合的元素是唯一的,所以在创建集合数据时,Redis会自动去重。
2025-07-17 20:04:31
993
原创 Redis教程——数据类型(字符串、列表)
注意:set命令使用EX、PX、NX参数时,其效果相当于SETEX、PSETEX、SETNX命令,根据官方文档的描述,未来版本中SETEX、PSETEX、SETNX命令可能会被淘汰。列表是简单的字符串列表,从最左边或最右边插入顺序排序,其底层实际是个双端链表,最多可以包含40多亿个元素。字符串类型是Redis最基本的类型,可以包含任何数据,一个key对应一个value,但一个value最多可以是512M。当过了三秒,Tkey1键就失效了,查不到了,当过了1712468537时间戳后,Tkey2就失效了。
2025-07-17 19:26:49
1107
原创 Redis教程——Redis入门
Redis自带的conf配置文件在解压目录中的/opt/redis-7.0.15中,当我们启动Redis时,会先读取该redis.conf配置文件,获取指定内存大小、保存文件路径等等信息。在查询时,客户端首先去Redis查询并返回数据,当Redis没有数据时,客户端就去MySql数据库查询数据,返回数据给客户端并更新数据到Redis。Redis数据操作主要在内存,MySQL数据操作主要在磁盘,而磁盘比内存慢了10w倍,所以当我们使用Redis时,大大提高了我们的查询速度。
2025-07-16 21:57:17
510
原创 MySQL基础篇(九):事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。默认的,MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式地提交事务。
2025-07-16 21:27:03
248
原创 MySQL基础篇(八):多表查询
在项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系,基本上分为三种一对多(多对一):在多的一方建立外键,指向一的一方的主键多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键我们建立以下几张表来创建学生表、课程表以及学生表和课程表的中间表一对一:多用于单表拆分,在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)概述:指从多张表中查询数据。
2025-07-16 21:22:01
277
原创 MySQL基础篇(七):约束
约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束根据以下要求可以创建表结构。
2025-07-16 21:19:33
303
原创 MySQL基础篇(五):DCL用户管理
DCL(Data Control Language)数据控制语言,用来管理数据库用户、控制数据库的访问权限。
2025-07-15 22:22:43
203
原创 MySQL基础篇(四):DQL数据查询操作
DQL基础查询语法为了查看效果,先创建一张表,并向表中插入数据查询多个字段设置别名去除重复记录条件查询条件。
2025-07-15 22:17:08
384
原创 MySQL基础篇(三):DML数据操作
DML(Data Manipulation Language)数据操作语言,是用来对数据库中的表的数据记录进行增删改操作。修改语句的条件可以有也可以没有,如果没有条件,则会修改整张表的所有数据。添加数据(INSERT)修改数据(UPDATE)删除操作(DELETE)
2025-07-15 22:13:26
163
原创 MySQL基础篇(一):MySQL安装及基础介绍
MySQL客户端会给MySQL数据库服务器发送对应的SQL语句,数据库服务器会通过DBMS来维护数据库或者创建数据库,而数据库中又会存储各种表,数据又是存储在各种表中的。接下来根据提示进行安装即可,最后到了要输入MySQL的root用户的密码,这个得记住!关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。然后即可使用MySQL。
2025-07-15 21:53:09
237
原创 JVM(六)为什么新生代有两个Survivor分区?
但如果设置内存空间的比例是 8:2 ,只是看起来似乎“很好”,假设新生代的内存为 100 MB( Survivor 大小为 20 MB ),现在有 70 MB 对象进行垃圾回收之后,剩余活跃的对象为 15 MB 进入 Survivor 区,这个时候新生代可用的内存空间只剩了 5 MB,这样很快又要进行垃圾回收操作,显然这种垃圾回收器最大的问题就在于,需要频繁进行垃圾回收。本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器。
2025-07-10 17:54:11
345
原创 JVM(四)垃圾回收的实现算法和执行细节
上一篇我们讲了垃圾标记的一些实现细节和经典算法,而本文将系统的讲解一下垃圾回收的经典算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点和安全区域等。因为各个平台的虚拟机操作内存的方法各不相同,且牵扯大量的程序实现细节,所以本文不会过多的讨论算法的具体实现,只会介绍几种算法思想及发展过程。
2025-07-10 17:52:13
411
原创 JVM(五)垃圾回收器的前世今生
如果垃圾回收的算法属于内存回收的方法论的话,那本文讨论的垃圾回收器就属于内存回收的具体实现。因为不同的厂商(IBM、Oracle),实现的垃圾回收器各不相同,而本文要讨论的是 Oracle 的 HotSpot 虚拟机所使用的垃圾回收器。常用垃圾回收器,如下图所示:其中相互连线的垃圾回收器,表示可以相互搭配使用。
2025-07-10 17:51:12
551
原创 JVM(三)对象的生死判定和算法详解
Garbage Collection,中文翻译为垃圾回收。GC的历史GC有着很长的历史了,最初的GC算法发布于1960年(已经快有60年的历史了),Lisp之父John McCarthy发布的,他是一名非常有名的黑客,也是人工智能之父,同时也是GC之父。为什么要学习GC?1、排查内存溢出和内存泄露的问题。2、系统调优,处理更高的并发瓶颈。GC的作用1、找到内存空间的垃圾。2、回收垃圾。
2025-07-10 17:49:10
459
原创 JVM(二)Java虚拟机组成详解
本文讲了jvm的主要组成部分,以及组成部分中最重要的运行时数据区(Runtime Data Area)的构成,其中程序计数器、虚拟机栈和本地方法为私有内存,会随着线程而生,随着线程而灭,而Java堆作为最大的内存区域将是开发人员重点关注的内存区域,还有方法区以及运行时常量区与永生代的关系,最后讲了直接内存的实现过程已经使用时需要主要的点,希望能够帮助大家更好的理解jvm。
2025-07-10 17:47:32
526
原创 JVM(一)史上最佳入门指南
JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。简单来说JVM是用来解析和运行Java程序的。Java有一个非常重要的特点“平台的无关性”,就是使用JVM实现的。Java语言只需要生成Jvm上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,因为JVM本身屏蔽了与具体平台相关的信息,使得Java能够“一次编译,到处运行”。
2025-07-10 17:45:51
542
原创 Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
1.在反射中核心的方法是 newInstance() 获取类实例,getMethod(..) 获取方法,使用 invoke(..) 进行方法调用,通过 setAccessible 修改私有变量/方法的访问限制。2.获取属性/方法的时候有无“Declared”的区别是,带有 Declared 修饰的方法或属性,可以获取本类的所有方法或属性(private 到 public),但不能获取到父类的任何信息;
2025-07-09 17:58:26
816
原创 Java核心(五)深入理解BIO、NIO、AIO
我们通常所说的 BIO 是相对于 NIO 来说的,BIO 也就是 Java 开始之初推出的 IO 操作模块,BIO 是 BlockingIO 的缩写,顾名思义就是阻塞 IO 的意思。
2025-07-09 17:56:56
1908
原创 Java并发编程(一)Thread详解
根据上面的内容,我们已经系统的学习Thread的使用了,然而学而不思则罔,最后留一个思考题:根据本文介绍的知识,怎么能避免死锁?(哈哈,卖个关子,根据文章的知识点组合可以得出答案)
2025-07-09 17:54:52
822
原创 Java核心(四)你不知道的数据集合
List 也就是我们前面介绍最多的有序集合,它提供了方便的访问、插入、删除等操作。Set 是不允许重复元素的,这是和 List 最明显的区别,也就是不存在两个对象 equals 返回 true。我们在日常开发中有很多需要保证元素唯一性的场合。Queue/Deque 则是 Java 提供的标准队列结构的实现,除了集合的基本功能,它还支持类似先入先出(FIFO, First-in-First-Out)或者后入先出(LIFO,Last-In-First-Out)等特定行为。
2025-07-09 17:52:49
899
原创 Java核心(三)并发中的线程同步与锁
乐观锁、悲观锁、公平锁、自旋锁、偏向锁、轻量级锁、重量级锁、锁膨胀...难理解?不存的!来,话不多说,带你飙车。上一篇介绍了线程池的使用,在享受线程池带给我们的性能优势之外,似乎也带来了另一个问题:线程安全的问题。那什么是线程的安全问题呢?
2025-07-09 17:49:57
924
原创 Java核心(二)深入理解线程池ThreadPool
本文总结以问答的形式展示,引自《深度解读 java 线程池设计思想及源码实现》,最下方附参考地址。
2025-07-09 17:47:30
1072
原创 Spring Boot(十四)RabbitMQ延迟队列
到此为止我们已经使用“rabbitmq-delayed-message-exchange”插件实现了延迟功能,但是需要注意的一点是,如果使用命令“rabbitmq-plugins disable rabbitmq_delayed_message_exchange”禁用了延迟插件,那么所有未发送的延迟消息都将丢失。
2025-07-07 17:27:20
899
原创 Spring Boot(十三)RabbitMQ安装与集成
Kafka的性能最好,适用于对消息吞吐量达,对消息丢失不敏感的系统;RocketMQ借鉴了Kafka并提高了消息的可靠性,修复了Kafka的不足;RabbitMQ性能略低于Kafka,并实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的标准,有非常好的稳定性。
2025-07-07 17:17:07
1085
原创 Spring Boot(十二)单元测试JUnit
JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试。白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 员是公开的;回归测试:软件或环境修复或更正后的再测试;单元测试:最小粒度的测试,以测试某个功能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细节;
2025-07-07 17:11:42
964
原创 Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,Redis也是技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」首字母缩写,也就是「远程字典服务」。Redis相比Memcached提供更多的数据类型支持和数据持久化操作。
2025-07-07 17:09:43
846
原创 Spring Boot(十)Logback和Log4j2集成与日志发展史
日志服务在ApplicationContext创建前就初始化了,所以通过设置属性和传统的配置XML文件,可以对日志进行管理和控制。日志名称logbacklogback-spring.xml, logback-spring.groovy, logback.xml, 或者 logback.groovylog4j2log4j2-spring.xml 或者 log4j2.xml。
2025-07-07 17:06:38
1012
原创 Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据
问题一、后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义?问题二、返回数据操作难:数据返回不对或者不够怎么办?怎么才能灵活的操作数据?这是很多公司前后端分离之后带来的困扰,那怎么来解决这些问题?问题一的一般解决方案:后端团队共同维护一个在线文档,每次改接口再去改对应的文档,但难免会遗漏,花的大力气但却效果平平。问题二的一般解决方案:自己搭建一个Mock服务器,然后一个接口一个接口手动去录规则,还是一个费力的体力活。那有没有最优的解决方案,来解决以上两个问题呢?
2025-07-06 17:44:02
919
原创 Spring Boot (八)MyBatis + Docker + MongoDB 4.x
MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。随着存储数据量不断的增加,开发者面临一个困难:如何扩展数据库?而扩展数据库分为横向扩展和纵向扩展,纵向扩展就是使用计算能力更强大的机器,它的缺点就是:机器性能的提升有物理极限的制约,而且大型机通常都是非常昂贵的,而MongoDB的设计采用的是横向扩展的模式,面向文档的数据模型使它很容易的在多台服务器上进行数据分割。
2025-07-06 17:41:32
815
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅