在当今世界,响应请求的速度和效率至关重要。在线商店、社交网络和银行服务等大规模、高流量的系统面临着大量的数据和用户请求。这种高要求不仅会给服务器和数据库带来沉重的负载,还会显着影响用户体验。在这种情况下,实施缓存系统可以是提高性能和减少资源负载的有效解决方案。
本文讨论了如何实现高级缓存系统,该系统利用哈希图和 AVL 树的组合来实现更快的数据访问。此外,它还采用 TTL(生存时间)机制进行数据过期管理和自动数据删除,以及输入验证以增强安全性。这种智能、安全的缓存系统满足大型项目的基本需求,为提高用户的服务速度和效率提供了强大的解决方案。
为了管理数据过期,我们使用 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 控制器使用 set、get 和 delete 方法来安全地存储和检索数据。
// 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 等消息应用程序。
在线商店中的产品数据存储:
示例:像亚马逊这样的高流量电子商务平台。
这些示例表明该缓存系统可以显着减少数据库和服务器负载,从而缩短用户的响应时间。
在本文中,我们设计并实现了一个先进的缓存系统,该系统结合了 AVL 树和哈希图,以实现快速数据访问和服务器性能优化。 TTL机制提供自动数据过期管理,而令牌验证则确保足够的安全性。
该智能缓存系统高效灵活,适合具有动态和敏感数据的大规模应用,支持分布式架构中的可扩展需求。
以上是杜绝延迟:为高需求系统实施高级且安全的缓存的详细内容。更多信息请关注PHP中文网其他相关文章!