Back/Server

Nodejs Redis 활용

Nodejs Redis 활용

사용한 예시

exports.diaryMainWeightUpdate = async (req, res, next) => {
    try {
        const member = res.locals.member;
        const { weight, created_at } = req.body;
        const monthFirstDay = moment(created_at).startOf('month').format('YYYY-MM-DD');

        const connection = await mySqlDbRds.getConnection(async conn => conn);
        const [weightUpdate] = await connection.query(query.weightUpdate, [weight, member.member_idx, created_at]);
        connection.release();

        redisClient.hgetall(`mainDisplayOne&${member.member_idx}&${created_at}`, async (err, mainDisplayOne ) => {
            try {
                if (mainDisplayOne === null) {
                    redisClient.expire(`statisticsMyChangeDisplayWeek&${member.member_idx}&${created_at}`, 1);
                    redisClient.expire(`statisticsMyChangeDisplayMonth&${member.member_idx}&${monthFirstDay}`, 1);
                    return res.status(200).json({ msg : "success" });
                } else {
                    redisClient.hmset(`mainDisplayOne&${member.member_idx}&${created_at}`, "today_weight", weight );
                    redisClient.expire(`mainDisplayOne&${member.member_idx}&${created_at}`, 60);
                    redisClient.expire(`statisticsMyChangeDisplayWeek&${member.member_idx}&${created_at}`, 1);
                    redisClient.expire(`statisticsMyChangeDisplayMonth&${member.member_idx}&${monthFirstDay}`, 1);
                    return res.status(200).json({ msg : "success" })
                }
            } catch (err) {
                console.log(err);
                return res.status(400).json({ msg : "redis_fail" });
            }
            })
    } catch (err) {
        console.log(err);
        return res.status(400).json({ msg : "fail" });
}};

 

redisClient를 import해오고,

 

hgtetall로 json형식으로 저장한다.

db작업이 많은 부분인데, 매번 api호출로 불러들이는 것보다 한번 객체로 저장해

캐쉬처리를 할 수 있는 부분은 캐쉬로 처리하기 위해 이렇게 했다.

redis서버는 처음엔 서버와 같은 곳을 두다가 지금은 AWS Elastic Cash를 이용해서 연결 시키고 있다.

 

다만 delete가 뭔 짓을 해도 되지 않아서,

expire를 1초로 두는 식으로 삭제 시키고 있다.....

위의 예시는 체중을 업데이트하는데, 체중과 관련된 레디스에 저장된 객체들을 삭제하거나,

체중과 관련된 키값만 찾아내서 수정 하고, 다시 set으로 시간을 셋팅하는 식이다.

왜 삭제와 수정이 따로 있냐면, json의 키값 하나를 수정하기엔 계산을 해야하고 복잡한 부분이 있어서,

 

프로젝트 시간은 한정되어 있고, db작업이 많은 부분은 키값 하나를 수정시켜 내지만,

별로 캐싱처리가 빡세지 않는 부분은 expire로 삭제 시키고, 다시 db작업을 하게 했다.

'Back > Server' 카테고리의 다른 글

몽고DB 아틀라스 연결  (0) 2021.10.09
AWS 로드밸런스 ACL 적용 EC2 WAF, ACL  (0) 2021.10.07
AWS EC2 HTTPS  (0) 2021.10.05
리눅스, Node.js, mongoDB 설치 명령어  (0) 2021.03.21
파일 업로드  (0) 2021.03.04