특정 시간 제한 작업을 수행할 때는 결과에 대한 피드백이 필요합니다. 예를 들어, 주문은 만료 후 자동으로 삭제되고, 며칠 후 자동으로 칭찬되며, 미지급 주문은 15분 후에 종료되는 등, 이들은 시간 제한 작업 프레임워크나 폴링 방법을 통해 완료할 수 있습니다. 이 글은 Redis 고급 기능 캐시 만료 이벤트 알림 메커니즘과 .NET/C# 코드를 결합하여 비즈니스 요구사항을 완료합니다.
소개
사용 시나리오: 1. 결제 비즈니스에서는 미지급 주문이 자동으로 종료됩니다 2. 캐시 만료 알림
일반적으로 타이밍 서비스를 이용해 미지급 주문의 자동 종료를 처리할 수 있습니다. 예를 들어, 미지급 및 만료된 주문을 처리하기 위해 매분 인터페이스를 호출하는 식입니다. 하지만 이 경우 컴퓨터 성능을 소모하게 되며, 주문이 없더라도 매분 처리되며, 주문 처리 최대 지연 시간은 59초가 되고, 타이밍 서비스는 항상 이용 가능해야 합니다
그렇다면 지연 처리가 적은 미지급 및 만료된 주문이 있을 때만 Redis의 캐시 만료 메커니즘을 이용해 구독을 푸시할 수 있을까요?
Redis 구독
redis.conf 설정 파일에서 notify-keyspace-events Ex를 수정하세요
컵 자원을 절약하기 위해 이벤트 알림은 기본적으로 켜져 있지 않으며, 기본값은 notify-keyspace-events입니다
# K 키 공간 알림, <db>접두사가 __keyspace@__ # E 키 이벤트 알림, <db>접두사가 __keysevent@__ # g del, expipre, rename 및 기타 일반적인 명령어들, ... # $string 명령 # 명령 목록 #s 명령어 설정 # h 해시 명령 # Z 명령 명령 설정 # x 만료 이벤트 (키가 만료될 때마다 생성됨) # e 퇴출 이벤트 (메모리가 가득 찰 상태에서 키가 삭제될 때 생성됨) # g$lshzxe 별명, 그래서 "AKE"는 모든 사건을 의미한다
notify-keyspace-events "KX"는 키의 무효화 이벤트를 모니터링하고 싶다는 뜻입니다. 매개변수를 AKE 문자열로 설정하면 모든 종류의 알림을 보내야 합니다.
저는 제 컴퓨터에 redis를 서비스로 설치하고, redis.windows.conf 설정 파일을 수정했으며, 효과를 내려면 redis 서비스 구성을 재시작해야 했습니다.
.NET/C# 코드 예시
패키지는 다음과 같습니다:
호출
redis-cli로 캐시를 작성해 봅시다.
사실, redis-cli를 통해 다음 명령을 실행하면 캐시 만료 알림을 구독할 수도 있습니다:
N개의 클라이언트가 캐시 만료 이벤트 알림에 가입하면, redis는 아래 그림과 같이 한 클라이언트가 아니라 N명의 사용자에게 동일한 만료 메시지를 알립니다:
C# 소스 코드 다운로드:
https://down.itsvse.com/item/17856.html
요약
Redis 퍼블/구독은 신뢰할 수 없는 메시지 메커니즘입니다. 정보를 저장하지 않고, 온라인만 전달하며, 승인 확인 메커니즘도 없고 구독 세그먼트만 전달됩니다. 그래서 Keyspace Notifications 역시 신뢰할 수 없는 알림 시스템입니다. 만약 우리 비즈니스가 좋은 신뢰성을 필요로 한다면 이 시스템은 최선의 선택이 아닙니다. 일반적으로 우리는 이를 구현하기 위해 RabbitMQ의 DLX(Dead-Letter-Exchange)를 추천하는데, 이는 지연 큐 기능입니다. 단지 Redis의 솔루션이 구현이 쉽고 운영 비용이 적게 들기 때문입니다. 높은 신뢰성이 필요하지 않은 기업에게는 여전히 매우 편리합니다. |