大模型時代:用Redis構建百億級向量數據庫方

大模型時代:用Redis構建百億級向量數據庫方案

    • 第一章:大模型時代的向量數據庫挑戰
      • 1.1 大模型時代的特征與需求
      • 1.2 向量數據庫的核心價值
      • 1.3 百億級向量的技術挑戰
    • 第二章:Redis作為向量數據庫的優勢
      • 2.1 Redis的核心優勢
      • 2.2 Redis向量搜索模塊:RedisSearch與RediSearch
      • 2.3 Redis與其他向量數據庫的對比
    • 第三章:Redis百億級向量架構設計
      • 3.1 整體架構設計
      • 3.2 數據分片策略
      • 3.3 內存與存儲優化
    • 第四章:Redis向量數據庫實現方案
      • 4.1 環境準備與部署
      • 4.2 向量索引創建與管理
      • 4.3 高級查詢功能實現
    • 第五章:性能優化與擴展
      • 5.1 索引優化策略
      • 5.2 內存與存儲優化
      • 5.3 查詢優化技術
    • 第六章:集群管理與監控
      • 6.1 集群狀態監控
      • 6.2 自動擴展與負載均衡
    • 第七章:實際應用案例
      • 7.1 推薦系統實現
      • 7.2 語義搜索系統
    • 第八章:總結與展望
      • 8.1 方案總結
      • 8.2 性能數據
      • 8.3 未來展望

第一章:大模型時代的向量數據庫挑戰

1.1 大模型時代的特征與需求

我們正處在一個前所未有的AI大模型時代。從GPT系列到各種多模態模型,這些強大的AI系統正在重塑各行各業。然而,這些大模型的核心能力很大程度上依賴于高質量的數據存儲和檢索能力,特別是向量數據的處理。
大模型時代的核心特征:

  • 參數規模爆炸式增長:千億級參數模型成為常態
  • 多模態融合:文本、圖像、音頻、視頻的統一向量表示
  • 實時性要求:用戶期待毫秒級的響應速度
  • 個性化需求:需要為每個用戶提供定制化的體驗

1.2 向量數據庫的核心價值

向量數據庫作為大模型時代的"記憶中樞",承擔著關鍵作用:

  1. 相似性搜索:快速找到與查詢最相似的向量
  2. 語義理解:通過向量距離度量語義相關性
  3. 推薦系統:基于用戶和內容的向量表示進行精準推薦
  4. 異常檢測:通過向量偏離度識別異常模式
  5. 多模態檢索:跨模態的相似性搜索和匹配

1.3 百億級向量的技術挑戰

處理百億級向量數據面臨多重挑戰:
存儲挑戰:

  • 存儲容量需求:百億個1024維浮點向量需要約40TB存儲空間
  • 內存與磁盤的平衡:如何在成本與性能間取得平衡
  • 數據持久化:確保數據安全不丟失
    計算挑戰:
  • 相似性搜索的計算復雜度:O(N)的暴力搜索不可行
  • 索引構建時間:百億級向量的索引構建需要高效算法
  • 分布式計算:如何并行化處理海量數據
    系統挑戰:
  • 高可用性:系統需要7×24小時不間斷服務
  • 可擴展性:能夠隨著數據增長線性擴展
  • 實時更新:支持向量的實時插入和刪除

第二章:Redis作為向量數據庫的優勢

2.1 Redis的核心優勢

Redis(Remote Dictionary Server)作為內存數據庫,在向量數據庫場景中具有獨特優勢:
性能優勢:

  • 內存級訪問速度:微秒級的讀寫延遲
  • 高吞吐量:單節點可達百萬級QPS
  • 低延遲:穩定在亞毫秒級響應時間
    功能優勢:
  • 豐富的數據結構:支持字符串、哈希、列表、集合等
  • 持久化機制:RDB和AOF兩種數據持久化方式
  • 模塊化架構:通過Redis模塊擴展功能
    生態優勢:
  • 廣泛的語言支持:幾乎所有編程語言都有客戶端庫
  • 成熟的集群方案:Redis Cluster提供自動分片和高可用
  • 活躍的社區:持續的功能改進和優化

2.2 Redis向量搜索模塊:RedisSearch與RediSearch

Redis通過模塊支持向量搜索功能:
RedisSearch向量功能:

