Nginx Lua Module, Shared Memory set 할 때, 순서 바뀌는 문제

Nginx Lua Module을 개발할 때 Shared Memory를 사용했었다. 다음과 같은 함수로 Shared Memory를 다룰 수 있다.

  • ngx.shared.DICT:get
  • ngx.shared.DICT:set
  • ngx.shared.DICT:add

그런데 한 가지 문제가 생겼다. 예를들어 :

이런 결과가 나타나길 기대했지만,

실제로 이런 결과가 나타났다.

순서는 그대로 두고, Shared Memory의 값이나 expires를 변경하고 싶었는데, 그렇게 되지 않았다.

replace라는 메소드가 있어서 확인해봤다.

set과 비슷하지만, 키가 존재할 때 ngx.shared.DICT 딕셔너리에 key-value 쌍을 보관한다. 이미 만료되었거나 딕셔너리에 키가 존재하지 않으면 success 리턴 값은 false가 되고, err 리턴 값은 “not found”가 된다고 했다. 따라서 replace는 해결 방법은 아니다.

모든 메소드를 확인해봤는데, 결국 해결방법을 찾을 수 없었다. 그래서 구조를 다음과 같이 바꿨다.

  • DICT : 만료시간도 주고, 값을 set 할 수 있는 공유 메모리
  • DICT_IDX : add만 하는 공유 메모리. 오직 delete만 할 수 있다.

이렇게 DICT_IDX라고, 새로운 공유 메모리를 추가하는 방식으로 해결했다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다