UNPKG

@ckstack/ck-lib-ras

Version:

ckstack ras/redis library

272 lines (271 loc) 12.1 kB
import Sequelize, { Transaction } from 'sequelize'; import { CkType, CkValue } from '@ckstack/ck-lib'; declare class CkRedis { private static LHD; private static REDIS_INFO; private static connected; private static REDIS_CLIENT; /** * string 을 리턴하면 string 값이 에러 코드 * boolean 을 리턴 하고 true 이면 valid check 성공 * @param clientNo * @param reqIpAndLhdAndHttpInfo * @private */ private static isValidConnect; /** * 연결할 redis 정보를 설정 한다. * @param redisInfo {Array<CkType.IRedisConfig>} 연결할 redis 서버 정보 */ static init(redisInfo: Array<CkType.IRedisConfig>): void; /** * redis 에 연결 한다. */ static connect(): boolean; /** * redis 명령어를 실행 시킨다. * @param clientNo * @param cmd * @param params * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static doCommand(clientNo: number, cmd: string, params: Array<any>, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<any>; /** * 저장된 값을 삭제 한다. key equal 검색해서 삭제 임. * @param clientNo * @param key * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static remove(clientNo: number, key: string, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<number>; /** * 키 스트링 패턴 값으로 저장된 여러 개를 삭제 한다. key 는 pattern 검색(ckp4.* 이면 ckp4.a, ckp4.a.b 등등이 삭제 된다.) * 대량의 메시지를 처리 해서 속도가 느려 질 수 있기 때문에, 사용시 주의 한다. * @param clientNo * @param key * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError * @deprecated 내부에서 for-loop 를 돌기 때문에, 속도가 느릴 수 있음. CkRedis.remove 함수를 사용해서 단일 삭제 하도록 한다. */ static removeByPattern(clientNo: number, key: string, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<number>; /** * ras 에 right push 한다. 주로 ras script 실행 용도로 사용 한다. * @param clientNo * @param appId * @param eventType * @param userData * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static rPush(clientNo: number, appId: string, eventType: string, userData: any, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<any>; /** * Upsert hash data. * hash 의 개별 항목 값으로 object 를 저장하고 싶으면, value 값을 다음 형태로 주면 된다. * * { * abc: { * hello: 'world' * } * } * * 이런 형태를 저장하면 hash row key 로 abc 하고, value 로 object 를 가지는 값이 추가 된다. * @param clientNo * @param key * @param value * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static upsertHash(clientNo: number, key: string, value: any, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<string>; /** * Upsert key and value data. ttl is in seconds. * value is a string value. * @param clientNo * @param key * @param value * @param ttl * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static upsertValue(clientNo: number, key: string, value: any, ttl?: number, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<string | undefined>; /** * 전체 hash value 를 가져 온다. * 만일 hash 값이 없으면 null 을 리턴 한다. * @param clientNo * @param hashKey * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static getHashValue(clientNo: number, hashKey: string, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<{ [key: string]: any; } | null>; /** * hash 로 저장된 내역의 key, value 목록을 구한다.(hscan 대용품임) * 저장되어 있는 내역을 array 로 리턴 한다. array 내에는 다음과 같은 object 가 존재 한다. * { * key: row 의 key 값, * value : row 의 value 값 * } * * 만일 row key 로 필터링 하지 않고 모든 row 를 구한다고 하면 rowKey 를 null 로 주면 된다. * 대량의 메시지를 처리 할 수 있기 때문에, 사용시 주의 한다. * @param clientNo * @param hashKey * @param rowKey * @param isJSON * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError * @deprecated 내부에서 loop 를 돌기 때문에 속도가 느릴 수 있다. getValue 를 사용 하도록 한다. */ static getHashValues(clientNo: number, hashKey: string, rowKey: string, isJSON?: boolean, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<Array<CkType.IRedisHashValue> | null>; /** * 저장된 key, value 의 카운트를 구한다. key 는 패턴으로 사용 한다. * @param clientNo * @param key * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError * @deprecated 내부에서 loop 를 돌기 때문에 속도가 느릴 수 있다. 더 이상 사용 하지 않는다. */ static countValue(clientNo: number, key: string, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<number>; /** * key, value 값에 대해서 value 값 조회. key equal 조회임. * 찾은 값을 json 으로 바꿔서 받으려면 isJSON 파라미터를 true 로 사용 하면 된다. * 조회된 값이 없으면 null 이 resolve 된다. * @param clientNo * @param key * @param isJSON * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static getValue(clientNo: number, key: string, isJSON?: boolean, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<string | null | { [key: string]: any; }>; /** * key, value 로 저장된 값에 대해서 value 값 조회. key 는 패턴으로 사용 한다. * asterica 검색을 지원하며, isDeleteOther 값에 따라서 검색하여 사용된 값 외의 나머지 값들을 삭제 한다. * 선택되는 값은 검색 결과에 나오는 가장 위에 있는 값을 선택 한다. * 검색된 결과가 없으면 null 을 리턴 한다. * @param clientNo * @param key * @param isJSON * @param isDeleteOther * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError * @deprecated 내부에서 loop 를 돌기 때문에 속도가 느릴 수 있다. getValue 를 사용 하도록 한다. */ static getValueOnlyOne(clientNo: number, key: string, isJSON?: boolean, isDeleteOther?: boolean, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<CkType.IRedisHashValue | null>; /** * expire 시간을 설정 한다. sec 로 expire 시간이 설정 되며, 초 단위 이다. * key 는 equal 비교 된다. * @param clientNo * @param key * @param sec * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static setExpire(clientNo: number, key: string, sec: number, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<any>; /** * expire 시간을 확인 한다. 초 단위 값을 리턴 한다. * key 는 equal 비교 된다. * @param clientNo * @param key * @param reqIpAndLhdAndHttpInfo * @param lang * @throws CkError */ static getTTL(clientNo: number, key: string, reqIpAndLhdAndHttpInfo?: string, lang?: CkValue.SUPPORT_LANG | undefined): Promise<any>; /** * redis event 처리 로직을 등록 한다. * 이벤트에 따라 이벤트 처리 함수는 다음과 같다. * * - message, message_buffer : fn(channel: string, message: string) => void * - pmessage, pmessage_buffer : fn(pattern: string, channel: string, message: string) => void * - subscribe, unsubscribe : fn(channel: string, count: number) => void * - psubscribe, punsubscribe : fn(pattern: string, count: number) => void * @param clientNo * @param evtType * @param fn * @param reqIpAndLhdAndHttpInfo */ static setEvent(clientNo: number, evtType: CkValue.REDIS_EVENT, fn: () => void, reqIpAndLhdAndHttpInfo?: string): void; /** * redis 의 특정 topic 으로 메시지를 publish 한다. * @param clientNo * @param topic * @param msg * @param reqIpAndLhdAndHttpInfo */ static publish(clientNo: number, topic: string, msg: string, reqIpAndLhdAndHttpInfo?: string): void; /** * redis 의 특정 topic 으로 subscribe 한다. * @param clientNo * @param topic * @param reqIpAndLhdAndHttpInfo */ static subscribe(clientNo: number, topic: string, reqIpAndLhdAndHttpInfo?: string): void; /** * redis 를 이용한 cache 데이터를 구한다. DB 검색 결과 row 한 줄을 캐시. * 만일 redis 에 캐시 데이터가 없다면, rdbms 에서 데이터를 읽어 cache 를 생성 한다. * T는 cache로 만들 데이터가 들어 있는 테이블 sequelize model 을 넣고, U는 리턴 받을 interface 타입을 넣는다. * * 캐시키는 다음과 같이 된다. * cacheKeyPrefix + '.' + md5(cacheCustomKey) * * cache 내용이 json 이면 isJSON 을 true 로 설정 한다. * * 에러 발생시 error 를 throw 한다. * @param reqIpAndLhdAndHttpInfo 로그키 * @param cacheKeyPrefix 캐시키 prefix * @param cacheCustomKey unique 한 캐시 키 * @param redisClientNum 캐시가 저장되는 redis client number. client 로 db number 구분됨. * @param TCreator 캐시 데이터로 만들 db table model * @param dbFilter 캐시 데이터로 만들 단일 row select 조건 * @param cacheAliveSec 캐시가 살아 있을 시간. 초 단위 * @param transaction DB transaction object * @param isJSON 캐시 데이터가 json 인지 여부 * @param lang 언어 코드 * @param order DB table select 시에 order. 데이터는 여러줄 존재하는데 유효한 데이터를 order 로 뽑을 수 있을때 사용 * @throws CkError */ static getCacheSingleRow<T, U>(reqIpAndLhdAndHttpInfo: string, cacheKeyPrefix: string, cacheCustomKey: string, redisClientNum: number, TCreator: { new (): T; }, dbFilter: { [key: string]: any; }, cacheAliveSec?: number, transaction?: Transaction, isJSON?: boolean, lang?: CkValue.SUPPORT_LANG, order?: Sequelize.Order): Promise<string | U | null>; /** * redis 를 이용한 cache 데이터를 구한다. DB 검색 결과 row 여러 줄을 캐시. * 리턴값인 U는 Array 타입으로 호출 된다. * 아래와 같은 형태로 호출 될 것임. * CkRedis.getCacheMultiRow<TbAppVersion, Array<IFilterAppVersion>>(lhd, ... * @param reqIpAndLhdAndHttpInfo * @param cacheKeyPrefix * @param cacheCustomKey * @param redisClientNum * @param TCreator * @param dbFilter * @param cacheAliveSec * @param transaction * @param isJSON * @param lang * @param order * @throws CkError */ static getCacheMultiRow<T, U>(reqIpAndLhdAndHttpInfo: string, cacheKeyPrefix: string, cacheCustomKey: string, redisClientNum: number, TCreator: { new (): T; }, dbFilter: { [key: string]: any; }, cacheAliveSec?: number, transaction?: Transaction, isJSON?: boolean, lang?: CkValue.SUPPORT_LANG, order?: Sequelize.Order): Promise<string | U | null>; } export default CkRedis;