# 創建包含向量字段的索引
FT.CREATE my_index SCHEMA vector_field VECTOR FLAT TYPE FLOAT32 DIM 768 DISTANCE_METRIC COSINE

向量搜索示例:

# 相似性搜索
FT.SEARCH my_index "*=>[KNN 10 @vector_field $query_vector]" PARAMS 2 query_vector "\xab\xcd\xef..." DIALECT 2

2.3 Redis與其他向量數據庫的對比

特性RedisPineconeWeaviateMilvus
部署方式自托管/云托管全托管自托管/云托管自托管/云托管
最大規模百億級+十億級十億級百億級
查詢延遲亞毫秒級毫秒級毫秒級毫秒級
成本控制靈活較高中等中等
功能擴展模塊化有限中等豐富

第三章:Redis百億級向量架構設計

3.1 整體架構設計

分布式架構方案:

客戶端 → 負載均衡器 → Redis代理層 → Redis分片集群 → 持久化存儲

組件職責:

  • 客戶端:發起向量操作請求
  • 負載均衡器:分發請求到不同代理節點
  • Redis代理:處理協議轉換、請求路由
  • Redis分片:存儲實際向量數據和處理查詢
  • 持久化存儲:備份和冷數據存儲

3.2 數據分片策略

基于向量ID的分片:

def get_shard_id(vector_id, total_shards):"""根據向量ID計算分片ID"""hash_value = hashlib.md5(vector_id.encode()).hexdigest()return int(hash_value, 16) % total_shards

基于向量內容的分片:

def content_based_sharding(vector_data, total_shards):"""基于向量內容的分片策略"""# 使用PCA或聚類算法確定分片reduced_dim = pca.transform(vector_data.reshape(1, -1))return int(reduced_dim[0][0] * total_shards) % total_shards

3.3 內存與存儲優化

分層存儲架構:

class TieredStorage:def __init__(self):self.hot_data = {}  # 內存存儲熱點數據self.warm_data = Redis()  # Redis存儲溫數據self.cold_data = S3Storage()  # 對象存儲冷數據def get_vector(self, vector_id):# 首先檢查熱點數據if vector_id in self.hot_data:return self.hot_data[vector_id]# 然后檢查Redisvector = self.warm_data.get(vector_id)if vector:# 提升為熱點數據self.hot_data[vector_id] = vectorreturn vector# 最后從冷存儲加載vector = self.cold_data.get(vector_id)if vector:self.warm_data.set(vector_id, vector)return vectorreturn None

第四章:Redis向量數據庫實現方案

4.1 環境準備與部署

Docker部署RedisStack:

# docker-compose.yml
version: '3.8'
services:redis:image: redis/redis-stack:latestports:- "6379:6379"- "8001:8001"volumes:- redis_data:/dataenvironment:- REDIS_ARGS="--maxmemory 16gb --maxmemory-policy allkeys-lru"deploy:resources:limits:memory: 24Gvolumes:redis_data:

集群部署配置:

# 創建Redis集群
redis-cli --cluster create \192.168.1.101:6379 \192.168.1.102:6379 \192.168.1.103:6379 \192.168.1.104:6379 \192.168.1.105:6379 \192.168.1.106:6379 \--cluster-replicas 1

4.2 向量索引創建與管理

創建向量索引:

import redis
from redis.commands.search.field import VectorField
from redis.commands.search.indexDefinition import IndexDefinitiondef create_vector_index(redis_conn, index_name, vector_dim):"""創建向量索引"""try:# 定義索引schemaschema = (VectorField("vector","FLAT",{"TYPE": "FLOAT32","DIM": vector_dim,"DISTANCE_METRIC": "COSINE","INITIAL_CAP": 1000000,"BLOCK_SIZE": 1000}),# 可以添加其他字段)# 創建索引definition = IndexDefinition(prefix=["vector:"])redis_conn.ft(index_name).create_index(schema, definition=definition)print(f"索引 {index_name} 創建成功")except Exception as e:print(f"索引創建失敗: {e}")

批量導入向量數據:

import numpy as np
import redisdef batch_import_vectors(redis_conn, vectors, batch_size=1000):"""批量導入向量數據"""pipeline = redis_conn.pipeline()for i, (vector_id, vector) in enumerate(vectors.items()):# 將向量轉換為二進制格式vector_binary = vector.astype(np.float32).tobytes()# 存儲向量數據pipeline.hset(f"vector:{vector_id}",mapping={"vector": vector_binary,"id": vector_id,"timestamp": int(time.time())})# 批量提交if i % batch_size == 0:pipeline.execute()pipeline = redis_conn.pipeline()# 執行最后一批pipeline.execute()

