大模型时代:用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与传感器、存储芯片、显示…