@ckstack/ck-lib-ras
Version:
ckstack ras/redis library
272 lines (271 loc) • 12.1 kB
TypeScript
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;