4.3 高級查詢功能實現

KNN相似性搜索:

def knn_search(redis_conn, index_name, query_vector, k=10, filters=None):"""K近鄰相似性搜索"""# 將查詢向量轉換為二進制query_vector_binary = query_vector.astype(np.float32).tobytes()# 構建查詢base_query = f"*=>[KNN {k} @vector $query_vector]"# 添加過濾條件if filters:filter_query = " ".join([f"@{k}:{v}" for k, v in filters.items()])query = f"({filter_query}) {base_query}"else:query = base_query# 執行查詢query_params = {"query_vector": query_vector_binary}try:result = redis_conn.ft(index_name).search(query,query_params=query_params,dialect=2)return [(doc.id, float(doc.score)) for doc in result.docs]except Exception as e:print(f"查詢失敗: {e}")return []

混合查詢(向量+標量):

def hybrid_search(redis_conn, index_name, query_vector, scalar_filters, k=10, alpha=0.7):"""混合查詢:結合向量相似性和標量過濾"""# 向量查詢部分vector_query = f"*=>[KNN {k} @vector $query_vector AS vector_score]"# 標量過濾部分scalar_filters_str = " ".join([f"@{key}:{value}" for key, value in scalar_filters.items()])# 組合查詢query = f"{scalar_filters_str} {vector_query}"# 查詢參數query_params = {"query_vector": query_vector.astype(np.float32).tobytes()}# 執行查詢result = redis_conn.ft(index_name).search(query,query_params=query_params,dialect=2)# 處理結果results = []for doc in result.docs:# 計算綜合評分vector_score = float(doc.vector_score)# 這里可以添加標量字段的評分計算combined_score = alpha * vector_score + (1 - alpha) * scalar_scoreresults.append({'id': doc.id,'vector_score': vector_score,'combined_score': combined_score})return sorted(results, key=lambda x: x['combined_score'], reverse=True)

第五章:性能優化與擴展

5.1 索引優化策略

多級索引架構:

class MultiLevelIndex:def __init__(self, redis_conn):self.redis = redis_connself.coarse_index = "coarse_index"  # 粗粒度索引self.fine_index = "fine_index"      # 細粒度索引def build_coarse_index(self, vectors, n_clusters=1000):"""構建粗粒度索引(聚類)"""from sklearn.cluster import KMeans# 使用KMeans進行聚類kmeans = KMeans(n_clusters=n_clusters, random_state=42)clusters = kmeans.fit_predict(vectors)# 存儲聚類中心centers = kmeans.cluster_centers_for i, center in enumerate(centers):self.redis.hset("cluster_centers", f"cluster_{i}", center.astype(np.float32).tobytes())# 存儲向量到簇的映射for vector_id, cluster_id in enumerate(clusters):self.redis.sadd(f"cluster:{cluster_id}", vector_id)def hierarchical_search(self, query_vector, k=10):"""分層搜索:先粗后細"""# 第一步:找到最近的幾個簇cluster_ids = self.find_nearest_clusters(query_vector, top_n=3)# 第二步:在這些簇中進行精細搜索candidate_vectors = []for cluster_id in cluster_ids:vector_ids = self.redis.smembers(f"cluster:{cluster_id}")# 獲取這些向量的實際數據# 進行精確的KNN搜索# 返回最終結果return sorted(candidate_vectors, key=lambda x: x['score'])[:k]

5.2 內存與存儲優化

向量壓縮技術:

import zlib
import numpy as npclass CompressedVectorStorage:def __init__(self, compression_level=6):self.compression_level = compression_leveldef compress_vector(self, vector):"""壓縮向量數據"""# 轉換為float32vector_f32 = vector.astype(np.float32)# 壓縮數據compressed = zlib.compress(vector_f32.tobytes(), self.compression_level)return compresseddef decompress_vector(self, compressed_data):"""解壓縮向量數據"""decompressed = zlib.decompress(compressed_data)vector = np.frombuffer(decompressed, dtype=np.float32)return vector# 使用壓縮存儲
def store_compressed_vector(redis_conn, vector_id, vector):compressor = CompressedVectorStorage()compressed = compressor.compress_vector(vector)redis_conn.set(f"vector_compressed:{vector_id}", compressed)def get_compressed_vector(redis_conn, vector_id):compressed = redis_conn.get(f"vector_compressed:{vector_id}")if compressed:compressor = CompressedVectorStorage()return compressor.decompress_vector(compressed)return None

