自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 hash方法

【代码】hash方法。

2025-04-06 21:20:10 24

原创 多级缓存的实现

缓存、限流和熔断。而缓存是排在最前面也是高并发系统之所以高效运行的关键手段,那么问题来了:缓存只使用 Redis 就够了吗?缓存功能的设计也是一样,我们在高并发系统中通常会使用多级缓存来保证其高效运行,其中的多级缓存就包含以下这些:浏览器缓存:它的实现主要依靠 HTTP 协议中的缓存机制,当浏览器第一次请求一个资源时,服务器会将该资源的相关缓存规则(如 Cache-Control、Expires 等)一同返回给客户端,浏览器会根据这些规则来判断是否需要缓存该资源以及该资源的有效期。

2025-04-01 19:49:44 848

原创 原子性的概念

在数据库中,一个事务内的所有操作是原子的,要么全部成功(提交),要么全部不生效(回滚)。例如,银行的转账操作涉及两个账户的余额更新,只有在所有操作都成功的情况下,转账才会完成,否则应保持初始状态。(Atomicity)是指某些操作要么全部完成,要么全部不做,操作不可分割,没有中间状态。看似简单的操作,实际由“读取-修改-写入”三步组成,不是原子的,如果不加锁或使用原子操作,可能出现多个线程同时读取和修改数据导致错误。在多线程环境下,如果多个线程访问共享变量,原子性可以确保每个线程看到的数据是一致的。

2025-03-30 21:23:55 395

原创 cookie,session,token

Cookie:存储在客户端,适合非敏感小数据,用于会话跟踪。Session:存储在服务器,适合保存用户的敏感信息和身份状态,依赖服务器状态。JWT:无状态令牌,适合分布式应用的认证,令牌本身包含用户信息且签名确保不被篡改。

2025-03-30 21:22:29 998

原创 自旋锁策略和看门狗策略

保障这个线程不会因为意外中断导致锁失效(避免缓存未更新时释放锁)。来减少对数据库的直接访问,避免瞬间大量请求直接打到数据库。:如果查询数据库时间较长,线程可能自旋过久,影响吞吐量。(默认每 10 秒续期一次),确保持锁线程不会意外失效。来维护锁(但 Redisson 性能较好,影响较小)。:线程会一直轮询缓存,可能造成 CPU 高负载。线程获取到缓存数据后退出自旋,返回数据。线程完成数据库查询后,更新缓存并释放锁。(不断轮询)直到缓存更新完成。负责查询数据库,并回填缓存。,其他线程不会重复查询数据库。

2025-03-26 21:56:58 531

原创 带你理清前后端重定向问题

重定向

2025-03-24 11:40:45 262

原创 transient,序列化的秘密

序列化的一个关键字

2025-03-23 21:46:22 219

原创 IO密集型和CPU密集型

IO密集型任务主要依赖于。

2025-03-23 21:02:05 609

原创 Stream流式计算

Stream是 Java 8 引入的一个新的抽象,它代表一个元素的序列,支持对集合的顺序或并行的复杂操作。Stream本身并不存储数据,它是数据源(如集合、数组等)的一种视图,并通过流水线操作来处理数据。

2025-03-23 15:46:39 628

原创 乐观锁的举例

乐观锁是一种用于多线程并发控制的机制,常用于避免数据的并发修改冲突。与悲观锁不同,乐观锁假设多个事务同时处理同一份数据时,冲突的概率较低,因此不在事务开始时加锁,而是通过一种校验机制确保数据一致性。如果版本号或时间戳发生了变化,说明数据已经被其他事务修改,本次操作会被中止或回滚,用户需要重新读取数据并重试。如果版本号或时间戳没有变化,说明数据未被其他事务修改,可以继续进行更新并将版本号或时间戳加1。:每当进行数据修改时,会检查数据的版本号或时间戳是否发生了变化。线程 B 尝试更新数据,但它读取到的。

2025-03-15 21:48:39 172

原创 TransactionTemplate

/ 事务提交(如果不抛异常)// 发生异常时,手动回滚事务。事务成功和失败有不同的处理逻辑。(比如与第三方库的数据库操作)(比如业务逻辑决定是否回滚)) 的一个包装类,允许你。并进行自定义异常处理。

2025-03-13 19:28:05 748

原创 TraceId和SpanID(分布式ID)

一次完整的请求链路,从请求发起到请求结束,整个过程的所有请求都会有相同的。用户请求 → API 网关 → 订单服务 → 支付服务 → 库存服务。,比如执行了哪些操作、耗时多少、是否出错等。traceId 可能包含多个 spanId。一起使用,帮助开发者快速定位系统问题。,包括它经过的所有微服务和调用。,方便后续分析整个请求链路。代表整个请求的全局 ID。里的核心概念,主要用于。下的某个具体的请求片段。这些所有的调用,都会。继续上面的例子,一个。,代表整个请求链路。,用于记录调用关系。

2025-03-03 11:39:49 376

原创 密码加盐的概念及使用

这样即使黑客拿到 A 网站的密码哈希值,也无法直接在 B 网站使用。黑客可以在彩虹表里找到相同的哈希值,就能反查出你的密码。,因为每个用户的盐都是随机生成的,黑客无法批量破解。(Rainbow Table)是一个。,黑客可以用它来反查明文密码。,然后再进行哈希(Hash)处理。:如果盐是固定的,黑客还是能破解。是黑客利用在某个平台泄露的。去尝试登录其他平台。A 网站被黑客攻破,密码泄露。,黑客无法直接反查密码!

2025-03-02 20:59:19 922

原创 SpringBoot项目启动时碰到数据库死锁问题

是 Liquibase 正在等待获取数据库的锁,这意味着在执行数据库迁移时,Liquibase 检测到数据库的。上面这个是我已经修改完成的,只要将LOCKED字段由true改为false即可。今天在启动SpringBoot项目时,碰到了这样一行提示。

2025-02-28 16:51:21 175

原创 缓存击穿问题

Redis是基于内存的,性能极高,官方给的指标是每秒可达到10W的吞吐量。:虽然我设置了过期时间,但是会出现一种情况:当业务执行之后,锁还被持有着,这是比较消耗Redis缓存资源,正确的做法应该是当业务执行完之后,立即释放锁。:过长的话,可能在我们加锁成功后,还没有执行到释放锁,在这一段过程中节点宕机了,那么在锁未过期的这段时间,其他线程是不能获取锁的,这样也不好。:如果某个数据项不存在于缓存中(例如数据库中没有),但是多个请求几乎同时访问此数据项,数据库的查询压力会瞬间增大,造成性能瓶颈。

2025-02-26 16:47:10 899

原创 mysql和Redis缓存一致性方案

mysql和redis缓存一致性的六种方案

2025-02-12 18:20:42 522

原创 @Resource和@Autowired注解

Resouce是JavaEE的一个包下的,可以跨框架使用。而@Autowired是来源于Spring框架中的,脱离Spring时候不可用。

2024-12-12 15:52:00 342

原创 力扣199

【代码】力扣199。

2024-11-25 16:42:43 372 1

空空如也

空空如也

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

TA关注的人

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