@ckstack/ck-lib-ras
Version:
ckstack ras/redis library
259 lines (258 loc) • 11 kB
TypeScript
import express from 'express';
import Sequelize, { Transaction } from 'sequelize';
import { CkType, CkValue } from '@ckstack/ck-lib';
/**
* Redis 접근은 CkRedis 를 사용 한다.
* AOP 기능을 지원 하기 위해서 별도로 정의된 데이터베이스 처리 함수.
* 주로 express router 가 timeout 으로 종료 되었을 때, 더 이상 실행 되지 않게 하기 위해서 사용 된다.
* AOP 기능을 지원 하는 함수는 함수 이름의 제일 뒤에 '_AOP' 를 붙여야 한다. 함수명 제일 뒤에 붙는 '_AOP' 값으로 AOP 지원이 설정 된다.
* AOP 함수는 파라미터로 첫번째는 req: express.Request, 두번째는 res: express.Response 를 받아야 한다.
*/
declare class CkWebRedis {
/**
* redis 명령어를 실행 시킨다.
* @param req
* @param res
* @param clientNo
* @param cmd
* @param params
* @throws CkError
*/
static doCommand_AOP(req: express.Request, res: express.Response, clientNo: number, cmd: string, params: Array<any>): Promise<any>;
/**
* 저장된 값을 삭제 한다. key equal 검색해서 삭제 임.
* @param req
* @param res
* @param clientNo
* @param key
* @throws CkError
*/
static remove_AOP(req: express.Request, res: express.Response, clientNo: number, key: string): Promise<number>;
/**
* 키 스트링 패턴 값으로 저장된 여러 개를 삭제 한다. key 는 pattern 검색(ckp4.* 이면 ckp4.a, ckp4.a.b 등등이 삭제 된다.).
* 패턴으로 삭제 하는 것이기 때문에, 대량의 메시지를 삭제 하면 속도가 느려진다. 사용시 주의 해야 한다.
* @param req
* @param res
* @param clientNo
* @param key
* @throws CkError
*/
static removeByPattern_AOP(req: express.Request, res: express.Response, clientNo: number, key: string): Promise<number>;
/**
* ras 에 right push 한다. 주로 ras script 실행 용도로 사용 한다.
* @param req
* @param res
* @param clientNo
* @param appId
* @param eventType
* @param userData
* @throws CkError
*/
static rPush_AOP(req: express.Request, res: express.Response, clientNo: number, appId: string, eventType: string, userData: any): Promise<any>;
/**
* Upsert hash data.
* hash 의 개별 항목 값으로 object 를 저장하고 싶으면, value 값을 다음 형태로 주면 된다.
*
* {
* abc: {
* hello: 'world'
* }
* }
*
* 이런 형태를 저장하면 hash row key 로 abc 하고, value 로 object 를 가지는 값이 추가 된다.
* @param req
* @param res
* @param clientNo
* @param key
* @param value
* @throws CkError
*/
static upsertHash_AOP(req: express.Request, res: express.Response, clientNo: number, key: string, value: any): Promise<string>;
/**
* Upsert key and value data. ttl is in seconds.
* value is a string value.
* @param req
* @param res
* @param clientNo
* @param key
* @param value
* @param ttl
* @throws CkError
*/
static upsertValue_AOP(req: express.Request, res: express.Response, clientNo: number, key: string, value: any, ttl?: number): Promise<string | undefined>;
/**
* 전체 hash value 를 가져 온다.
* 만일 hash 값이 없으면 null 을 리턴 한다.
* @param req
* @param res
* @param clientNo
* @param hashKey
* @throws CkError
*/
static getHashValue_AOP(req: express.Request, res: express.Response, clientNo: number, hashKey: string): Promise<{
[key: string]: any;
} | null>;
/**
* hash 로 저장된 내역의 key, value 목록을 구한다.(hscan 대용품임)
* 저장되어 있는 내역을 array 로 리턴 한다. array 내에는 다음과 같은 object 가 존재 한다.
* {
* key: row 의 key 값,
* value : row 의 value 값
* }
*
* 만일 row key 로 필터링 하지 않고 모든 row 를 구한다고 하면 rowKey 를 null 로 주면 된다.
* 대량의 메시지를 처리 할 수 있기 때문에, 사용시 주의 하도록 한다.
* @param req
* @param res
* @param clientNo
* @param hashKey
* @param rowKey
* @param isJSON
* @throws CkError
*/
/** @deprecated */
static getHashValues_AOP(req: express.Request, res: express.Response, clientNo: number, hashKey: string, rowKey: string, isJSON?: boolean): Promise<Array<CkType.IRedisHashValue> | null>;
/**
* 저장된 key, value 의 카운트를 구한다. key 는 패턴으로 사용 한다.
* @param req
* @param res
* @param clientNo
* @param key
* @throws CkError
*/
static countValue_AOP(req: express.Request, res: express.Response, clientNo: number, key: string): Promise<number>;
/**
* key, value 값에 대해서 value 값 조회. key equal 조회임.
* 찾은 값을 json 으로 바꿔서 받으려면 isJSON 파라미터를 true 로 사용 하면 된다.
* 조회된 값이 없으면 null 이 resolve 된다.
* @param req
* @param res
* @param clientNo
* @param key
* @param isJSON
* @throws CkError
*/
static getValue_AOP(req: express.Request, res: express.Response, clientNo: number, key: string, isJSON?: boolean): Promise<string | null | {
[key: string]: any;
}>;
/**
* key, value 로 저장된 값에 대해서 value 값 조회. key 는 패턴으로 사용 한다.
* asterica 검색을 지원하며, isDeleteOther 값에 따라서 검색하여 사용된 값 외의 나머지 값들을 삭제 한다.
* 선택되는 값은 검색 결과에 나오는 가장 위에 있는 값을 선택 한다.
* 검색된 결과가 없으면 null 을 리턴 한다.
* @param req
* @param res
* @param clientNo
* @param key
* @param isJSON
* @param isDeleteOther
* @throws CkError
*/
static getValueOnlyOne_AOP(req: express.Request, res: express.Response, clientNo: number, key: string, isJSON?: boolean, isDeleteOther?: boolean): Promise<CkType.IRedisHashValue | null>;
/**
* expire 시간을 설정 한다. sec 로 expire 시간이 설정 되며, 초 단위 이다.
* key 는 equal 비교 된다.
* @param req
* @param res
* @param clientNo
* @param key
* @param sec
* @throws CkError
*/
static setExpire_AOP(req: express.Request, res: express.Response, clientNo: number, key: string, sec: number): Promise<any>;
/**
* expire 시간을 확인 한다. 초 단위 값을 리턴 한다.
* key 는 equal 비교 된다.
* @param req
* @param res
* @param clientNo
* @param key
* @throws CkError
*/
static getTTL_AOP(req: express.Request, res: express.Response, clientNo: number, key: string): 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 req
* @param res
* @param clientNo
* @param evtType
* @param fn
*/
static setEvent_AOP(req: express.Request, res: express.Response, clientNo: number, evtType: CkValue.REDIS_EVENT, fn: () => void): void;
/**
* redis 의 특정 topic 으로 메시지를 publish 한다.
* @param req
* @param res
* @param clientNo
* @param topic
* @param msg
*/
static publish_AOP(req: express.Request, res: express.Response, clientNo: number, topic: string, msg: string): void;
/**
* redis 의 특정 topic 으로 subscribe 한다.
* @param req
* @param res
* @param clientNo
* @param topic
*/
static subscribe_AOP(req: express.Request, res: express.Response, clientNo: number, topic: 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 req
* @param res
* @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 order DB table select 시에 order. 데이터는 여러줄 존재하는데 유효한 데이터를 order 로 뽑을 수 있을때 사용
* @throws CkError
*/
static getCacheSingleRow_AOP<T, U>(req: express.Request, res: express.Response, cacheKeyPrefix: string, cacheCustomKey: string, redisClientNum: number, TCreator: {
new (): T;
}, dbFilter: {
[key: string]: any;
}, cacheAliveSec?: number, transaction?: Transaction, isJSON?: boolean, order?: Sequelize.Order): Promise<string | U | null>;
/**
* redis 를 이용한 cache 데이터를 구한다. DB 검색 결과 row 여러 줄을 캐시.
* 리턴값인 U는 Array 타입으로 호출 된다.
* 아래와 같은 형태로 호출 될 것임.
* CkWebRedis.getCacheMultiRow<TbAppVersion, Array<IFilterAppVersion>>(req, res, ...
* @param req
* @param res
* @param cacheKeyPrefix
* @param cacheCustomKey
* @param redisClientNum
* @param TCreator
* @param dbFilter
* @param cacheAliveSec
* @param transaction
* @param isJSON
* @param order
* @throws CkError
*/
static getCacheMultiRow_AOP<T, U>(req: express.Request, res: express.Response, cacheKeyPrefix: string, cacheCustomKey: string, redisClientNum: number, TCreator: {
new (): T;
}, dbFilter: {
[key: string]: any;
}, cacheAliveSec?: number, transaction?: Transaction, isJSON?: boolean, order?: Sequelize.Order): Promise<string | U | null>;
}
export default CkWebRedis;