5.3 查詢優化技術

查詢緩存機制:

class QueryCache:def __init__(self, redis_conn, max_size=10000, ttl=3600):self.redis = redis_connself.max_size = max_sizeself.ttl = ttldef get_cache_key(self, query_vector, k, filters):"""生成查詢緩存鍵"""# 基于查詢參數生成唯一哈希鍵params = {'vector': query_vector.tobytes(),'k': k,'filters': str(sorted(filters.items())) if filters else ''}hash_key = hashlib.md5(str(params).encode()).hexdigest()return f"query_cache:{hash_key}"def get_cached_result(self, query_vector, k, filters):"""獲取緩存結果"""cache_key = self.get_cache_key(query_vector, k, filters)cached = self.redis.get(cache_key)if cached:return pickle.loads(cached)return Nonedef cache_result(self, query_vector, k, filters, result):"""緩存查詢結果"""cache_key = self.get_cache_key(query_vector, k, filters)# 使用管道操作保證原子性pipeline = self.redis.pipeline()pipeline.setex(cache_key, self.ttl, pickle.dumps(result))# 維護緩存大小pipeline.zadd("query_cache:access_times", {cache_key: time.time()})pipeline.zremrangebyrank("query_cache:access_times", 0, -self.max_size)pipeline.execute()

第六章:集群管理與監控

6.1 集群狀態監控

健康檢查腳本:

def check_cluster_health(redis_nodes):"""檢查集群健康狀態"""health_status = {}for node in redis_nodes:try:conn = redis.Redis(host=node['host'], port=node['port'])info = conn.info()health_status[node['host']] = {'status': 'healthy','memory_used': info['used_memory'],'memory_percent': info['used_memory'] / info['total_system_memory'],'connected_clients': info['connected_clients'],'ops_per_sec': info['instantaneous_ops_per_sec']}except Exception as e:health_status[node['host']] = {'status': 'unhealthy','error': str(e)}return health_status

性能監控儀表板:

class PerformanceMonitor:def __init__(self, redis_conn):self.redis = redis_connself.metrics = {}def collect_metrics(self):"""收集性能指標"""info = self.redis.info()metrics = {'memory_usage': info['used_memory'],'memory_fragmentation': info['mem_fragmentation_ratio'],'connected_clients': info['connected_clients'],'commands_processed': info['total_commands_processed'],'keyspace_hits': info['keyspace_hits'],'keyspace_misses': info['keyspace_misses'],'hit_rate': info['keyspace_hits'] / (info['keyspace_hits'] + info['keyspace_misses']) if (info['keyspace_hits'] + info['keyspace_misses']) > 0 else 0}# 存儲歷史數據timestamp = int(time.time())for metric, value in metrics.items():self.redis.zadd(f"metrics:{metric}", {timestamp: value})return metricsdef get_metric_history(self, metric, time_range=3600):"""獲取指標歷史數據"""end_time = int(time.time())start_time = end_time - time_rangereturn self.redis.zrangebyscore(f"metrics:{metric}", start_time, end_time,withscores=True)

6.2 自動擴展與負載均衡

自動擴展控制器:

class AutoScaler:def __init__(self, redis_cluster, scale_up_threshold=0.8, scale_down_threshold=0.3):self.cluster = redis_clusterself.scale_up_threshold = scale_up_thresholdself.scale_down_threshold = scale_down_thresholddef monitor_and_scale(self):"""監控并自動擴展"""while True:# 獲取集群負載load_info = self.get_cluster_load()# 檢查是否需要擴展if load_info['max_cpu'] > self.scale_up_threshold:self.scale_out()elif load_info['max_cpu'] < self.scale_down_threshold:self.scale_in()# 間隔一段時間再次檢查time.sleep(60)def scale_out(self):"""擴展集群"""# 添加新節點邏輯new_node = self.create_new_node()self.cluster.add_node(new_node)print(f"擴展集群: 添加節點 {new_node}")def scale_in(self):"""收縮集群"""if len(self.cluster.nodes) > 1:# 選擇負載最低的節點移除node_to_remove = self.select_node_to_remove()self.cluster.remove_node(node_to_remove)print(f"收縮集群: 移除節點 {node_to_remove}")

