caching - 唯一 ID 的缓存解决方案
问题描述
我们想要构建一个唯一 ID 的分布式缓存,用于在应用程序中识别每个事务。UNIQUE ID 是使用 java 代码中的一些自定义逻辑(比如 DATE +一些随机数)生成的。
该应用程序在 8 个应用程序服务器中运行(负载平衡)。一旦应用程序使用了 UNIQUE ID,就需要使用先前使用的值更新缓存。所以缓存对象更新应该在多线程环境中完成。
在每个应用程序服务器中保留本地缓存是否更好(每个节点特定的唯一 ID 生成序列)。但这并不能保证应用程序中的事务 ID 顺序。
我们一直在寻找 hazlecast、geode、ignite 等选项来构建分布式缓存(点对点缓存)。但是当在多线程环境中进行缓存更新时,哪一个会更好。
哪种缓存解决方案/模型最适合这个问题。
解决方案
不需要缓存
您的问题不需要缓存解决方案。
您可以生成通用唯一标识符,而无需在系统之间进行协调。
UUID
一个合适的解决方案已经被发明、标准化、实施和广泛采用:UUID
版本 1 UUID 代表空间和时间点,将当前时刻与机器的MAC 地址一起添加,并添加一个任意数字,该数字在主机时钟重置时递增,在 UUID 生成器重新启动时递增。
所有这些数据都以 128 位的值表示,并指定了哪些位代表哪些数据。用于向人类显示文本的规范格式使用由连字符分隔的十六进制字符。
例子:
1154cf8a-6f7b-11ea-bc55-0242ac130003
您要求:
自定义逻辑(比如 DATE +一些随机数)
如上所述,某些版本的 UUID 仅包含日期时间加上任意数字以及其他信息。听起来您的团队正在不明智地重新发明轮子。
UUID 在 IT 行业中被广泛使用。您将在电子邮件标题中找到它们以识别每条消息。您会发现它们是交易 ID。您会发现它们是对象 ID。
UUID 生成器实现几乎内置于所有操作系统(macOS、Linux、BSD、Windows 等)中。库是公开的,例如OSSP uuid。Postgres 等功能更强大的数据库支持 UUID 作为本机数据类型,以实现高效存储和易用性。一些软件平台(例如 Java)包括 UUID 的数据类型和生成器实现。
UUID 的目的是各种软件系统可以自己动态地生成 UUID 值,不需要中央机构,不需要分布式缓存,也不需要与其他系统协调。
推荐阅读
- java - Most appropriate "2D" representation for storing a string and double value side-by-side in Java?
- asp.net - 在 .Net 中的 HttpApplication 事件之间传递数据
- ios - 我可以将 LED 用作增强现实目标吗?
- r - 带有长表达式的 R 正则表达式
- google-chrome - 有没有办法将伪元素“之前”/“之后”直接添加到 Chrome 的开发工具样式选项卡?
- node.js - Nestjs招摇问题
- sql - Hibernate 无法从终端执行可以正常执行的查询
- java - 为 kafka connect s3 sink 连接器定义自定义格式
- mysql - MYSQL SELECT 时间戳为 1 到 2 周的所有行
- mallet - Mallet:“VM 初始化期间发生错误。无法为 3145728KB 对象堆预留足够的空间?