在java的前后端分离的项目中uuid是什么意思,有什么作用,有什么优势和劣势,uuid的组成

文章讲述了UUID在Java前后端分离项目中的应用,包括用作主键、会话标识、文件名和缓存键。同时探讨了UUID的全局唯一性、生成便利性及在分布式环境中的优势,以及存储空间占用、可读性差和性能影响的劣势。

在Java的前后端分离项目中,UUID代表通用唯一标识符(Universally Unique Identifier)。UUID是一种由128位数字组成的标识符,用于在分布式系统中唯一地标识实体或对象。

UUID的作用在于为实体或对象提供全局唯一的标识,无论在何时何地生成,都应该是唯一的。在前后端分离的项目中,UUID常用于以下方面:

  1. 主键生成:在数据库表中,可以使用UUID作为实体的主键,代替传统的自增长整数。这样可以在分布式环境中避免主键冲突,并且不依赖于数据库的自增长机制。

  2. 会话标识:在用户身份验证和会话管理中,可以使用UUID生成唯一的会话标识符。每个用户的会话可以使用不同的UUID来标识,确保会话的唯一性和安全性。

  3. 文件上传:当用户上传文件时,可以为每个上传的文件生成UUID作为文件名或文件标识符。这样可以避免文件名冲突,并且方便管理和查找文件。

  4. 缓存键:在缓存系统中,可以使用UUID作为缓存键,用于存储和检索缓存数据。通过使用UUID作为键,可以避免键冲突和数据覆盖的问题。

总结来说,UUID在Java的前后端分离项目中起着生成全局唯一标识符的作用。它可以用作实体的主键、会话标识、文件标识以及缓存键等,确保系统中的实体、数据和操作都具有唯一性,并提高系统的可扩展性和安全性。

UUID在分布式系统中具有以下优势和劣势:

优势:

  1. 全局唯一性:UUID的主要优势是能够在全球范围内保证唯一性。即使在分布式系统中生成,也能够避免产生重复的标识符。

  2. 简单生成:UUID的生成过程相对简单,不需要依赖于中央控制器或全局状态,可以在本地生成。

  3. 分布式环境友好:由于UUID的全局唯一性特性,它非常适用于分布式系统中的实体标识。在分布式环境中,不同节点可以独立生成UUID,而无需进行全局协调和同步。

  4. 无需网络通信:生成UUID不需要与其他节点进行通信,因为它可以在本地生成。这减少了网络开销和延迟。

劣势:
  1. 存储空间占用:UUID通常采用128位(16字节)的表示形式,相对于较短的标识符,它需要更多的存储空间。在某些情况下,这可能会增加存储成本和资源消耗。

  2. 可读性差:UUID是由16进制数字和连字符组成的字符串,对于人类来说不太直观和可读。在某些场景下,使用较短、易读的标识符可能更为方便和可理解。

  3. 数据库索引性能:在使用UUID作为数据库主键时,由于其随机性质,可能会导致索引的性能下降。相比于递增的整数主键,UUID的无序性可能会增加索引的分裂和碎片化。

  4. 不适合排序:由于UUID是随机生成的,它们之间没有天然的顺序。如果需要对标识符进行排序或范围查询,使用UUID可能会导致较差的性能。

综上所述,UUID在分布式系统中具有全局唯一性和简单生成的优势,但也存在存储空间占用、可读性差、数据库索引性能和排序不便等劣势。在选择标识符方案时,需要根据具体需求和系统特点进行权衡和选择。

UUID(Universally Unique Identifier)是一种标识符,用于在计算系统中唯一地标识实体、对象或信息。它是由128位二进制数(通常以十六进制表示)组成的值。UUID的生成算法保证了在全球范围内的唯一性,即使在分布式系统中生成,也能够避免产生重复的标识符。

UUID的标准格式通常由以下几个部分组成:

  1. 时间戳:UUID的前32位由时间戳组成,表示生成UUID的时间。时间戳通常使用当前时间与固定的基准时间(如Unix时间戳)之间的差值表示。

  2. 版本号:UUID的第13位和第14位表示UUID的版本号。不同的版本号标识了不同的UUID生成算法。

  3. 变体标志:UUID的第15位和第16位表示UUID的变体标志。变体标志用于标识UUID的生成规则。

  4. 随机数:UUID的后96位由随机数组成。随机数的生成算法通常使用伪随机数生成器,以确保生成的UUID具有足够的随机性。

UUID的生成算法可以根据不同的版本号和变体标志而有所区别。最常见的UUID版本是基于时间戳和计算机的MAC地址生成的版本1和基于随机数生成的版本4。其他版本的UUID可能基于命名空间、SHA-1哈希等生成。

在Java中,可以使用java.util.UUID类来生成UUID。该类提供了静态方法randomUUID()用于生成随机的版本4 UUID,以及nameUUIDFromBytes(byte[] name)用于基于给定的字节数组生成名称空间为DNS的版本3 UUID。

总之,UUID是一种用于在计算系统中唯一标识实体或对象的标识符。它具有全球唯一性、简单生成和分布式环境友好的特点,常用于分布式系统、数据库主键、会话管理、文件标识等场景。

在nrf52中增加官方uuid自定义uuid的区别主要体现在以下几个方面: ### UUID定义方式 - **官方UUID**:只需定义16bit uuid结构体,赋值uuid类型uuid值。因为官方UUID使用蓝牙规范中定义的标准基准UUID (MSB)00000000—0000—1000—8000—00805F9B34FB ,设置的16位UUID会替换其中的12、13字节(从0字节数起)。例如: ```c ble_uuid_t ble_uuid; ble_uuid.type = BLE_UUID_TYPE_BLE; ble_uuid.uuid = BLE_UUID_NUS_SERVICE; ``` - **自定义UUID**:要先定义128bit uuid结构体,调用`sd_ble_uuid_vs_add`把基础uuid添加进协议栈中并获得uuid类型,然后再定义16bit uuid结构体,赋值uuid类型uuid值。例如: ```c #define USER_UUID_BASE {0x78, 0x56, 0x34, 0x12, 0xF0, 0xDE, 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00} ble_uuid128_t base_uuid = {USER_UUID_BASE}; uint32_t err_code; ble_uuid_t ble_uuid; err_code = sd_ble_uuid_vs_add(&base_uuid, &ble_uuid.type); APP_ERROR_CHECK(err_code); ble_uuid.uuid = YOUR_CUSTOM_UUID_VALUE; ``` ### 基准UUID - **官方UUID**:使用蓝牙规范中定义的标准基准UUID,不需要开发者传输完整的128位UUID,只传输16位UUID,接收方的底层驱动会自动补全。 - **自定义UUID**:开发者需要自定义基准UUID,并且要将其添加到协议栈中,后续基于该基准UUID生成服务特性的128位UUID [^1][^3][^4]。 ### 注册过程 - **官方UUID**:无需向协议栈注册基准UUID,直接使用标准的类型`BLE_UUID_TYPE_BLE`并设置16位UUID值即可。 - **自定义UUID**:需要调用`sd_ble_uuid_vs_add`函数将自定义的128位基准UUID注册到协议栈中,以获取协议栈分配的uuid类型 [^2][^4]。 ### 显示情况 - **官方UUID**:部分软件可能只显示定义的2字节UUID,有的软件还是会显示完整的128位UUID,但实际上都是标准基准UUID定义的16位UUID组合,这只是显示问题 [^3]。 - **自定义UUID**:通常会显示完整的128位UUID,因为它基于自定义的基准UUID生成 [^1][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小懒懒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值