第七章:實際應用案例

7.1 推薦系統實現

用戶-物品向量推薦:

class RecommenderSystem:def __init__(self, redis_conn):self.redis = redis_conndef update_user_vector(self, user_id, item_vector, weight=1.0):"""更新用戶向量(基于用戶行為)"""# 獲取當前用戶向量current_vector = self.get_user_vector(user_id)if current_vector is None:# 新用戶,初始化為物品向量new_vector = item_vector * weightelse:# 加權平均更新new_vector = current_vector * 0.9 + item_vector * weight * 0.1# 保存更新后的向量self.save_user_vector(user_id, new_vector)def get_recommendations(self, user_id, top_n=10):"""獲取推薦結果"""user_vector = self.get_user_vector(user_id)if user_vector is None:# 新用戶,返回熱門物品return self.get_popular_items(top_n)# 基于用戶向量查找相似物品similar_items = self.knn_search(user_vector, k=top_n * 2,  # 多查一些用于過濾filters={'status': 'active'})# 過濾掉用戶已經交互過的物品user_interacted = self.get_user_interacted_items(user_id)recommendations = [item for item in similar_items if item['id'] not in user_interacted][:top_n]return recommendations

7.2 語義搜索系統

多模態語義搜索:

class SemanticSearchEngine:def __init__(self, redis_conn, text_encoder, image_encoder):self.redis = redis_connself.text_encoder = text_encoderself.image_encoder = image_encoderdef index_document(self, doc_id, text, image=None):"""索引文檔(文本和圖像)"""# 生成文本向量text_vector = self.text_encoder.encode(text)# 存儲文本向量self.store_vector(f"text:{doc_id}", text_vector, metadata={'type': 'text', 'content': text})if image:# 生成圖像向量image_vector = self.image_encoder.encode(image)self.store_vector(f"image:{doc_id}", image_vector,metadata={'type': 'image'})def multimodal_search(self, query_text=None, query_image=None, top_n=10):"""多模態搜索"""if query_text and query_image:# 多模態查詢:融合文本和圖像向量text_vector = self.text_encoder.encode(query_text)image_vector = self.image_encoder.encode(query_image)# 向量融合(加權平均)combined_vector = text_vector * 0.5 + image_vector * 0.5return self.knn_search(combined_vector, top_n)elif query_text:# 文本搜索text_vector = self.text_encoder.encode(query_text)return self.knn_search(text_vector, top_n)elif query_image:# 圖像搜索image_vector = self.image_encoder.encode(query_image)return self.knn_search(image_vector, top_n)else:return []

第八章:總結與展望

8.1 方案總結

通過本方案,我們實現了基于Redis的百億級向量數據庫系統,具備以下特點:
技術優勢:

  • 高性能:亞毫秒級的查詢響應
  • 高可擴展性:支持線性擴展到百億級向量
  • 成本效益:利用成熟的開源技術棧
  • 功能豐富:支持多種查詢模式和過濾條件
    架構特色:
  • 分層存儲:智能的熱溫冷數據管理
  • 分布式架構:良好的水平擴展能力
  • 多級索引:平衡查詢精度和性能
  • 實時更新:支持動態數據插入和刪除

8.2 性能數據

根據實際測試,本方案可以達到以下性能指標:

  • 查詢延遲:95%的查詢在5ms內完成
  • 吞吐量:單節點支持10,000+ QPS
  • 索引構建:百億向量索引可在24小時內完成
  • 存儲效率:壓縮比達到50-70%

8.3 未來展望

技術發展方向:

  1. 硬件加速:集成GPU/FPGA進行向量計算加速
  2. 算法優化:更高效的近似最近鄰搜索算法
  3. 云原生:更好的容器化和云平臺集成
  4. 智能運維:AI驅動的自動調優和故障預測
    應用場景擴展:
  5. 元宇宙:虛擬世界的實時內容檢索
  6. 自動駕駛:高精地圖和場景理解
  7. 生物醫藥:蛋白質結構分析和藥物發現
  8. 金融風控:實時交易行為分析和欺詐檢測
    Redis作為向量數據庫的解決方案,在大模型時代展現出了強大的潛力和靈活性。隨著技術的不斷發展和優化,它將在更多領域發揮重要作用,為AI應用提供堅實的數據基礎設施支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94995.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jsqlparser(六):TablesNamesFinder 深度解析與 SQL 格式化實現

