Skip to content

Instantly share code, notes, and snippets.

@Luxcium
Last active August 31, 2022 14:54
Show Gist options
  • Save Luxcium/2db2714e785ed0e2f867065f0b0dbef0 to your computer and use it in GitHub Desktop.
Save Luxcium/2db2714e785ed0e2f867065f0b0dbef0 to your computer and use it in GitHub Desktop.
Naïve approach to redis keys
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