- 博客(98)
- 收藏
- 关注
原创 【Redis三种集群方案】
在早期的 Redis 版本中,Redis 是一个单机内存数据库,所有数据存储在单个节点上。✅ 数据冗余(Data Redundancy)。
2025-07-10 14:16:05
142
原创 【Redis分布式锁】
分布式锁是一种用于协调分布式系统中多个节点对共享资源访问的同步机制。在单机多线程环境下,我们可以使用Java中的ReentrantLock或等本地锁来控制线程对共享资源的访问。但在分布式系统中,不同的服务/客户端通常运行在独立的JVM进程上,本地锁无法跨JVM实现互斥访问,这时就需要分布式锁。
2025-07-06 16:36:54
654
原创 【SpringSecurity鉴权】
*** 验证用户是否具备某权限* @param permission 权限字符串* @return 用户是否具备某权限*//*** 验证用户是否不具备某权限,与 hasPermi逻辑相反* @param permission 权限字符串* @return 用户是否不具备某权限*/= true;/*** 验证用户是否具有以下任意一个权限* @param permissions 以 PERMISSION_DELIMETER 为分隔符的权限列表。
2025-06-28 22:26:06
200
原创 【redis使用场景——缓存——数据过期策略 】
当客户端尝试访问一个 key 时,Redis 会先检查该 key 是否设置了过期时间,如果已过期则立即删除并返回空。Redis 会定期(默认每秒 10 次)随机抽取一些设置了过期时间的 key,检查它们是否过期,如果过期就删除。如果发现超过 25% 的键已过期,则立即再抽取 20 个进行检查(循环直到低于 25%)Redis 每次事件循环(event loop)都会执行快速过期检查。,对不常访问的 key,即使过期也可能长时间占用内存。从设置了过期时间的键中随机抽取 20 个进行检查。
2025-06-26 16:48:16
494
原创 【position】
若希望 .layout_main 相对于某个父容器定位(而非 body),需为父容器设置 position: relative。
2025-06-25 11:29:07
151
原创 【redis使用场景——缓存——双写一致性】
数据库 → Binlog → 消息队列 → 缓存更新Worker → Redis。核心思想:通过读写锁控制并发访问,读操作加读锁,写操作加写锁。在更新数据库前后各删除一次缓存,第二次删除采用延迟方式(考虑到。双写一致性指的是当修改数据库数据时,也需要同步更新缓存数据,最终结果:MySQL=80,Redis=100,数据不一致。核心思想:通过消息队列(MQ)保证缓存操作最终执行。线程A更新数据库为100,开始更新Redis时出现卡顿。线程B更新数据库为80,并成功更新Redis为80。
2025-06-22 16:37:19
542
原创 【自定义 rem 方案】
const scale = document.documentElement.clientWidth / 1920 // 设计稿宽度。// 窗口大小变化时重置 rem。// 设置 rem 基准值。自定义 rem 方案。
2025-06-19 08:56:05
175
原创 【redis——缓存雪崩(Cache Avalanche)】
缓存雪崩是指在同一时间段内,大量缓存数据同时过期或失效,导致所有请求直接打到数据库上,造成数据库瞬时压力过大甚至崩溃的现象。
2025-06-14 21:08:45
502
原创 【redis——缓存击穿】
核心思想:使用分布式锁保证只有一个线程重建缓存。核心思想:物理永不过期,通过逻辑字段控制有效性。适用场景:极高热度的静态数据(如商品基础信息):通过异步线程更新缓存,避免瞬时负载。适用场景:写操作较少的动态数据。缓存击穿是指某个热点key在。,同时有大量请求涌入,直接。访问数据库的现象。查询数据库并全量写入。立即返回当前过期数据。
2025-06-13 14:45:19
845
原创 【redis——缓存穿透】
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,由Burton Howard Bloom于1970年提出,用于快速判断一个元素是否可能存在于集合中。当数据库查询为空时,仍然将空结果(如"NULL"或空对象)缓存起来,并设置较短的过期时间。布隆过滤器的核心思想是通过多个哈希函数和一个位数组来表示。:时间复杂度为O(k),k为哈希函数数量。:仅需存储二进制位,无需保存元素本身。:标准布隆过滤器不支持删除操作。占用位: 2,5,8。检测位: 2,5,8。
2025-06-13 13:54:33
1108
原创 【LEFT JOIN 的作用及与其他关联方式的区别】
保留左表(主表)中的所有记录,无论右表(从表)中是否有匹配的记录。当右表没有匹配时,结果中右表的列将显示为 NULL。如果一边没有匹配,整行都不会出现在结果中。结果:左表没有匹配时显示NULL。结果:没有匹配的部分显示NULL。保留右表(第二个表)中的所有记录。只返回两表中匹配的行。
2025-06-04 14:37:46
151
转载 【jcifs访问xp的共享文件】
报异常: jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password.工具->文件夹选项->查看-> 去掉【简单文件夹共享(推荐)】的选择。解决的方法是,配置共享机器的共享方式为高级共享。jcifs访问xp的共享文件。
2025-05-18 10:33:44
39
原创 【登录流程图】
13. 存储LoginUser(login_tokens:uuid)抛出UserPasswordNotMatchException。抛出BadCredentialsException。抛出UserNotExistsException。11. 返回Authentication。17. 响应Token(200)16. 返回token。
2025-05-04 16:18:52
804
原创 【UserDetailsService】
如图所示,Authentication Filter将身份验证请求委托给AuthenticationManager,后者使用AuthenticationProvider处理身份验证。UserDetails接口主要用于封装从数据库中加载的用户详细信息。这些属性包括用户名、密码、权限、账户状态等,确保用户信息的安全性和完整性。UserDetails是Spring Security框架中的一个核心接口,用于表示用户的详细信息。来实现用户管理职责。它的主要职责是根据用户名从内存中或数据库中查找用户。
2025-04-28 19:49:13
397
原创 【使用vite创建echarts项目】
让 Vite 自动按需加载 Element Plus 组件,可以使用 unplugin-vue-components 和 unplugin-auto-import。你可以通过简单的类名快速为 HTML 元素添加各种常见的动画效果,如淡入、淡出、旋转、缩放等,而无需编写复杂的 CSS 动画代码。在 src 目录下创建一个 router 文件夹,并在里面创建 index.ts 文件。是推荐的状态管理库,替代 Vuex,提供更简洁的 API 和更好的。在 vite.config.ts 里配置全局 SCSS。
2025-03-09 08:13:38
464
原创 【springboot 连接sqlserver2008】
原文链接:https://blog.youkuaiyun.com/weixin_44296645/article/details/136386281。application.yml配置,hikari要配置connection-test-query。报错:“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全”后面换了jtds连接成功了。
2025-02-26 11:47:36
310
原创 【LEFT JOIN 和 INNER JOIN】
赵六 的 BaseTypeId 是 NULL,因此 LEFT JOIN 会返回 NULL 值对应 BaseType 和 AppraisalBase 字段。赵六 不会出现在结果中,因为他没有 BaseTypeId,在 AppraisalBases 表中没有对应的记录。在执行 INNER JOIN 时,只会返回那些 BaseTypeId 有匹配的记录。其他用户的记录会正常显示,因为它们在 AppraisalBases 表中有匹配。
2025-02-19 09:44:16
322
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人