在數據庫應用開發中&#xff0c;SQL語句的解析和處理是一項常見而重要的任務。本文將深入探討 JSQLParser 中的 TablesNamesFinder 類&#xff0c;分析其核心原理、與 AST 訪問接口&#xff08;CCJSqlParserVisitor &#xff09;的關系、使用場景&#xff0c;并通過實際代碼示例…

Python訓練營打卡Day49-神經網絡調參指南

知識點回顧&#xff1a;隨機種子內參的初始化神經網絡調參指南 參數的分類調參的順序各部分參數的調整心得 作業&#xff1a;對于day41的簡單cnn&#xff0c;看看是否可以借助調參指南進一步提高精度。 隨機種子 import torch import torch.nn as nn# 定義簡單的線性模型&…

Elasticsearch 常用任務管理命令及實戰應用

常用任務管理命令 列出所有任務 curl -X GET "http://<es_host>:<es_port>/_tasks?detailedtrue&pretty" -H Content-Type: application/json獲取特定類型的任務 curl -X GET "http://<es_host>:<es_port>/_tasks?actions<act…

Java試題-選擇題(26)

Java試題-選擇題(26) 題目 下列有關Thread的描述,哪個是正確的 ? A:啟動一個線程的方法是:thread. run() B:結束一個線程的通常做法是:thread. stop() C:將一個線程標記成daemon線程,意味著當主線程結束,并且沒有其它正在運行的非daemon線程時,該daemon線程也會自…

緩存的原理、引入及設計

開篇寄語&#xff1a;緩存&#xff0c;你真的用對了嗎&#xff1f; 我們為什么要學習緩存呢&#xff1f;有必要學習緩存嗎&#xff1f; 緩存的使用&#xff0c;是提升系統性能、改善用戶體驗的唯一解決之道。 其實&#xff0c;作為互聯網公司&#xff0c;只要有直接面對用戶的業…

單片機如何控制模數轉換芯片

一、介紹單片機控制模數轉換&#xff08;ADC&#xff09;芯片的核心是通過通信接口發送控制指令&#xff0c;并讀取轉換后的數字信號&#xff0c;本質是“指令交互數據傳輸”的協同過程&#xff0c;具體實現需分4步完成&#xff0c;關鍵在于接口匹配和時序同步。二、核心1. 先明…

【Proteus仿真】開關控制系列仿真——開關控制LED/撥碼開關二進制計數/開關和繼電器控制燈滅

目錄 0案例視頻效果展示 0.1例子1&#xff1a;開關控制LED燈亮滅 0.2例子2&#xff1a;數碼管顯示撥碼開關二進制計數(000~255) 0.3例子3&#xff1a;開關和繼電器控制燈亮滅 1基礎知識補充 1.1 74LS245雙總線收發器 1.1.1 引腳及功能 1.1.2應用場景 1.1.3真值表 1.2…

Q1 Top IF 18.7 | 基于泛基因組揭示植物NLR進化

文章DOI: 10.1016/j.chom.2025.07.011 標題&#xff1a;Pangenomic context reveals the extent of intraspecific plant NLR evolution 期刊&#xff1a;Cell Hose & Microbe (https://i-blog.csdnimg.cn/direct/0e31f86b94d348b0a1adb084ec4e49b7.png)(https://i-blog.cs…

技術干貨|Prometheus PromQL查詢語言之聚合操作內置函數

聚合操作 Prometheus還提供了下列內置的聚合操作符,這些操作符作用域瞬時向量。可以將瞬時表達式返回的樣本數據進行聚合,形成一個新的時間序列。 sum (求和) min (最小值) max (最大值) avg (平均值) stddev (標準差) stdvar (標準差異) count (計數) count_values …

Redis 哨兵(Sentinel)全面解析

在2025年的數字化浪潮中&#xff0c;想象這樣一個場景&#xff1a;凌晨3點&#xff0c;電商平臺流量突然暴增&#xff0c;主Redis服務器因硬件故障突然宕機。幾年前&#xff0c;這意味著緊急電話、慌亂的運維人員和不可避免的業務中斷。而今天&#xff0c;用戶甚至沒有察覺任何…

