Nodejs, MemCacheD 의 실제 프로젝트 에서 의 사용
최근 에 업 데 이 트 된 Cacher 라 이브 러 리 를 먼저 시 도 했 습 니 다. 작가 의 생각 이 아주 좋 습 니 다. express 미들웨어 형식 으로 Cache 의 모든 HTTP 요청 을 시 도 했 지만 실제 사용 해 보 니 오류 율 이 비교적 많 습 니 다.대충 보면 작가 의 소스 코드 는 사용자 정의 res. write 함 수 를 제공 하고 next rounter 가 생 성 한 response 내용 을 캡 처 한 다음 에 body, header 를 모두 cache 로 만 들 었 을 것 입 니 다. 그러나 그 작 가 는 key 2 개 를 사 용 했 습 니 다. 하 나 는 정상 적 인 stale 접미사 로 잘 모 르 고 이렇게 하면 문제 가 많아 서 더 이상 연구 하지 않 았 습 니 다.이 어 조금 성숙 한 memcached 라 이브 러 리 를 시도 했다.
이 라 이브 러 리 가 제공 하 는 기능 은 주로 get / set 작업 에 카 스, increase, decrease, create 입 니 다.작가 가 비교적 주도면밀 하 게 고려 한 것 은 connection 을 관리 한 것 이다.사용 해도 원활 하 지 는 않 지만 어쨌든 사용 할 수 있 습 니 다.(작가 원본 은 connection 관리 에 있어 중대 한 결함 이 있 습 니 다. 저 는 npm 가 설치 한 버 전 을 통 해 그 문 제 를 해결 하지 못 하고 나중에 github 에 달 려 갔습니다 (https://github.com/3rd-Eden/node-memcached), approved pull reqeust 2 개가 있 는 것 을 보고 다운로드 해서 업데이트 하면 훨씬 편 해 집 니 다.)
자, 이제 코드 를 보 겠 습 니 다. 코드 가 간단 합 니 다. 제 가 간단 한 wrapper 를 썼 습 니 다.
var Memcached = require('memcached');
dummy: function dummy(error, ok) { }
module.exports = {
init: function ctor(server, opt) {
console.log("memcached is initialized");
memcached = new Memcached('localhost:11211', { debug: true });
//memcached.on("failure", function (detail) {})
// .on('connect', function (detail) {})
// .on('reconnect', function (detail) {})
// .on('reconnecting', function (detail) {})
// .on('remove', function (detail) {})
// .on('issue', function (detail) {});
},
set: function addToCache(key, val, expire, callback) {
if (!expire) expire = 5 * 60; //sec
if (!callback) callback = dummy;
memcached.set(key, val, expire, callback);
},
get: function getFromCache(key, callback) {
if (!callback) callback = dummy;
memcached.get(key, callback);
},
};
주의 하 세 요. 위의 그 Dummy 는 생략 할 수 없습니다. 만약 에 쓰 지 않 으 면 set 는 작용 하지 않 을 것 입 니 다. 잘못 보고 하지 않 을 것 입 니 다. 처음에 이 문제 에 부 딪 혀 많은 시간 을 낭비 하 였 습 니 다.
위 에서 설명 한 것 은 작가 가 connection 상 태 를 감시 하 는 이벤트 로 요청 을 처리 할 때 server 가 끊 기 면 'issue' 이벤트 가 실 행 됩 니 다. 그리고 memcached server 를 다시 연결 하려 고 합 니 다. 그의 문서 에 따 르 면 최대 재 시도 횟수 를 초과 하면 failure 사건 이 발생 하지만 저 는 캡 처 하지 못 했 습 니 다.또 하나의 문 제 는 서비스 가 실 효 된 후 첫 번 째 요청 은 콜 백 이 실행 되 지 않 기 때문에 작은 문제 가 있 을 수 있다 는 것 이다.또한, 제 웹 서버 는 MemCacheD 가 설치 되 어 있 지 않 은 서버 에서 실 행 될 가능성 이 높 습 니 다. 그러면 매번 server 가 일어나 면 사용자 의 첫 번 째 요청 이 실패 하고 좋 지 않 습 니 다. 그래서 저 는 프로그램 에서 한 번 촉발 합 니 다. 코드 는 다음 과 같 습 니 다. 그 안의 5 는 대상 의 생존 기간 이 5 초 라 는 뜻 입 니 다.주의 하 세 요. 여 기 는 제 가 봉 인 된 memcached 대상 을 사용 합 니 다. 라 이브 러 리 에 있 는 것 이 아 닙 니 다.
http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'));
// Trigger a MemCaheD to test the MemCacheD server
memcahced.set("dummy", "dummy", 5);
});
실제 함수 에서 의 사용:
/*private*/
function getServiceData(partialUrl, params, useCache, callback) {
assert(params.productId, "Missing parameter: productId");
assert(params.weekId, "Missing parameter: weekId");
var url = cerRestApi.getRequestUrl(partialUrl, params);
console.log(url);
if (!useCache) {
cerRestApi.getCall(url, callback);
return;
}
memcahced.get(url, function (errCache, result) {
if (!result) {
cerRestApi.getCall(url, function (err, data) {
if (!err && !errCache) {
memcahced.set(url, data);
}
console.log(data);
callback(err, data);
});
}
else {
callback(false, result);
}
});
}
먼저 cache 에서 데 이 터 를 가 져 오 려 고 시도 합 니 다. 실패 하면 result 가 false 또는 undefined 이면 backend 의 WebService 에서 데 이 터 를 가 져 오고 데이터 가 성공 하면 cache 에 기록 합 니 다.다음 에는 cache 에서 직접 데 이 터 를 얻 을 수 있 습 니 다.
전체적으로 말 하면 MemCacheD 는 사용 하기에 매우 편리 하 다. 바로 nodeJS 의 라 이브 러 리 가 그다지 힘 이 되 지 않 는 다 는 것 이다. 하하.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.