GoNotes(1):Kitex + Gorm 搭建微服务实现CRUD
这是我在学习 Go 语言过程中,结合 Kitex 和 Gorm 框架搭建一个简单的微服务实现 CRUD 操作的笔记。通过这个简单的小项目,主要是学习到一些go语言的基础语法和一些常用的框架使用方法,同时了解自研组件Kitex的使用,以及go语言常见数据库管理组件Gorm的使用,以及一些微服务设计的基本思路。也是个人实习需要学习的开发框架,由于之前没接触过微服务,通过这系列的学习笔记,能够更好地理解微服务的设计和实现细节,也防止自己忘得太快,留篇笔记记录下来。 一、核心组件介绍1.1 Kitex —— 字节自研 RPC 框架Kitex 是字节跳动开源的高性能 Go RPC 框架,属于 CloudWeGo 生态的核心组件。 对比维度 Java (Spring Cloud) Go (字节/CloudWeGo) RPC 框架 Dubbo / OpenFeign Kitex 契约描述 Swagger / Proto Thrift IDL 序列化协议 JSON / Protobuf Thrift Binary(性能更高) ...
秒杀系统设计(二):从Lua分布式锁到Redisson的进阶之路
在上一章我们用说对于超卖问题和一人一单可以用悲观锁/乐观锁来解决,但这些都是单机锁,在分布式环境下是完全失效的。我们需要一种跨越多个 JVM、跨越多个进程的全局锁机制——分布式锁。 一、Lua 脚本与Lua脚本的问题我们的项目在之前的超卖问题里,采用乐观锁的方式解决了单机环境下的并发安全问题,但在分布式环境下,单机锁(无论是悲观锁还是乐观锁)都无法保证全局的互斥访问。此外的一人一单问题,目前是用 synchronized 锁住了 userId,这在单机环境下是可行的,但在分布式环境下同样会失效。因为不同 JVM 的线程无法共享同一个锁对象。所以我们需要一个分布式锁,来保证在分布式环境下的并发安全。最初我们的方案是setnx命令,这个命令很简单,给redis设置一个key,如果这个key不存在就设置成功,存在就失败。我们可以利用这个命令来实现分布式锁的功能: boolean tryLock(String key, String value, long expireTime) {1234 // SETNX 命令:如果 key 不存在则设置,存在则返回 false ...
Redis常见问题——项目中解决缓存穿透与缓存击穿
在上一篇文章中,我们探讨了缓存的更新策略及其在分布式场景下的一致性挑战。今天,我们将视角深入到高并发场景下最常见的两个问题:缓存穿透与缓存击穿。 本文将结合黑马点评项目,拆解我们是如何通过封装通用的 CacheClient 工具类,利用空值缓存、互斥锁以及逻辑过期这三种方法,优雅地应对高并发流量冲击的。 一、 拨开云雾:理解缓存问题的本质在分布式系统中,高并发流量会瞬间冲垮后方脆弱的数据库。因此有缓存的保护是必要的,但缓存也不是万能的。我们需要清晰地认识到两种常见的缓存问题: 1. 缓存穿透 (Cache Penetration)问题描述:请求直接穿透了缓存层,打到了数据库,但数据库里也没这个数据。典型场景:恶意用户使用脚本,不断请求 id = -1 或不存在的 UUID。后果:Redis 命中率为 0,数据库压力激增,可能瞬间宕机。核心矛盾:数据库中不存在的数据,正常情况下不会被写入缓存,导致后续请求依然无法命中。 2. 缓存击穿 (Cache Breakdown)问题描述:一个热点 Key(比如微博热搜)在缓存过期的瞬间,遭到海量并发访问。典型场景:秒杀活动的商品详情页、突发...
秒杀系统设计(一):从超卖事故到全局唯一ID与乐观锁
秒杀(Seckill)是电商系统中最具挑战性的业务场景之一,其核心特征是瞬时高并发。在短短几秒钟内,流量峰值可能达到平时的成百上千倍。这种场景下,系统不仅要抗住流量,更要保证数据的绝对准确(不能超卖)和业务规则的严格执行(一人一单)。 本文从最基础的超卖问题入手,一步步构建全局唯一 ID,并深度辨析乐观锁与悲观锁。 一、 灾难前夜:超卖问题的诞生1. 什么是超卖?简单来说,就是卖出的商品数量超过了实际库存。例如秒杀库存只有 100 件,最终却产生了 105 个订单。这在电商业务中是严重的生产事故,可能导致平台亏损和用户投诉。 2. 为什么会超卖?从技术角度看,超卖的本质是竞态条件 (Race Condition)。在传统的多线程环境下,扣减库存通常分为两步: 查询库存:SELECT stock FROM table WHERE id = 1 扣减库存:UPDATE table SET stock = stock - 1 WHERE id = 1 这看似逻辑正确,但在高并发下: 线程 A 查询库存,发现 stock = 1。 线程 B 同时查询库存,发现 stock...
解析会话管理:从Cookie、Session到Redis分布式Session
大家好,我是Ea1XonCodeHou,今天开始分享一些关于经典项目:黑马点评中关于Redis深入学习与分布式内容的技术博客。在Web开发中,用户认证与会话管理是核心功能之一。随着架构从单体演进到分布式集群,会话管理方案也在不断迭代。本文主要基于Redis+Token这个新的会话管理方式深入理解从传统的Cookie、Session到现代的Token、JWT,以及如何在分布式环境下使用Redis实现高效的Session共享。 一、 核心概念详解1. Cookie定义:Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。 特点: 存储位置:客户端(浏览器)。 容量限制:通常不超过4KB。 安全性:较低,容易被拦截或篡改(虽然可以通过 HttpOnly 和 Secure 属性增强安全性)。 用途:主要用于会话状态管理(如用户登录状态)、个性化设置、浏览器行为跟踪。 2. Session定义:Session 是服务器端的一种会话技术。当用户访问服务器时,服务器会为该用户创建一个唯一的 Session 对象,并...
My first blog!
欢迎来到我的个人博客!大家好!欢迎访问我的个人博客网站。我是 Ea1XonCodeHou,很高兴能在我的个人博客与大家分享我的想法、开发路上的学习心得和技术经验。 关于我我是一名正在学习编程和技术的大学生/开发者,来自武汉大学计算机学院软件工程专业(WHU-SE)。目前就读于大三年级,对Web开发技术正在学习途中,并准备与2026上半年开始实习/求职,目前平时大部分时间正在学习优秀项目/编写个人项目/练习Leetcode算法题目。希望能多学习一些JavaWeb开发技术栈。通过这个博客,我希望能够: 利用博客记录我在后端开发学习路线的学习历程和技术心得 分享结合网课自学途中获得的开发经验 与同在自学技术求职或者志同道合的朋友们交流讨论 记录从自学到求职生活中的点点滴滴 关于这个网站这个博客网站是基于 Hexo 静态博客框架搭建的,托管在 GitHub Pages 上。选择这个技术栈的原因: 为什么选择 Hexo? 简洁高效:Hexo 是一个快速、简洁且高效的博客框架 Markdown 支持:支持 Markdown 语法,写作体验非常友好 ...



