自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Redis——BigKey

当redis key的数量过多时,使用keys*会耗费大量时间和性能,因此在生产上需要禁用一些危险命令。在 redis.conf 文件 SECURITY 板块中设置 rename-command例如禁用keys,flushdb,flushall。

2024-09-05 19:08:40 323

原创 SpringBoot集成Redis——RedisTemplate

Redis中的key和value均是以二进制的形式存储的,因此客户端输入的key和value都会经过序列化之后才发往Redis服务端。而RedisTemplate所使用序列化方式和命令行客户端采用序列化方式不相同,进而导致序列化之后的二进制数据不同,所以才会导致上述的现象。当集群中的一个主机意外宕机,集群能自动感知并自动完成主备切换,但SpringBoot客户端没有动态感知到集群的最新信息。因此我们可以仿照StringRedisTemplate自定义redis配置,将序列化方式设为合适类型。

2024-09-03 14:44:42 577

原创 Redis集群(cluster)

由于数据量过大,单个master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展,每个复制集只负责存储整个数据集的一部分,这就是Redis集群,其作用是提供在多个Redis节点间共享数据的程序集。

2024-09-02 22:46:05 1064

原创 Redis哨兵(sentinel)

巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。

2024-08-27 19:15:33 997

原创 Redis复制(replica)

主从复制,主数据库以写为主,从数据库以读为主。当主数据库数据发生变化时,自动将新的数据异步同步到其它的从数据库。

2024-08-27 16:14:38 337

原创 Redis管道(Pipeline)

如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round Time Trip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文产生比较大的影响,性能不好。客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。以及请求/响应协议的TCP服务。服务端处理命令,并将结果返回给客户端。

2024-08-24 19:38:32 388

原创 Redis事务

当客户端丢失连接的时候,所有东西都会被取消监视(也就是说在一个客户端中被监控的key,在另一个客户端中不生效)如图,在exec之前,被watch的tk1在另一个客户端中发生改变,此时exec后事务中的命令全部不执行。一个事务中的命令会被放入一个队列中,执行EXEC后一次性、排他地顺序执行事务块内的命令。一条命令可能无法加入队列,即在EXEC前产生错误,此时事务块内的命令全部失败(类似于编译时错误)。在EXEC后产生错误,产生错误的命令执行失败,但其它命令可以正常执行(类似于运行时错误)。

2024-08-24 18:58:34 333

原创 Redis持久化RDB/AOF

同时,为了便于AOF备份和拷贝,将所有的AOF文件和manifest文件放入一个单独的文件目录中,目录名由appenddirname配置决定(文件路径为前文rdb配置的 dir + appenddirname)。AOF(Append Only File):以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启后就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

2024-08-23 23:33:21 1011

原创 Redis十大数据类型

Streams 会自动使用内部队列(也称为 PENDING List)留存消费组里每个消费者读取的消息保底措施,直到消费者使用 XACK 命令通知 Streams“消息已经处理完成”。由0和1状态表现的二进制位的bit数组,使用type key得到的结果为“string”,可以看为string类型的子类。消费确认增加了消息的可靠性,一般在业务处理完成之后,需要执行 XACK 命令确认消息已经被消费完成。:让组内多个消费者共同分担读取消息,实现消息读取负载在多个消费者间是均衡分布的。

2024-08-21 21:15:10 1129

原创 Jackson LocalDate设置格式

【代码】Jackson LocalDate设置格式。

2024-06-07 14:54:06 141 1

原创 管理数据库

【代码】管理数据库。

2024-04-12 13:12:16 107

原创 MySQL 多表查询

等值连接和非等值连接,自连接和非自连接,内连接和外连接,JOIN,UNION

2024-04-08 17:35:57 409

原创 使用LIMIT进行分页

每页pageSize条记录,显示第page页。0为偏移量, 5为条目数。

2024-04-07 17:09:14 185

原创 使用ORDER BY进行排序

