Blog - Aim Better

Ideas and reflections about growing with patience, clarity, and intention.

数据库字段怎么设计-主键、状态、时间与约束

表结构定下来之后,很多人会松一口气,觉得差不多就行了。真正让系统在半年后变得难以维护的,往往是设计字段层面当时觉得“差不多就行”的决定。 字段并不是给值存下来就行,他决定了业务事实如何被记录,如何被查询,如何被约束以及未来如何演进。一个设计不当的字段,后面会以“状态判断越来越复杂”,“金额对不上”,“唯一性靠代码硬保证

1435597771 · Sep 10, 2026

从业务需求到数据模型:实体、关系与拆表

在本篇文章中,我们只解决一个问题: 一段业务需求,到底应该变成那些表? 数据库设计中的很多问题,在建表初期就已经埋下了隐患。业务后期如果要对前期草率的设计做改动,成本极高——查询会越来越扭曲,数据不一致的问题也会频发。 正确的路径其实很清晰:先从业务中识别 实体 、 属性 和 关系 ,再决定表结构、外键位置和是否需要中

1435597771 · Sep 2, 2026

Redis中的Set与Intset

什么是set Set 是Redis的基本数据结构之一,他是一个无序并且唯一的键值集合,他的存储顺序不会按照插入的先后顺序进行存储。 在一个集合中最多可以存储2^32-1个元素。但是这个元素数量是对Dict作为底层实现而言的,默认情况下,只有当整数个数不超过 512 个时 Redis 才会使用 IntSet,超过这个

1435597771 · Jul 23, 2026

JetStream与消息可靠性

JetStream是什么 JetStream时NATs这个消息队列中内置的持久化流层,他在CoreNats的基础上增加了消息持久化、历史消息消费以及失败重投能力。 与CoreNats最多一次的消息语义相反,JetStream采用至少一次投递语义,即只要消息没有被确认,系统会尝试重新投递消息,使消息有机会被消费者处理。之

1435597771 · Aug 13, 2026

消息队列与NATs最小运行模型

本文从同步调用的问题出发,介绍 Core NATS 的最小发布订阅模型,包括Publisher、Subscriber、Subject 和 NATS Server,并通过异常场景解释其“至多一次”语义。 同步与异步 在开始之前,我们需要先了解一下,同步和异步的区别,为什么有同步和异步之分。 我们需要想象一下,在程序中有订

1435597771 · Aug 4, 2026

普通Pub/Sub、Queue Group和Request-Reply浅析

普通Pub/Sub订阅模型 普通 Pub/Sub 是 Core NATS 最基础的通信模型。Publisher 向 Subject 发布消息,所有匹配且当前活动的独立 Subscriber 都可以获得一份消息。 但是普通的Pub/Sub订阅模型无法解决下面两个场景 多实例场景:邮件服务有两个实例, 都订阅jobs.em

1435597771 · Aug 4, 2026

Hash表与Dict及渐进式Rehash

Redis Hash是什么 RedisHash是Redis中的数据类型,他存储的是键值对数组。键值对数组中,每一个元素都是一个key-value成对出现。 RedisHash底层实现 RedisHash的底层实现数据结构是listpack和dict。在键值对数组个数小于512个,所有值小于64字节,那么就用listpa...

1435597771 · Jul 15, 2026

Redis中的List数据类型

Redis List 是什么 在redis中, List类型是字符串列表,按照插入顺序排序,可以从头部或尾部向list中添加元素,一个list类型的列表最多可以存储2^32-1个元素。 在Redis中,可以对列表的两端插入和弹出,还可以获取指定范围的元素列表,获取指定索引下标的元素,可以充当栈和队列的角色。 列表有以下...

1435597771 · Jul 9, 2026

String字符串与SDS(简单动态字符串)

Redis是键值对数据库,它提供了不同的数据类型,例如:String、Hash、List、Set和ZSet。其中String是最常用的一种,本篇文章我们来探讨一下Redis提供的数据类型String和他的底层实现。Redis String 看起来只是一个普通的字符串,但它的底层实现并没有那么简单。为了兼顾...

1435597771 · Jun 22, 2026