--- aliases: tags: - maturity/🌱 date: 2024-09-13 zero-link: - "[[../../../meta/zero/00 HighLoad|00 HighLoad]]" parents: - "[[ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅]]" linked: --- ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: ```java public List getUsersByType(String userType, Set userIds) ``` ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: строку ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. ΠšΠ»ΡŽΡ‡ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ значСния этих входящих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ свойствами: - ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠ»ΡŽΡ‡ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, Ссли измСнятся значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² `userType` ΠΈ `userIds`, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°. - По ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Π½Π°Ρ‡Π΅ ΠΌΡ‹ рискуСм ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ процСсса ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, создавая нСсколько кэшСй для ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ для нашСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ качСствС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ [[Redis]]. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ»ΡŽΡ‡Π° я ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ прСфикс сСрвиса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ коллизию ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сСрвисами. ΠŸΡƒΡΠΊΠ°ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС прСфикс Π±ΡƒΠ΄Π΅Ρ‚ `USER_SERVICE`. Π’Π°ΠΊΠΆΠ΅ добавляю ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ прСфикс ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ `USERS`. Π’ качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `:`, Π² [[../../../../../_inbox/Redis|Redis]] это позволяСт Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ. Π­Ρ‚ΠΎ позволяСт Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΡ€ΠΈ использовании UI ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°Ρ‡Π°Π»ΠΎ нашСго ΠΊΠ»ΡŽΡ‡Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: `USER_SERVICE:USERS:`. ЗначСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΊΠ»ΡŽΡ‡. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ `String userType`. Для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСфиксы, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡƒΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ `USER_TYPE`. А Π²ΠΎΡ‚ для самого значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²: - ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строкой ΠΈ просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ. - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ [[../../cryptography/ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ…Π΅Ρˆ-функция|Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ]] с фиксированной Π΄Π»ΠΈΠ½ΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [[../../cryptography/MD5|MD5]]. Ѐиксированная Π΄Π»ΠΈΠ½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½ΡƒΠΆΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΡƒΡŽ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΊΠ»ΡŽΡ‡Π°. ΠžΡΡ‚Π°Π²ΠΈΠΌ просто строкой, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ вряд Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠΊΠ° наш ΠΊΠ»ΡŽΡ‡ выглядит ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ: `USER_SERVICE:USERS:USER_TYPE:VIP:`. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ `Set userIds`. Π‘ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ всС Π±ΡƒΠ΄Π΅Ρ‚ слоТнСС. ΠœΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ [[../../cryptography/ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ…Π΅Ρˆ-функция|Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ]], Π½ΠΎ ΠΊΠ°ΠΊ? > [!WARNING] Disclamer > Π­Ρ‚ΠΎΡ‚ способ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» сам, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ½ Π½Π΅ самый ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ, Π½ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Если Π²Ρ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях Π½ΠΈΠΆΠ΅ πŸ‘‡ Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π˜Π½Π°Ρ‡Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ [[../../cryptography/ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ…Π΅Ρˆ-функция|Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ]]. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ понятноС для [[../../cryptography/ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ…Π΅Ρˆ-функция|Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ]]. Для этого я ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² JSON. JSON ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ваша коллСкция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ· слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ [[../../cryptography/SHA-256|SHA-256]], Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ· нашСй строки ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ…Π΅Ρˆ. И ΡƒΠΆΠ΅ этот Ρ…Π΅Ρˆ ΠΌΡ‹ добавляСм ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ, получаСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅: ``` USER_SERVICE:USERS:USER_TYPE:VIP:USER_ID:315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3 ``` > [!QUESTION] ΠŸΠΎΡ‡Π΅ΠΌΡƒ SHA-256, Π° Π½Π΅ MD5? > [[../../cryptography/MD5|MD5]] ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ коллизиям, [[../../cryptography/SHA-256|SHA-256]] считаСтся Π±ΠΎΠ»Π΅Π΅ устойчивым ΠΊ коллизиям. *** ## ΠœΠ΅Ρ‚Π° информация **ΠžΠ±Π»Π°ΡΡ‚ΡŒ**:: [[../../../meta/zero/00 HighLoad|00 HighLoad]] **Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ**:: [[../ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅|ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅]] **Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ**:: **Π‘ΠΎΠ·Π΄Π°Π½Π°**:: [[2024-09-13]] **Автор**:: ### Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ - [[../../snippet/РСализация SHA-256 Π½Π° Java|РСализация SHA-256 Π½Π° Java]] ### Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