오늘날에는 요청에 응답하는 속도와 효율성이 무엇보다 중요합니다. 온라인 상점, 소셜 네트워크, 은행 서비스 등 대규모의 트래픽이 많은 시스템은 상당한 양의 데이터와 사용자 요청에 직면합니다. 이러한 높은 수요는 서버와 데이터베이스에 큰 부담을 줄 뿐만 아니라 사용자 경험에도 큰 영향을 미칠 수 있습니다. 이러한 경우 캐싱 시스템을 구현하는 것은 성능을 향상하고 리소스 부하를 줄이는 효과적인 솔루션이 될 수 있습니다.
이 기사에서는 더 빠른 데이터 액세스를 위해 해시 맵과 AVL 트리의 조합을 활용하는 고급 캐싱 시스템 구현에 대해 설명합니다. 또한 데이터 만료 관리, 자동화된 데이터 삭제, 강화된 보안을 위한 입력 검증을 위해 TTL(Time to Live) 메커니즘을 사용합니다. 이 스마트하고 안전한 캐싱 시스템은 대규모 프로젝트의 필수 요구 사항을 충족하며 사용자의 서비스 속도와 효율성을 향상시키는 강력한 솔루션을 제공합니다.
데이터 만료를 관리하기 위해 TTL 필드를 사용하여 AVL 클래스를 확장합니다. 이 필드는 각 데이터 항목의 만료 시간을 지정하고 만료된 데이터를 자동으로 삭제합니다.
// src/utils/avltree.ts class AVLNode { key: string; value: any; ttl: number; // Time to live height: number; left: AVLNode | null; right: AVLNode | null; constructor(key: string, value: any, ttl: number) { this.key = key; this.value = value; this.ttl = Date.now() + ttl; // Expiry time this.height = 1; this.left = null; this.right = null; } isExpired(): boolean { return Date.now() > this.ttl; } } export class AVLTree { private root: AVLNode | null; constructor() { this.root = null; } private getHeight(node: AVLNode | null): number { return node ? node.height : 0; } private updateHeight(node: AVLNode): void { node.height = 1 + Math.max(this.getHeight(node.left), this.getHeight(node.right)); } private rotateRight(y: AVLNode): AVLNode { const x = y.left!; y.left = x.right; x.right = y; this.updateHeight(y); this.updateHeight(x); return x; } private rotateLeft(x: AVLNode): AVLNode { const y = x.right!; x.right = y.left; y.left = x; this.updateHeight(x); this.updateHeight(y); return y; } private getBalance(node: AVLNode): number { return node ? this.getHeight(node.left) - this.getHeight(node.right) : 0; } insert(key: string, value: any, ttl: number): void { this.root = this.insertNode(this.root, key, value, ttl); } private insertNode(node: AVLNode | null, key: string, value: any, ttl: number): AVLNode { if (!node) return new AVLNode(key, value, ttl); if (key < node.key) { node.left = this.insertNode(node.left, key, value, ttl); } else if (key > node.key) { node.right = this.insertNode(node.right, key, value, ttl); } else { node.value = value; node.ttl = Date.now() + ttl; return node; } this.updateHeight(node); const balance = this.getBalance(node); if (balance > 1 && key < node.left!.key) return this.rotateRight(node); if (balance < -1 && key > node.right!.key) return this.rotateLeft(node); if (balance > 1 && key > node.left!.key) { node.left = this.rotateLeft(node.left!); return this.rotateRight(node); } if (balance < -1 && key < node.right!.key) { node.right = this.rotateRight(node.right!); return this.rotateLeft(node); } return node; } search(key: string): any { let node = this.root; while (node) { if (node.isExpired()) { this.delete(node.key); return null; } if (key === node.key) return node.value; node = key < node.key ? node.left : node.right; } return null; } delete(key: string): void { this.root = this.deleteNode(this.root, key); } private deleteNode(node: AVLNode | null, key: string): AVLNode | null { if (!node) return null; if (key < node.key) { node.left = this.deleteNode(node.left, key); } else if (key > node.key) { node.right = this.deleteNode(node.right, key); } else { if (!node.left || !node.right) return node.left || node.right; let minLargerNode = node.right; while (minLargerNode.left) minLargerNode = minLargerNode.left; node.key = minLargerNode.key; node.value = minLargerNode.value; node.ttl = minLargerNode.ttl; node.right = this.deleteNode(node.right, minLargerNode.key); } this.updateHeight(node); const balance = this.getBalance(node); if (balance > 1 && this.getBalance(node.left!) >= 0) return this.rotateRight(node); if (balance < -1 && this.getBalance(node.right!) <= 0) return this.rotateLeft(node); if (balance > 1 && this.getBalance(node.left!) < 0) { node.left = this.rotateLeft(node.left!); return this.rotateRight(node); } if (balance < -1 && this.getBalance(node.right!) > 0) { node.right = this.rotateRight(node.right!); return this.rotateLeft(node); } return node; } }
이 서비스는 AVLTree 클래스를 사용하여 데이터를 효율적이고 안전하게 관리합니다. 여기에는 데이터 보안을 위한 기본 검증 메커니즘이 포함되어 있습니다.
// src/cache/cache.service.ts import { Injectable, UnauthorizedException } from '@nestjs/common'; import { AVLTree } from '../utils/avltree'; @Injectable() export class CacheService { private avlTree: AVLTree; private authorizedTokens: Set<string> = new Set(['your_authorized_token']); // Simple validation example constructor() { this.avlTree = new AVLTree(); } validateToken(token: string): void { if (!this.authorizedTokens.has(token)) { throw new UnauthorizedException('Invalid access token'); } } set(key: string, value: any, ttl: number, token: string): void { this.validateToken(token); this.avlTree.insert(key, value, ttl); } get(key: string, token: string): any { this.validateToken(token); return this.avlTree.search(key); } delete(key: string, token: string): void { this.validateToken(token); this.avlTree.delete(key); } }
API 컨트롤러는 설정, 가져오기, 삭제 메소드를 사용하여 데이터를 안전하게 저장하고 검색합니다.
// src/cache/cache.controller.ts import { Controller, Get, Post, Delete, Body, Param, Query } from '@nestjs/common'; import { CacheService } from './cache.service'; @Controller('cache') export class CacheController { constructor(private readonly cacheService: CacheService) {} @Post('set') setCache(@Body() body: { key: string; value: any; ttl: number; token: string }) { this.cacheService.set(body.key, body.value, body.ttl, body.token); return { message: 'Data cached successfully' }; } @Get('get/:key') getCache(@Param('key') key: string, @Query('token') token: string) { const value = this.cacheService.get(key, token); return value ? { value } : { message: 'Key not found or expired' }; } @Delete('delete/:key') deleteCache(@Param('key') key: string, @Query('token') token: string) { this.cacheService.delete(key); return { message: 'Key deleted successfully' }; } }
인증 시스템을 위한 세션 관리:
예: 은행 및 금융 시스템
요청 부하를 줄이기 위한 API 캐싱:
예: 날씨 앱 및 환전 웹사이트.
온라인 플랫폼의 실시간 사용자 상태 저장:
예: WhatsApp, Telegram과 같은 메시징 앱.
온라인 상점의 제품 데이터 저장:
예: Amazon과 같이 트래픽이 많은 전자상거래 플랫폼.
이러한 예는 이 캐싱 시스템이 데이터베이스와 서버 로드를 크게 줄여 사용자의 응답 시간을 향상시킬 수 있음을 보여줍니다.
이 기사에서는 AVL 트리와 해시 맵을 결합하여 빠른 데이터 액세스와 서버 성능 최적화를 지원하는 고급 캐싱 시스템을 설계하고 구현했습니다. TTL 메커니즘은 자동 데이터 만료 관리를 제공하는 동시에 토큰 검증은 적절한 보안을 보장합니다.
이 지능형 캐싱 시스템은 효율적이고 유연하며 동적이며 민감한 데이터가 있는 대규모 애플리케이션에 적합하며 분산 아키텍처의 확장 가능한 요구 사항을 지원합니다.
위 내용은 지연을 종식시키다: 수요가 많은 시스템을 위한 고급 보안 캐싱 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!