- 博客(49)
- 收藏
- 关注
原创 Redis Intset 增删改操作的详细策略
Redis的Intset(整数集合)通过有序紧凑的结构高效处理整数增删改操作。插入操作需检查编码升级需求,必要时迁移所有元素并扩容;删除操作通过二分查找定位元素并移动后续内容;修改操作由"删除+插入"两步实现。所有操作都需保持元素有序性,编码只能升级不会降级,时间复杂度为O(n)。Intset通过二分查找、内存块迁移等优化,在保证数据完整性的同时兼顾性能,是小规模整数存储的高效解决方案。
2025-09-16 15:06:55
655
原创 Redis 中 Intset 的内存结构与存储机制详解
动态编码:根据元素范围自动选择最小可行的编码,避免内存浪费。紧凑存储:柔性数组 + 无额外元数据,内存利用率接近 100%。有序性:元素始终排序,支持二分查找(O (log n) 复杂度)。升级不可逆:只支持从窄编码升级到宽编码(如 int16→int32),保证数据安全。这种设计让 Intset 在存储小整数集合时,比哈希表节省大量内存(无键值对开销、无指针开销),是 Redis 内存优化的典型案例。
2025-09-16 14:32:15
778
原创 Redis 底层数据结构之 Dict(字典)
c运行// 字典类型函数} dictType;// 哈希表节点void *key;// 键union { // 值(联合体)void *val;double d;} v;// 链表指针,处理哈希冲突// 哈希表// 哈希表数组// 哈希表大小// 掩码,用于计算索引(size-1)// 已使用节点数量} dictht;// 字典// 类型函数// 私有数据// 两个哈希表,用于渐进式 rehash。
2025-09-16 13:40:24
1029
原创 使用 StringRedisTemplate 实现 Redis Stream 异步存储
业务系统产生数据,发送到 Redis Stream消费者从 Stream 中读取数据消费者将数据异步存储到 MySQL处理成功后确认消息,失败则留在 PEL 中等待重试。
2025-09-13 14:12:07
475
原创 Redis Stream 命令
理解这些命令及其参数是掌握 Redis Stream 的基础,它们共同构成了可靠消息队列的核心机制。在 Spring Boot 中使用 StringRedisTemplate 时,这些参数会以方法参数或配置类的形式体现,了解底层参数含义有助于更好地使用封装后的 API。
2025-09-13 13:40:20
880
原创 Redis ZSet 实现滚动查询笔记
滚动查询(Scroll Query)是一种高效获取大量数据的方式,尤其适用于需要分页加载但数据可能动态变化的场景。与传统分页相比,它能避免因数据新增 / 删除导致的分页偏移问题。元素带有分数 (score),可按分数排序支持按分数范围查询支持通过命令高效带有偏移量和数量限制的查询。
2025-09-06 10:11:36
269
原创 Redis
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:。字符串string哈希hash列表list集合set有序集合sorted set / zset。
2025-07-16 20:48:14
312
原创 SpringBoot
SpringBoot中支持三种格式的配置文件若三个类型的配置文件同时出现他们的优先级从上往下依次是SpringBoot除了支持配置文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置。-D配置项的名字=配置项的值 -D表示这是java系统属性在IDEA中可以这样使用总的来说配置优先级命令行属性>Java系统属性>配置文件在运行Jar包的时候可以这样配置命令行属性和java系统属性。
2025-07-04 12:47:58
442
原创 AOP编程思想
4.@AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行5. 5.@AfterThrowing :异常后通知,此注解标注的通知方法发生异常后执行。1,*︰单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意类型的一个参数,也可以通配包、类、方法名的一部分。场景:案例中部分业务方法运行较慢,定位执行耗时较长的方法,此时需要统计每一个业务方法的执行耗时。3. @After :后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行。
2025-07-03 14:06:21
795
原创 后端登入认证
创建一个实体类来封装登入的信息接受前端返回登入的账号密码,直接用Emp封装servers层进行数据处理使用用户名和密码进行进行查询操作。
2025-07-02 16:01:06
633
原创 Spring-文件上传
文件上传:是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。
2025-07-01 17:04:55
474
原创 开发规范1
REST (REpresentational State Transfer),表述性状态转换,它是一种软件架构风格。传统Restful。
2025-06-01 10:26:28
288
原创 SpringBoot+MyBatis
后面要有空格每一个元素前面都有一个空格注意:在yml配置文件中,如果配置项的值是以开头的,值要使用"引起来,因为以0开头的在yml中表示8进制数据。
2025-05-25 19:47:00
716
原创 SpringBoot Web 入门
官网:spring.ioSpring发展到今天已经形成了一种开发生态圈,Spring提供了诺干个子项目,每个项目用于完成特定的功能。
2025-05-21 14:42:30
715
原创 Vue框架
Vue是一款用于构建用户界面的渐进式的JavaScript框架。(官方;框架:就是一套完整的项目解决方案,用于快速构建项目。优点:大大提升前端项目的开发效率。缺点:需要理解记忆框架的使用规则。(参照官网)
2025-05-17 19:15:34
996
2
原创 javaScript
</script>标签之间在HTML文档中可以在任意位置,放置任意数量的<script>标签一般会把脚本置于<body>元素的底部,可以改善显示速度
2025-05-14 19:55:05
793
原创 HTML:入门
span>标签属于内联元素,主要用于为文本的特定部分或者小范围的内联内容添加样式或进行标识。它本身不会对内容的显示造成影响,只有在为其应用了 CSS(像设置颜色、字体、背景等样式)或者添加了 JavaScript 行为之后,才会发挥作用。
2025-05-14 08:27:27
485
原创 Java:多线程
1·先使用核心线程的数量来运行任务2·诺核心线程数量小于要运行的任务,剩余任务则在阻塞队列排队3·诺还添加任务到阻塞队列都装不下了,就会将后面装不下的任务交给:“线程池中最大线程数量 - 核心线程数量”的线程处理。也就是说后面的任务会先被其他线程处理(除了核心线程的),而阻塞队列中的任务就接着排队4·诺线程池中最大的线程数量都已经被使用了,那么就会抛弃再加入的任。5·诺“线程池中最大线程数量 - 核心线程数量”,已经被弃用“用TimeUnit”指定的时间那么就会从线程池中删除。
2025-04-21 22:16:38
795
原创 Java:File类 IO流相关
File对象就是一个路径,可以是文件的路径、也可以是文件夹的路径一:二:三:String str = new String("C:\\Users\\16338\\test2\\test.txt");File test = new File(str);System.out.println(test.exists());System.out.println(test.isDirectory());System.out.println(test.isFile());System.o
2025-04-15 16:50:14
877
1
原创 Java:Map 不可变集合 stream流 方法引用 异常
java.util.Collections: 是集合的工具类作用是:Collections不是集合,而是集合的工具类1 定义异常类2 写继承关系3 空参构造4 带参构造。
2025-04-11 08:57:43
1178
原创 Arrays操作工具 Lambda表达式 集合 迭代器 数据结构 泛型 set集合 list集合
用自定义的类实现接口Comparable接口来自定义排序:(优先级别更高)也可以直接在创建TreeSet对象时实现:@Overrideint i;});
2025-04-07 18:02:53
731
原创 Linux用户和权限
在Linux系统中,拥有最大权限的账户名为:root(超级管理员)·而在前期,我们一直使用的账户是普通的用户:~·普通用户的权限,一般在其HOME目录内是不受限的·一旦除了HOME目录,大多数地方,普通用户仅有只读和执行权限,无法修改权限。
2025-03-18 15:04:58
667
原创 Linux命令基础,创建,输入,输出,查看,查询
vi\vim是visual interface的简称,是Linux中经典的文本编辑器同图形化界面中的文本编辑器一样,vi是在命令行下对文本进行编辑的绝佳选择。vim是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,而且还具有shell程序编辑的功能,可以不用颜色字体来辨别语法的正确性,极大方便了程序的设计和编程性。
2025-03-15 15:06:24
1205
原创 数据库的函数 约束 多表查询 事务
1·概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。2·目的:确保数据库中数据的正确,有效性和完整性。3·分类:name varchar(10) not null unique comment '姓名',age int check ( age between 0 and 120) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别')comment '人类';
2025-03-06 13:21:31
693
原创 sql语言,数据库操作
DML英文全称时Data Manipulation Language(数据操作语言),用来对数据库中的表的数据记录进行增删改操作。添加数据(INSERT)修改数据(UPDATE)删除数据(DELETE)将一列数据作为一个整体,进行纵向计算。DCL英文全称是Data Control Language(数据控制语言),用来管理数据库 用户、控制数据库的访问权限。SHOW GRANTS FOR '用户名'@'主机名';
2025-03-02 11:04:28
713
1
原创 Java:内部类
在一个类的里面,再定义一个类。举例:再A类的内部定义B类,B类就被称为内部类内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义。
2024-12-08 09:26:18
659
原创 java:接口
当需要对接口添加新的方法时候,为了让继承了此接口的子类不报错作用:解决接口升级的问题·格式:public default 返回值类型 方法名(参数列表){}·范例:public default void show(){}static修饰的方法不能写在虚方法表,谈何重写·静态方法只能通过接口名调用,不能通过实现类名或者对象调用·public可以省略,static不能省略接口中私有方法的定义格式:·格式1:private 返回值类型 方法名(参数列表){}
2024-12-01 18:03:10
1510
原创 java :权限修饰符和代码块 抽象类和抽象方法
1·抽象方法的定义:public abstract 返回值类型 方法名(参数列表);//不需要写{},因为不含方法体。2·抽象方法的定义:public abstract class 类名{
2024-11-30 10:32:00
452
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