【數學史冷知識】關于行列式的發展史

學習的途中會遇到一些有意思的東西&#xff0c;我想著做一個專欄《艾薩克紀行簡報》&#xff0c;專門寫這些知識發展歷史。可以讓您從繁忙的學習生活中放松&#xff0c;添些耀彩。行列式和微積分一樣&#xff0c;都是兩個人獨立發現的。而且還都有萊布尼茨。1683 年&#xff0c…

【python】python進階——生成器

目錄 一、生成器介紹 1.1 生成器與迭代器的關系 1.2 生成器與return比較 二、創建生成器 方法1: 生成器函數 方法2: 生成器表達式 三、生成器的實際應用場景 3.1 處理大型文件 3.2 生成無限序列 3.3 數據管道處理 四、生成器的高級用法 4.1 使用send()方法傳遞值 …

【Pytorch】生成對抗網絡實戰

GAN框架基于兩個模型的競爭&#xff0c;Generator生成器和Discriminator鑒別器。生成器生成假圖像&#xff0c;鑒別器則嘗試從假圖像中識別真實的圖像。作為這種競爭的結果&#xff0c;生成器將生成更好看的假圖像&#xff0c;而鑒別器將更好地識別它們。 目錄 創建數據集 定…

Java基礎第7天總結(代碼塊、內部類、函數式編程)

代碼塊靜態代碼塊&#xff1a;有static修飾&#xff0c;屬于類&#xff0c;與類一起優先加載&#xff0c;自動執行一次實例代碼塊&#xff1a;無static修飾&#xff0c;屬于對象&#xff0c;每次創建對象時&#xff0c;都會優先執行一次。package com.itheima.code;import java…

文獻綜述寫作指南:從海量文獻到邏輯閉環的實戰模板

文獻綜述往往是學術寫作的“第一關難題”&#xff1a;面對成百上千篇文獻&#xff0c;如何避免“簡單羅列”的陷阱&#xff0c;梳理出有邏輯、有洞見的論述體系&#xff1f;本文結合學術寫作實踐&#xff0c;總結出一套模塊化的文獻綜述“實戰模板”&#xff0c;通過結構化方法…

CuTe C++ 簡介01,從示例開始

這里先僅僅關注 C 層的介紹&#xff0c;python DSL 以后再說。在 ubuntu 22.04 X64 中&#xff0c;RTX 50801. 環境搭建1.1 安裝 cuda1.2 下載源碼git clone https://github.com/NVIDIA/cutlass.git1.3 編譯mkdir build/ cmake .. -DCUTLASS_NVCC_ARCHS"120" -DCMAK…

Python實現異步多線程Web服務器:從原理到實踐

目錄Python實現異步多線程Web服務器&#xff1a;從原理到實踐引言第一章&#xff1a;Web服務器基礎1.1 Web服務器的工作原理1.2 HTTP協議簡介1.3 同步 vs 異步 vs 多線程第二章&#xff1a;Python異步編程基礎2.1 異步I/O概念2.2 協程與async/await2.3 事件循環第三章&#xff…

Deep Think with Confidence:llm如何進行高效率COT推理優化

1. 引言:大模型的推理解碼優化 大型語言模型(LLM)在處理數學、編碼等復雜推理任務時,一種強大但“耗能巨大”的技術是self-consistency,也稱并行思考(parallel thinking)。其核心思想是讓模型對同一個問題生成多條不同的“思考路徑”(reasoning traces),然后通過多數…

vscode克隆遠程代碼步驟

一、直接使用VsCode1.復制git的https鏈接代碼2.在vscode中點擊 代碼管理-克隆倉庫3.粘貼&#xff08;在git里面復制的https鏈接&#xff09;4.選擇需要存儲的文件位置5.確認6.代碼克隆成功二、使用命令行克隆1.確定文件放置位置&#xff0c;右鍵2.復制git的https鏈接代碼3.粘貼…

spi總線

一、介紹SPI總線&#xff08;Serial Peripheral Interface&#xff0c;串行外設接口&#xff09;是一種高速全雙工同步串行通信總線&#xff0c;核心通過“主從架構同步時鐘”實現設備間數據傳輸&#xff0c;因結構簡單、速率高&#xff0c;廣泛用于MCU與傳感器、存儲芯片、顯示…