按salary降序,employee_id升序。

2024-04-07 16:49:04 243

原创 使用LIKE进行模糊查询

查询第二个字符是‘_’,第三个字符是‘e’的信息:使用转义字符。ESCAPE指定一个字符代替‘\’查询以字符‘e’开头的字符。查询第三个字符是‘e’的信息。查询包含字符‘e’的信息。代表一个不确定的字符。

2024-04-07 16:27:26 280 1

原创 MySQL基础

紧跟列名,也可以在列名和别名之间加入关键字 ‘AS’ (alias),别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。1、DML(Data Manipulation Language):数据操纵语句,用于添加、删除、修改、查询数据库记录,并检查数据完整性。2、DDL(Data Definition Language):数据定义语句,用于库和表的创建、修改、删除。3、DCL(Data Control Language):数据控制语句,用于定义用户的访问权限和安全级别。表employees截图。

2024-04-06 21:05:19 726

原创 Stream API

Stream 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据结构, 讲的是数据,而 Stream 是有关计算的,讲的是计算。前者是主要面向内存, 存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。

2024-04-04 20:31:07 605

原创 反射Reflection

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助于 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个 Class 类型的对象(一个类只有一个 Class 对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构, 所以,我们形象的称之为:反射。// 反射// 创建实例// 调用属性。

2024-04-03 20:12:23 836

原创 Class类

在 Java 的日常应用程序开发中,类的加载几乎是由上述 3 种类加载器相互配合执行 的。在必要时,我们还可以自定义类加载器,来定制类的加载方式体现 Java 语言强大生命力和巨大魅力的关键因素之一便是,Java 开发者可以自定义类加载器来实现类库的动态加载,加载源可以是本地的 JAR 包,也可以是网络上的远程资源。同时,自定义加载器能够实现应用隔离,例如 Tomcat,Spring 等中间件和组件框架都在内部实现了自定义的加载器,并通过自定义加载器隔离不同的组件模块。

2024-04-03 18:30:32 1011

原创 简易聊天室

【代码】简易聊天室。

2024-04-01 21:14:19 206

原创 TCP网络编程

从客户端发送信息,服务端接收数据并打印在控制台上。

2024-03-31 21:30:33 533

原创 TCP/UDP协议

之后客户端进入 TIMEWAIT (时间等待)状态,服务器收到 ACK 应答报文段后,服务器就进入 CLOSE(关闭)状态,到此服务器的连接已经完成关闭。客户端处于 TIMEWAIT 状态时,此时的 TCP 还未释放掉,需要等待 2MSL 后,客户端才进入 CLOSE 状态。由于这种面向连接的特性,TCP 协议可以保证传输数据的安全,所以应用十分广 泛,例如下载文件、浏览网页等。TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。释放已建立的连接,效率低。

2024-03-31 20:20:03 852

原创 InetAddress

InetAddress 类的一个实例就代表一个具体的 ip 地址。

2024-03-31 19:59:33 124

原创 对象序列化机制

对象序列化机制允许把内存中的 Java 对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的 Java 对象。序列化的好处,在于可将任何实现了 Serializable 接口的对象转化为字节数据,使其在保存和传输时可被还原。如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,该类必须实现。类保存基本类型数据或对象的机制。

2024-03-30 20:17:05 964

原创 File和IO流

处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之 上,通过对数据的处理为程序提供更为强大的读写功能。I/O 流中的 I/O 是 Input/Output 的缩写, I/O 技术是非常实用的技术,用于处理设 备之间的数据传输。如读/写文件,网络通讯等。Java 程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行,可以看做是 一种数据的流动。– 字节流 :以字节为单位,读写数据的流。

2024-03-28 20:09:23 459

原创 HashMap的添加操作底层详解

首先会调用 key1 所在类的 hashCode()方法,计算 key1 的哈希值 1, 此哈希值 1 再经过某种运算(hash()),得到哈希值 2。位置 2、位置 3:(key1,value1) 与现有的元素以链表的方式存储在 table 数组索引 i 的位置,新添加的元素指向旧添加的元素。(2.1) 如果哈希值不同,则(key1,value1)直接添加成功 ------位置 2。(1)如果数组索引为 i 上的数据为空,则(key1,value1)直接添加成功 ------位置 1。

2024-03-26 21:05:17 1002

原创 泛型和通配符

当我们在类或接口中定义某个成员时,该成员的相关类型是不确定的,而这个类型需要在使用这个类或接口时才可以确定,那么我们可以使用泛型类、泛型接口。① 我们在声明完自定义泛型类以后,可以在类的内部(比如:属性、方法、构造器中)使用类的泛型。② 我们在创建自定义泛型类的对象时,可以指明泛型参数类型。一旦指明,内部凡是使用类的泛型参数的位置,都具体化为指定的类的泛型类型。

2024-03-24 20:22:12 1026 1

原创 Collections工具类

排序操作:reverse(List):反转List 中元素的顺序 shuffle(List):对 List 集合元素进行随机排序 sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序 swap(List,int, int):将指定 List 集合中的 i 处元素和 j 处元素进行交换查找:Object max(Collection):根据元素的自

2024-03-21 21:38:02 297 1

原创 Java排序Comparable和Comparator

【代码】Java排序Comparable和Comparator。

2024-03-19 20:48:01 123 1

原创 Java日期相关API的基本使用

【代码】Java日期相关API的基本使用。

2024-03-19 19:57:13 114 1

原创 多线程

而在多核 CPU 系统中,则这些可以并发执行的程序便可以分配到多个CPU上,实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核 CPU,便是多核处理器,核越多,并行处理的程序越多,能大大的提高电脑运行的效率。在操作系统中,启动了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单核 CPU 系统中,每一时刻只能有一个程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。

2024-03-15 19:52:05 1049 1

原创 JUnit单元测试了解

JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何 (How) 完成功能和完成什么样(what) 的功能。要使用JUnit,必须在项目的编译路径中引入JUnit的库,即相关的.class文件组成的jar包。jar就是一个压缩包,压缩包都是开发好的第三方(0racle公司第一方,我们自己第二方,其他都是第三方)工具类,都是以class文件形式存在的。

2024-03-13 20:38:49 370

原创 Annotation注解

未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,Struts2有一部分也是基于注解的了。在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等,在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。Annotation可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。

2024-03-13 19:10:59 387

原创 枚举类

【代码】枚举类。

2024-03-12 21:41:31 395 1

原创 Interface接口

属性:必须使用public static final修饰方法:jdk8之前:声明抽象方法,修饰为public abstractjdk8:声明静态方法、默认方法jdk9:声明私有方法。

2024-03-12 20:29:30 328 1

原创 抽象类和抽象方法

包含抽象方法的类必须是抽象类。

2024-03-12 16:49:56 326 1

原创 单例设计模式

如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

2024-03-11 19:42:31 413

原创 面向对象特征:封装、继承、多态

内聚:一个模块内各个元素彼此结合的紧密程度,意味着重用和独立;耦合:一个软件结构内不同模块之间互连程度的度量,意味着牵一发而动全身。

2024-03-09 21:17:50 939

原创 JavaBean

好比你做了一个扳手,这个扳手会在很多地方被拿去用。这个扳手也提供多种功能(你可以拿这个扳手扳锤、撬等等),而这个扳手就是一个组件。有属性,且有对应的get、 set方法。有一个无参的公共的构造器。

2024-03-09 18:56:44 317

原创 不同包下同名类的使用

对于同名类使用全类名的方式。

2024-03-09 17:11:27 427

基于Java Socket的简易聊天室

对Java 基于Socket的TCP编程的基本使用,包括客户端和服务端的接收和发送

2024-04-04

空空如也

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

TA关注的人

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