如何在REDIS中定义键以获取人类可读的唯一ID?
解决方案:Redis中生成并管理唯一人类可读ID
一、用Redis原子自增解决整数ID的连续性问题
预创建所有ID既浪费内存又不灵活,完全没必要。直接用Redis的原子自增命令就能搞定整数键的生成与恢复:
用一个专门的键(比如
next_unique_id)记录当前最大ID值,每次生成新ID时执行:INCR next_unique_id这个命令是原子性的,多客户端并发调用也不会产生重复ID。返回值就是新的唯一整数ID,直接用它作为键存储对应数据即可:
SET entity:{新ID} "对应数据内容"应用重启后无需手动恢复,直接调用
INCR next_unique_id即可——如果键不存在,Redis会自动将其初始化为0,再自增到1,完美衔接之前的序列。
二、生成更友好的人类可读ID(非纯整数)
如果需要类似ORDER-2024-0012这类易读格式的ID,结合自增和应用层字符串拼接即可:
- 用自增键维护序列:
INCR order_seq - 在应用层将自增结果拼接成目标格式,示例代码(Python):
这种格式既满足可读性,又保证唯一性,应用重启后靠seq = redis_client.incr("order_seq") readable_id = f"ORDER-{datetime.now().year}-{seq:04d}" redis_client.set(readable_id, "订单信息")order_seq的自增就能维持序列连续性。
三、GETDEL的正确使用姿势(ID池场景)
如果你的场景是需要从ID池中取一个即用即删的ID,不用预创建全量ID,用Redis列表结合原子命令实现更高效:
- 初始化时批量推入一批预生成的ID到列表:
LPUSH id_pool 501 502 503 ... 600 - 每次取ID时用
RPOP或LPOP(都是O(1)原子操作),取出的同时自动删除列表中的对应元素:RPOP id_pool - 当列表中ID数量不足时,在应用层自动生成一批新ID推入列表即可。应用重启后只需检查列表长度,为空则补充新ID,无需关心之前的使用位置。
内容的提问来源于stack exchange,提问作者Maurício Junior
相关产品推荐
相关产品推荐

