ConcurrentHashMap + CompletableFuture并发缓存加载方案

介绍 使用缓存时候,如果缓存中没有数据,通常会去数据库查询。为了避免多个线程同时查询同一数据导致的重复查询,经常是会使用锁来保证同一时间只有一个线程去查询数据。 但是锁会导致性能下降,尤其是高并发场景下。 因此可以使用 ConcurrentHashMap 和 CompletableFuture 来实现并发缓存加载。 源码 import java.util.concurrent.Completabl

Mapstruct IterableMapping 集合映射使用

起因 之前写过一个 MapStruct集成及使用 的文章,里面介绍了 MapStruct 的基本用法和集成方式。 有朋友问到里边出现的 @IterableMapping(qualifiedByName = "useMe") 和 @Named(value = "useMe") 起到了什么作用。 介绍 @IterableMapping(qualifiedByName = "useMe") 指定集合映射

Mybatis对象自动缓存插件

介绍 自动将 baseMapper.selectById(id) 、 lambdaQuery().eq(Entity::getId, id) 、 listByIds(ids) 等方式通过主键或主键集合查询的对象结果,自动将查询结果缓存到Redis中。 缓存对象默认1天(上下浮动10%),数据库中没有的数据也会缓存一个NULL值(1分钟有效期)。避免缓存穿透和雪崩。 数据删除、更新时会自动清除缓存(

gitignore

使用 git 很多年了,全局的 .gitignore_global 文件内容几经修改已经一团乱,让ChatGPT帮我整理了一下,去掉了冗余和不合理的部分。 最终gitignore_global内容为 # ======================================== # Operating System Files # ==============================

数据库索引创建的区分度基准

AI建议 区分度需要高于 10% 区分度计算方法 ** 区分度 = 唯一值的个数 / 总行数 ** 即: 如果一个表有 10000 行,而某一列只有 100 个不同的值,则该列的区分度为 100/10000 = 0.01,即 1% 注意 不是唯一标准,比如性别,一般不建议作为索引,但如果是联合索引里,通过实际数据测试效果依然是有一些的 AI建议 区分度需要高于 10% 区分度计算方法 ** 区

年度最差购物体验-淘宝88VIP

明着耍流氓的淘宝88VIP会员 开通了淘宝的88VIP会员,然后首页的元宝签到提示可以换10元红包,签到N天后终于攒满了,这时候提现会提示“需要30内购物实付10元以上3笔订单” 付完3笔之后再提现,提示“需要用100000元宝兑换” 攒满10w元宝之后再提现,提示“有一笔订单已经退款不符合条件,需要再下一笔10元以上订单”,然而 实际那一笔订单是没有退款的 问88VIP客服,客服提示 亲亲,小蜜

Java实现简单的规则引擎

先看使用示例: 源码地址 https://github.com/pengxiaochao/rule 特点 流畅的 Builder API : 使用 RuleBuilder 可以以声明式的方式轻松构建复杂的规则逻辑。 逻辑组合 : 支持 AND , OR , NOT 逻辑操作符的嵌套组合。 丰富的条件 : 内置多种常用条件,包括: 比较 ( > , >= , < , <= , =

Meilisearch 升级必看:三分钟避开所有坑

起因 将服务的一些搜索功能 从Elasticsearch迁移到Meilisearch 之后,已经过去好久了,抽时间将版本做了一下升级。 发现Meilisearch升级过程基本就是个灾难……本来为了方便就是通过官方的docker方式安装的meilisearch,本来想的是直接docker pull新版本就可以了 结果pull完 docker compose up时候提示 error=Your dat

Java + MinIO:将小说章节压缩合并为单文件,提升存储效率

起因 在将 练手小项目 从 Spring Boot2 升级到 Spring Boot3 的时候发现在外网打开minio非常慢,之前每个章节一个txt文件存储在mino中,不知不觉章节文件数量已经达到了63W+ 每个文件平均大小均在10K左右,NAS的随机读写太慢了,所以趁代码重构的机会将整本小说所有章节合并成Minio的一个文件,大大减少碎片文件的数量 方案 将每个章节通过Zstd压缩 计算每个章

ChatGPT和其他APP联动

背景 在Cursor、WindSurf甚至Github Copilot都在各种卷IDEA交互的情况下,ChatGPT终于也退出了自己的IDE交互方案:插件和授权IDEA可改写权限 也算在最低成本且流量不转移的情况下一个取巧的办法吧 使用方式及效果 背景 在Cursor、WindSurf甚至Github Copilot都在各种卷IDEA交互的情况下,ChatGPT终于也退出了自己的IDE交互方案:插