| 123456789101112131415161718192021 |
- using Application.Abstractions.Data;
- namespace Application.Abstractions.Stocks;
- /// <summary>트렌딩 1행 — 종목 코드·점수(랭킹 원점수).</summary>
- public sealed record StockTrendingEntry(string StockCode, int Score);
- /// <summary>
- /// 종목 가상보드 트렌딩 랭킹 Redis Sorted Set 캐시 (d2 §④·§⑥).
- /// 최근 24h PostStockTag 언급량 + StockBoardStats 총 글 수를 가중 합산한 점수로 랭크한다.
- /// 캐시 미스 시 DB 로 재시드(TTL ~10분) — RedisChatLeaderboard/PaperLeaderboardCache 패턴 복제.
- /// 종목명 조인은 호출 핸들러가 수행(코드→점수만 캐시).
- /// </summary>
- public interface IStockBoardTrendingCache
- {
- /// <summary>상위 count 개의 (코드, 점수)를 내림차순으로 반환. 캐시 미스 시 DB 재시드. 데이터 없으면 빈 목록.</summary>
- Task<IReadOnlyList<StockTrendingEntry>> GetTopAsync(int count, IAppDbContext db, CancellationToken ct = default);
- /// <summary>캐시 무효화 — 다음 조회가 최신 스냅샷으로 재시드.</summary>
- Task InvalidateAsync(CancellationToken ct = default);
- }
|