Last active
August 31, 2022 14:54
-
-
Save Luxcium/2db2714e785ed0e2f867065f0b0dbef0 to your computer and use it in GitHub Desktop.
Naïve approach to redis keys
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export interface KeyMake { | |
(keyName?: string | undefined | null): KeyMake; | |
(keyName: string | undefined | null, idValue_0: null): string; | |
(keyName: string | undefined | null, idValue_0: string, ...idValue_1: string[]): string; | |
} | |
export function keyMake(keyName?: string | undefined | null): KeyMake; | |
export function keyMake(keyName: string | undefined | null, ...idValue: [string, ...string[]]): string; | |
export function keyMake(keyName: string | undefined | null, ...idValue: [null]): string; | |
export function keyMake(keyName?: string | undefined | null, ...idValue: any[]): any { | |
const key = keyName ? `${keyName}:` : ''; // .replace('::', ':'); | |
const jusID = idValue ? idValue.join(':') : null; | |
const id = jusID ? `#${jusID}` : ''; | |
if (!key && !id) { | |
return keyMake; | |
} | |
if (key && !id) { | |
if (idValue === null || idValue[0] === null) return `R:@${keyName}` as string; | |
return (keyName_ = '', ...idValue_: [string, ...string[]]) => { | |
const keyName__ = keyName_ ? `${keyName_}` : ''; | |
return keyMake(`${key}${keyName__}`, ...idValue_); | |
}; | |
} | |
return `R:${key}${id}`.replace(':#', '#') as string; | |
} | |
const stringKey = keyMake('KEY'); | |
const listKey = keyMake('LIST'); | |
const setKey = keyMake('SET'); | |
const hashesKey = keyMake('HASH'); | |
const pHashKey = keyMake('P_HASH'); | |
const sortedKey = keyMake('SORTED'); | |
const streamKey = keyMake('STREAM'); | |
const geospatialKey = keyMake('GEOSPATIAL'); | |
const hyperloglogKey = keyMake('HYPERLOGLOG'); | |
const bitmapKey = keyMake('BITMAP'); | |
const bitfieldKey = keyMake('BITFIELD'); | |
export const makeRedisKeys = { | |
stringKey, | |
listKey, | |
setKey, | |
hashesKey, | |
sortedKey, | |
streamKey, | |
geospatialKey, | |
hyperloglogKey, | |
bitmapKey, | |
bitfieldKey, | |
pHashKey, | |
}; | |
__test__(); | |
export function __test__() { | |
console.log('\n\n----------\n\n'); | |
console.log(stringKey('stringKey', 'ID:stringKey')); | |
console.log(stringKey('stringKey_01')('stringKey_02', null)); | |
console.log(listKey('listKey', 'ID:listKey')); | |
console.log(listKey('listKey_01')('listKey_02', null)); | |
console.log(setKey('setKey', 'ID:setKey')); | |
console.log(setKey('setKey_01')('setKey_02', null)); | |
console.log(hashesKey('hashesKey', 'ID:hashesKey')); | |
console.log(hashesKey('hashesKey_01')('hashesKey_02', null)); | |
console.log(pHashKey('pHashKey', 'ID:pHashKey')); | |
console.log(pHashKey('pHashKey_01')('pHashKey_02', null)); | |
console.log(sortedKey('sortedKey', 'ID:sortedKey')); | |
console.log(sortedKey('sortedKey_01')('sortedKey_02', null)); | |
console.log(streamKey('streamKey', 'ID:streamKey')); | |
console.log(streamKey('streamKey_01')('streamKey_02', null)); | |
console.log(geospatialKey('geospatialKey', 'ID:geospatialKey')); | |
console.log(geospatialKey('geospatialKey_01')('geospatialKey_02', null)); | |
console.log(hyperloglogKey('hyperloglogKey', 'ID:hyperloglogKey')); | |
console.log(hyperloglogKey('hyperloglogKey_01')('hyperloglogKey_02', null)); | |
console.log(bitmapKey('bitmapKey', 'ID:bitmapKey')); | |
console.log(bitmapKey('bitmapKey_01')('bitmapKey_02', null)); | |
console.log(bitfieldKey('bitfieldKey', 'ID:bitfieldKey')); | |
console.log(bitfieldKey('bitfieldKey_01')('bitfieldKey_02', null)); | |
console.log('\n\n----------\n\n'); | |
const alX_01 = keyMake('key0', null); | |
const alX_02 = keyMake('key0')('key1', null); | |
const alX_03 = keyMake('key0')('key1')('key2', null); | |
console.log('alX_01:', alX_01); | |
console.log('alX_02:', alX_02); | |
console.log('alX_03:', alX_03); | |
console.log('\n\n----------\n\n'); | |
const a_001 = keyMake(); | |
// * ?^ KeyMake | |
const a_002 = keyMake(undefined); | |
// * ?^ KeyMake | |
const a_003 = keyMake(null); | |
// * ?^ KeyMake | |
const a_004 = keyMake('keyString1'); | |
// * ?^ KeyMake | |
const a_005 = keyMake('keyString1')(); | |
// * ?^ KeyMake | |
const a_006 = keyMake('keyString1')(undefined); | |
// * ?^ KeyMake | |
const a_007 = keyMake('keyString1')(null); | |
// * ?^ KeyMake | |
const a_008 = keyMake('keyString1', 'id1'); | |
// % ?^ string | |
const a_009 = keyMake('keyString1', 'id1', 'id2'); | |
// % ?^ string | |
const a_010 = keyMake('keyString1')('keyString2'); | |
// * ?^ KeyMake | |
const a_011 = keyMake('keyString1')('keyString2', 'id1'); | |
// % ?^ string | |
const a_012 = keyMake('keyString1')('keyString2', 'id1', 'id2'); | |
// % ?^ string | |
const a_013 = keyMake('keyString1')('keyString2')('keyString3'); | |
// * ?^ KeyMake | |
const a_014 = keyMake('keyString1')('keyString2')('keyString3')(); | |
// * ?^ KeyMake | |
const a_015 = keyMake('keyString1')('keyString2')('keyString3')(undefined); | |
// * ?^ KeyMake | |
const a_016 = keyMake('keyString1')('keyString2')('keyString3')(null); | |
// * ?^ KeyMake | |
const a_017 = keyMake('keyString1')('keyString2')('keyString3', 'id1'); | |
// % ?^ string | |
const a_018 = keyMake('keyString1')('keyString2')('keyString3', 'id1', 'id2'); | |
// % ?^ string | |
console.log('a_001 (?^ KeyMake):', a_001); | |
console.log('a_002 (?^ KeyMake):', a_002); | |
console.log('a_003 (?^ KeyMake):', a_003); | |
console.log('a_004 (?^ KeyMake):', a_004); | |
console.log('a_005 (?^ KeyMake):', a_005); | |
console.log('a_006 (?^ KeyMake):', a_006); | |
console.log('a_007 (?^ KeyMake):', a_007); | |
console.log('a_008 (?^ string):', a_008); | |
console.log('a_009 (?^ string):', a_009); | |
console.log('a_010 (?^ KeyMake):', a_010); | |
console.log('a_011 (?^ string):', a_011); | |
console.log('a_012 (?^ string):', a_012); | |
console.log('a_013 (?^ KeyMake):', a_013); | |
console.log('a_014 (?^ KeyMake):', a_014); | |
console.log('a_015 (?^ KeyMake):', a_015); | |
console.log('a_016 (?^ KeyMake):', a_016); | |
console.log('a_017 (?^ string):', a_017); | |
console.log('a_018 (?^ string):', a_018); | |
console.log('\n\n----------\n\n'); | |
} | |
https://www.typescriptlang.org/play?#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgaWAE8BZTAazwG8AoOOACkqIDlMBbYAfgC44BnGFGQBzOAB84AVyQATYOmTBZEuEikAbDQEo+hUhWABuOo2ZtOfQcKRjJM+YqTLV6rQBpEsgGqYNU4AB9AAY+Nx0rIVETeiZiC2BImztpOQUlFUlwzwQfPwCQpNFPADoy3N9-IIBGItsAbQBdXQEo2xMAXxoaUEhYOHQZbBgECCQ4ZjJKONYObjqUh3TnTLVNCIJiKeMe8Gh4QaRh0fHJwxmEhdUlpxcs9dLyvKq+eutiuDKS94bG5oWTL19gMhiMxhMtudzHMrvY0rdVtlPk9KgFXuF-q1koC9v1DsdwWdptDOLwsaJrvCMq4HsiShV8ok4JgkEQmi0WUQ4LR6NgxoIIVyALyChJwLhwAAGABIqCTgB0eJK4HwAOSqoxwAD0Ws+UGAYA0OGADFVPB4qs8ZtV2hicD5SAFACspPwAJIAETgIoZVXFXlRwBKTogyFNFu0KrWWjtDoFuW9cBd7q9EslAGJZcnPR1lWqNd16Ah0IwAITMOAAMkrcFLuUjPPocH1MCkUFOkModq6RZLMyrNbrsgbpl7jF9AW9QpF4QkkgnwHqwUaU5n60jLbb40lACUeAABWXy3PM-jk9qFpub9tmeJzQKJ9WPenPAqvH4iZ8fprNb0APm5UcmzjeB5UCB8RTA-0ZTlO9OECE98ztJtm2AVsbyJE0YOYDojzgoIEMlZ8F0CW0gI6btTGvbc9zwohcKoXJcxKfVDWNcN00tOBVU4yNMDPD9Om6EDzxEfRE0w018AAUQATRtEwRI0BBBHEyDOxNVUABk3QAZQAFQUmgRP4NC1MFbZTV06TDLIkSAAt+Ps4B+HMyTVQACQAQV0jyjJEsAPKctyNNNAAFQJvN8-z+Xgfh9mUEKDGmVVdIAeR3fTpI9GLHTioRgA4JLLNS-Sd2krySFygURGACB+DATARj8YrzlVABxaS0t0sKvP0t0vK06r4HsogwDQDQIBESaxOICTQs82SwuknctLS9q1va4a4AAIwQGB2EwMBWpSgAhN19JILywu2vaYEUYANFkE7NPO-SADE3WkrScrI3Y+ngETDsoHdlBU-QzxFRsP30dxTGU1TiDh+hTJgWHTEc-hnNcpHTHi2BEtxlGCqKom4Fq+rGuajR0foUbxqgGaZtp3b9sO46ybuh6npZwLgtxiiaHA1BBHAhgyKBPFQROOBhZcmAxZHXl+QgDQgxm00AB0kG1gBafWDcN7XtaM5XHVV9WpoYGHiFNG2iC41VPR4e2bTIs34rVkoNftu22lmogQmqG0-eSfQQgAJi48JtHd+0Va9jWEbR23VWT-RHed9PiDd2ME8tkQGGzohTWLoOQ7TlSU8D4Io88GO47jC3vat1H9Dtsyc6tZ225z2O8-NxPW87kvVV7mvg+0Dvq8j6P10b-OW8LzHsfb1UV5cjPu49HgN5xh3+9MJuh+XpzN9Tvfw+CSfTUv4hZ-r+eB89guGD5rG1-f+yt+452v4zw+Htm4a3-qnUBE8K7gIftGHQC9B6v3xqgZ6qdEGEwdtvF2CVkEHzgS-Je1ssFr1Qdg8uU8x6EPvrXOeWhAHx3gfg6whV2BEJJswruv8d6MNJjg5+wDW6sJYfqbhpDQ5MKvnXGBtDj6vwpg1JqCAWqp1kVTBRNN2FOx3so+RiieFH0XhrLR1M16GNUVfG+qoTE6OgQ3XhJ8GD0wmlNZmF8xqOOmlNH+Gjd6uMZk4jxfdcF8OXj4pm-jR4ON8e4gOIj14hL8dEqhj8aGBLsXddma80lHU8c7TJHNdFANSWzLJqdclmIrqUyhEibF6PoRrLmCBHrYNNPUxp2Sd4tJ5gE2xr8OlNNVL0spZCBmVOobA7p+DVTGyQIbGZuspmmzoQKPwAANIO81kqaWYMEUZuD4ArMjuskqWyK7MGDkknQz89kaFWcEAAzIctqxyyGnJOcQKp65xka1VPs6+FpPA-OqCk1+3zrmRz+cyUFtcgUTJ+bc8FsLoVfKmbMo2OskBGRqUskI18HnTDjjqOAAAqFCJL6BcAAHqbA2ZivZ2KI64pNDcDI+LdTEtJShClVLtg0uZNi+56kNkMBjnaAlbL2VkspfoblHtaXBGCAAFgZaaZgul-aTxFay8VTZOVSsMDyzA2KACsSrVQqrVSHFlRKtUSq5XqmVvK5UADYTVmuSDfJlKxLVivFTqjS+rsUAHYXXEFVW6kOwrTCiuteKSVfr7UGrlQADmDUQUNogzncVyOqyNuoACk0bOUfn9XKgAnCmtNtgM2qizY7XIUdLX5utYW-2xbqjBHLea55Ib-b1o1VaptsbqXxqDtUDtYau2pp7bW2Q2b6AEsbVq5tyRW30oFUc7t47lUbtEBI6tM7p29pzXABdPrKVFuHdfflFlHnbsra8ydyR61bofaIW5Cyo0DttZQVtiq103pfXeidFaRBPtNbekQb6p5eoLYO6VizZXVGNX+lKrr033uA6B1DthIMMA9coaDn7dXfovdUZ1yHNngfMVhkD6H-Y4YjXOzVhG43wYddUIN5Hn3Aao+BzD4G31WhrQ2mDolW3Js42BgDIgeNSb41JgTmb92CdkIexjx6RNFsxUE00CacUMF9Rs3QXFdOAs+Vbb5dLGAGe2EZ-5dLEXmd0-c-TsHDC2YdXchzhcLNysVS5r9wB3O6flV5nTRqrOucoEFo1oWfPBGdf5ojgX4XYsdbF3TQbEsaWi3KgN6XsXJv8x+HLwRE35dLRF0SJWS3lbbZVpLOW221dHUV-2jXTNabsT56o9LWvJEaxHWrznrNuZS5e2rfmRtRbG9UELZnvMJsQ-V7LM3DW1YS1N5Lxmg5pfm2F6+mWl2iEa3lvb3XCtHdsI1srZ3kUov1vMsiXQgA |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment