-
前言想象一下,你的应用突然因为大量的并发请求而响应缓慢甚至崩溃,这就是所谓的缓存雪崩。它像一场突如其来的暴风雪,可以在短时间内压垮整个系统。但不用担心,本文将作为你的防雪屏障,带你一探缓存雪崩的神秘面纱,学习如何巧妙地规避和解决这一高并发下的大难题。缓存雪崩定义和原因定义:缓存雪崩的恐怖故事想象一下,你正在一个安静的冬夜里享受着你的应用平稳运行,突然,就像一场突如其来的暴风雪,你的应用开始变得奇慢无比,甚至完全停止响应。这就是缓存雪崩的恐怖场景 —— 当大量或全部缓存数据突然失效或消失,导致所有请求都直接打到数据库上,数据库在巨大的压力下响应缓慢或宕机,应用性能急剧下降,就像被一场雪崩掩埋。触发因素:缓存雪崩的元凶同步过期:如果你将大量缓存设置为在同一时间过期,这就像定时炸弹一到时间就会爆炸。突然间,所有数据都需要重新加载到缓存中,这时候所有的请求都会转到数据库上,导致瞬间流量激增。系统重启:有时系统维护或意外的服务重启会导致所有缓存失效。当服务再次上线,所有的请求都会涌向空无一物的缓存,然后转向数据库,形成了一场人造的“雪崩”。Redis服务宕机:虽然Redis非常稳定,但没有什么是不可能的。硬件故障、网络问题或配置错误都可能导致Redis服务不可用。当这个守护着性能的壁垒倒下,雪崩就会随之而来。热点key消失:在某些情况下,特定的热点key(被大量频繁访问的key)如果失效或被删除,也会导致相应的大量请求直接落到数据库上,造成局部的雪崩效应。通过理解缓存雪崩的定义和触发因素,你将更好地准备应对和预防这种突发事件,保持你的应用稳定和可靠。在接下来的部分中,我们将讨论如何建立坚固的防线,阻止这场灾难性的雪崩。缓存雪崩的影响系统表现:当缓存雪崩降临缓存雪崩如同一场突如其来的灾难,它给系统带来的影响是深远和显著的:响应延迟增加:场景描述:想象一下,用户发送请求期望迅速得到响应,但是因为缓存雪崩,这些请求都不得不等待数据库缓慢地处理。影响:用户体验大打折扣,原本几毫秒内可以得到的结果,现在可能需要数秒甚至更久。系统负载激增:场景描述:数据库原本靠缓存作为缓冲,突然间所有请求都直接涌向数据库,这就像一条宁静的河流突然变成了狂暴的洪水。影响:系统资源消耗激增,处理能力迅速饱和,导致整个应用的性能下降。服务完全不可用:场景描述:在极端情况下,数据库可能因为压力过大而完全崩溃,就像被雪崩掩埋的小镇,一切都停止了运作。影响:应用或服务完全不可用,用户无法完成任何操作,业务运行停滞。长远影响:雪崩后的长期寒冬缓存雪崩的影响不仅仅是短期的,它可能对业务和用户体验产生长期的负面影响:用户信任度下降:用户面对缓慢或不可用的服务可能会感到沮丧和不满,长此以往,对品牌和服务的信任度将逐渐下降。一次严重的雪崩事件可能导致用户流失,特别是在竞争激烈的市场中,用户很容易转向更可靠的竞争对手。运营成本增加:应对缓存雪崩可能需要紧急投入资源进行修复,包括技术支持和增加硬件资源等,这会增加运营成本。频繁的雪崩事件可能需要企业投入更多资源进行长期的系统优化和维护。品牌形象受损:在信息时代,一次服务中断或性能问题很快就会被用户传播。频繁的缓存雪崩可能会给企业的品牌形象带来负面影响。对于依赖在线服务的企业而言,保持服务的稳定性和可靠性对于保持良好的品牌形象至关重要。结论缓存雪崩不仅仅是技术问题,它直接关联到用户体验和业务的成功。理解其影响并采取相应的预防措施是维护健康、稳定系统的关键。在接下来的部分,我们将探讨如何有效预防和应对缓存雪崩,保持你的服务稳定运行,远离这场不期而至的“灾难”。解决方案:如何避免和应对缓存雪崩过期策略改进:智能避免大规模失效随机过期时间:给缓存项设置随机的过期时间可以防止它们同时失效。例如,如果你希望缓存大约在1小时后过期,可以设置过期时间为60±10分钟。这样,缓存过期的时间会在50到70分钟之间随机分布,避免了大规模同时失效的情况。细粒度过期:对于一些热点数据,可以使用更细粒度的过期时间,例如使用不同的过期时间策略针对不同类型或频率的访问。预防措施:构建坚固的防线合理设置缓存失效时间:根据应用的具体情况合理设置缓存的失效时间,避免大量缓存同时过期。对于不同的数据和业务场景,失效时间应该有所不同。持久化策略:利用Redis的RDB或AOF持久化机制,确保在系统重启后缓存可以被恢复,减少对数据库的压力。备份机制:确保有备份和灾难恢复计划,当缓存服务器出现问题时,可以快速恢复或切换到备份系统。热点数据处理:照顾每一个热点识别热点数据:监控和识别访问频率特别高的数据。这些数据是潜在的热点,需要特别关注。分布式锁:对于热点key的更新操作,可以使用分布式锁来确保同一时间只有一个请求去构建新的缓存,避免大量请求同时击中数据库。使用队列:对于高频更新的热点数据,可以使用消息队列来缓冲和序列化处理请求。降级和限流:紧急时刻的救生策略服务降级:在缓存雪崩或其他系统异常时,可以暂时关闭一些非核心功能,保证核心功能的正常运作。例如,可以关闭某些复杂的页面渲染,返回简化的内容或静态页面。请求限流:通过算法(如令牌桶、漏桶等)限制访问频率,确保系统在承受范围内。在高流量情况下,优先保证重要用户或请求的处理。最佳实践和案例研究实战技巧:智慧应对缓存雪崩多级缓存机制:技巧:使用本地缓存和分布式缓存相结合的方式。当分布式缓存失效时,本地缓存可以作为一个备份,减少对数据库的直接压力。建议:合理分配本地缓存和分布式缓存的大小和过期时间,保证数据的一致性和时效性。预加载和预热缓存:技巧:在缓存即将过期前,后台异步更新缓存数据,这样可以避免大量请求同时击中数据库。建议:监控缓存使用模式,对于经常访问的数据进行预热,确保它们在用户请求到达之前已经加载到缓存中。动态调整缓存策略:技巧:根据系统负载和业务重要性动态调整缓存失效时间和限流策略。建议:在系统负载较低时增加缓存失效时间,负载较高时减少缓存时间,并合理设置限流阈值,保护后端服务。案例研究:从真实故事中学习案例一:电商平台的“双11”战役:背景:每年“双11”期间,电商平台会遇到巨大的流量高峰。几年前,一个知名电商平台在“双11”期间遭遇了缓存雪崩,导致服务短时间内不可用。解决方案:平台决定实施多级缓存策略,并引入更智能的缓存预热和动态调整机制。同时,他们开始使用更细粒度的限流措施,并确保在关键服务上实施了服务降级策略。教训:即使是最大的平台也不能对缓存雪崩掉以轻心。事后,他们增加了自动化监控,确保能在问题发生前及时发现异常。案例二:社交网络的敏感时刻:背景:一家大型社交网络在进行一次重要更新时,由于忘记了重新加载缓存,导致大量用户的请求直接打到数据库上,引发了缓存雪崩。解决方案:他们迅速启动了备用资源,并动态扩展了数据库能力来缓冲请求。同时,紧急开发了一个脚本,快速预热了主要的缓存项。教训:任何时候进行系统更新或维护时,都要小心处理缓存,避免忽略导致大规模问题。结论处理缓存雪崩需要技术智慧和经验积累。通过学习和实施最佳实践,并从真实案例中吸取教训,你可以有效地增强你的系统抵御缓存雪崩的能力。记住,预防总是优于事后补救,持续的监控、测试和优化是确保系统稳定的关键。
-
前言在数字化时代,数据处理的要求变得越来越苛刻。而Redis,作为一款高性能的内存数据库,其事务机制成为保障数据安全的关键一环。本文将带领你进入Redis事务的世界,探索其中的魔法和机制。就像在编写代码时,事务就像是编写一段舞蹈,每个动作都必须精确无误,否则整个舞蹈将变得混乱不堪。redis事务概述事务是一组原子性操作,这些操作要么全部执行成功,要么全部执行失败回滚,保持数据的一致性和完整性。在数据库和数据存储系统中,事务是一种重要的概念,用于确保对数据的操作是可靠和一致的。Redis事务是一组命令的集合,这些命令会被作为一个单独的执行单元来执行。Redis事务具有以下主要特点:原子性(Atomicity): Redis事务是原子性的,要么所有命令都执行成功,要么全部失败。在事务执行期间,其他客户端无法查看事务执行的中间状态。一致性(Consistency): 事务执行过程中的数据状态转换是合法的,不会破坏数据的一致性。如果有一个命令执行失败,所有已执行的命令都会被撤销,数据回滚到事务开始之前的状态。隔离性(Isolation): Redis事务是隔离的,即一个事务的执行不受其他事务的影响。其他客户端无法在事务执行的过程中查看或修改事务的中间状态。持久性(Durability): Redis事务在执行成功后,其结果会被持久化到磁盘,确保即使在系统故障的情况下,数据也能够恢复。在Redis中,事务的执行包括以下步骤:MULTI: 开始事务,标志事务的开始。执行多个命令: 在MULTI和EXEC之间,执行多个Redis命令,这些命令会被缓存起来,而不是立即执行。EXEC: 执行事务,将之前缓存的所有命令一次性执行。DISCARD: 放弃事务,清空事务缓存,取消事务执行。以下是一个简单的Redis事务示例:MULTI SET key1 "value1" INCR key2 EXEC 在上述例子中,MULTI标志事务的开始,然后执行了两个命令:SET和INCR。最后,EXEC执行事务,将这两个命令一起执行。如果在事务执行期间没有发生错误,那么这两个命令将原子性地执行。redis事务基础在Redis事务中,MULTI和EXEC是两个基础的命令,它们分别用于开始和结束事务。以下是它们的基本用法:MULTI命令:MULTI命令用于标志事务的开始。一旦执行了MULTI,后续的Redis命令不会立即执行,而是被缓存到事务队列中。语法:MULTI 示例:MULTI SET key1 "value1" INCR key2EXEC命令:EXEC命令用于执行之前通过MULTI缓存的所有命令。一旦执行了EXEC,Redis会按照事务队列中的命令顺序依次执行这些命令。语法:EXEC 示例:EXEC DISCARD命令:DISCARD命令用于取消事务,清空之前通过MULTI缓存的所有命令,使事务回到初始状态。语法:DISCARD 示例:DISCARD 以下是一个完整的Redis事务的使用示例:MULTI SET key1 "value1" INCR key2 EXEC 在这个例子中,首先使用MULTI开始了一个事务,然后执行了两个命令:SET和INCR。最后,通过EXEC执行整个事务。如果在执行事务期间没有发生错误,那么这两个命令将原子性地执行。如果需要取消事务,可以使用DISCARD命令。事务中的命令在Redis事务中,支持的命令类型与普通的Redis命令相同。任何可以在非事务上下文中执行的Redis命令,都可以用于事务。这包括对字符串、列表、集合、有序集合和哈希等数据结构的操作,以及一些其他控制命令。以下是一些在Redis事务中常见的命令类型:数据结构操作: 事务支持对字符串(例如SET、GET)、列表(例如LPUSH、LPOP)、集合(例如SADD、SMEMBERS)、有序集合(例如ZADD、ZRANGE)和哈希(例如HSET、HGET)等数据结构的操作。MULTI SET key1 "value1" LPUSH list1 "element1" SADD set1 "member1" ZADD zset1 1 "member1" HSET hash1 field1 "value1" EXEC 原子性操作: Redis事务提供了原子性操作的支持,确保一组命令要么全部执行成功,要么全部失败。这包括在事务中的多个命令的执行。MULTI INCR counter DECR counter EXEC 控制命令: 在事务中可以使用控制命令,例如WATCH和UNWATCH,来实现乐观锁机制,确保在事务执行期间被监视的键没有被其他客户端修改。WATCH key1 MULTI SET key1 "new_value" EXEC 在这个例子中,如果在WATCH和EXEC之间键key1被其他客户端修改,事务将被取消执行。原子性操作的实现方式是通过将所有的命令都缓存到一个队列中,然后在执行EXEC命令时,Redis会按照队列中的命令顺序依次执行。如果有任何一个命令执行失败,整个事务都会被回滚,以保持数据的一致性。这确保了事务的原子性,即要么全部成功,要么全部失败。在事务执行期间,其他客户端无法查看或修改事务的中间状态,从而实现了隔离性。事务的一致性与隔离性Redis通过以下方式保证事务的一致性和隔离性:原子性操作: Redis事务是原子性的,即事务中的所有命令要么全部执行成功,要么全部执行失败回滚。这是通过将事务中的所有命令缓存到一个队列中,并在执行EXEC命令时按照队列的顺序依次执行来实现的。如果在事务执行期间发生错误,整个事务会被回滚,保持数据的一致性。事务的隔离性: Redis事务的隔离性是通过将事务执行期间的中间状态对其他客户端进行屏蔽来实现的。其他客户端无法查看或修改事务中间状态,直到事务成功执行。这种隔离性有时也被称为"串行化",因为事务的执行效果好像是按照一定的顺序依次执行的,即使实际上可能是并发执行的。WATCH命令: Redis提供了WATCH和UNWATCH命令,用于实现乐观锁。在事务执行之前,可以使用WATCH命令监视一个或多个键。如果在WATCH和EXEC之间,被监视的键发生了修改,事务将被取消执行。这确保了事务执行的原子性和隔离性。Redis的事务并不是严格的ACID(原子性、一致性、隔离性、持久性)事务,因为在Redis中,事务的一致性和隔离性是通过一些特定的机制来实现的,而不是通过强制的数据库锁定。因此,Redis事务的隔离级别不同于传统数据库系统的隔离级别,Redis事务可以看作是一种乐观锁机制,通过在事务执行之前检查相关键的状态来决定是否执行事务。这种设计适用于某些场景,但在其他场景中可能需要更严格的隔离性。在使用Redis时,需要根据应用的具体要求来评估和选择合适的事务和隔离策略。事务的异常处理在Redis事务中,异常处理主要涉及到WATCH命令、事务的回滚和提交。WATCH命令的作用:WATCH命令用于在事务执行之前监视一个或多个键。如果在WATCH和EXEC之间,被监视的键发生了修改,Redis会取消执行事务。这样的机制通常用于实现乐观锁,确保在事务执行时相关的键没有被其他客户端修改。语法:WATCH key [key ...] 示例:WATCH key1 MULTI SET key1 "new_value" EXEC 在上面的例子中,如果在WATCH和EXEC之间key1被其他客户端修改,事务将被取消执行。事务的回滚与提交:在Redis中,当执行EXEC命令时,如果事务中的任何命令执行失败,整个事务都会被回滚,所有命令的效果都会被取消,数据会回到事务开始之前的状态。如果事务中的所有命令都执行成功,那么事务就会被提交,所有的命令会原子性地应用到数据库中。MULTI SET key1 "value1" INCR key2 EXEC 在上面的例子中,如果在事务执行期间没有发生错误,那么SET和INCR命令将原子性地执行。如果在执行过程中发生了错误,比如SET命令失败,整个事务将被回滚,key1和key2的状态将回到事务开始之前的状态。总体而言,通过WATCH命令可以实现对键的监视,从而在事务执行前检测是否有其他客户端对被监视键进行了修改。而事务的回滚和提交机制确保了事务的原子性,即要么全部成功,要么全部失败。这些机制使得Redis事务具有更为可靠和一致的特性。并发环境下的事务Redis在并发环境下的表现相对较好,但需要注意一些并发冲突的情况,特别是在使用事务和 WATCH 命令的情况下。以下是一些考虑和处理并发冲突的方法:WATCH 命令:WATCH命令是Redis中处理并发冲突的一种方式。它用于在事务执行之前监视一个或多个键。如果在WATCH和EXEC之间,被监视的键发生了修改,事务将被取消执行,从而避免了并发冲突。使用WATCH命令可以实现乐观锁机制,确保在事务执行时,相关的键没有被其他客户端修改。乐观锁和版本号:在并发环境中,可以通过引入版本号的方式来实现乐观锁。每次修改数据时,增加版本号,并在事务中检查版本号,如果版本号不匹配,则取消事务执行。这种方式可以通过Redis的字符串数据结构的版本号字段或者自定义的方式来实现。分布式锁:在分布式环境中,可以使用分布式锁来控制对共享资源的访问。Redis提供了SETNX(set if not exists)命令,可以用于实现基本的分布式锁。通过在执行事务之前获取分布式锁,可以确保在整个事务执行期间其他客户端无法修改相同的数据。使用 Lua 脚本:Redis支持使用 Lua 脚本执行一系列命令,这样可以确保这些命令在执行过程中是原子的。通过使用 EVAL 命令执行 Lua 脚本,可以减少在并发环境中的一些问题。-- 示例 Lua 脚本,实现原子性的递增操作 if redis.call("GET", KEYS[1]) == ARGV[1] then return redis.call("INCR", KEYS[1]) else return false end总的来说,Redis在并发环境中的性能表现较好,而通过上述方式可以有效地处理并发冲突。使用 WATCH、乐观锁、分布式锁以及 Lua 脚本等方式,可以确保在高并发环境下对共享资源的操作是可靠和一致的。
-
案例介绍本案例演示如何使用SQL脚本模板渲染工具,将开发者编辑的SQL脚本动态渲染成完整的SQL。如以下脚本例子脚本select * from abcd a where is_del = #{isDel} -- @if(field1 != null && !isEmpty(field1)) { and field1 = #{field1} -- @if(isNotEmpty(field2)) { or field2 = ${field2} -- @} -- @} and field2 = ${field2} and id in -- @for(separator=',' open='(' close=')' index="index" item='item' collection='list') { #{item} -- @} 渲染结果select * from abcd a where is_del = false and field1 = 'None' or field2 = "1234" and field2 = "1234" and id in ( 1 , 2 , 3 ) 案例内容1 概述1.1 案例介绍本案例基于华为开发者空间云主机的CodeArts IDE for Cangjie编辑器进行操作演示。我们拉取sql_script源代码,修改main.cj内容,测试该工具的能力。1.2 适用对象企业个人开发者学生1.3 案例时间本案例总时长预计20分钟。1.4 案例流程2 SQL脚本模板渲染工具的使用2.1 启动云主机2.1.1 点击打开云主机2.1.2 启动云主机桌面2.2 下载代码2.2.1 在桌面创建名为demo的目录2.2.2 打开命令行2.2.3 输入代码下载命令cd ~/Decktop/demo git clone https://gitcode.com/changeden/sql_script2.3 打开项目2.3.1 进入demo目录2.3.1 以CodeArts IDE for Cangjie打开项目2.4 编写测试代码2.4.1 打开src/main.cj2.4.2 修改代码package sql_script import sql_script.core.* import std.collection.* main(): Int64 { // 编写脚本 let script = ##" select * from abcd a where is_del = #{isDel} -- @if(field1 != null && !isEmpty(field1)) { and field1 = #{field1} -- @if(isNotEmpty(field2)) { or field2 = ${field2} -- @} -- @} and field2 = ${field2} and id in -- @for(separator=',' open='(' close=')' index="index" item='item' collection='list') { #{item} -- @} "## // 将脚本解析为模板 let template = fromSql(script) // 声明参数 let params = HashMap<String, ScriptParam>() params.put("isDel", false) params.put("field1", "None") params.put("field2", '"1234"') params.put("list", [1, 2, 3]) // 渲染SQL let sql = template.bind(params) println(sql) return 0 } 2.5 执行代码2.5.1 点击运行按钮2.5.1 查看控制台输出2.5.1 控制台输出select * from abcd a where is_del = false and field1 = 'None' or field2 = "1234" and field2 = "1234" and id in (1,2,3) 特性工具已支持如下特性,等着您来体验:[x] 动态解析SQL脚本[x] 动态渲染SQL[x] 控制流脚本[x] 自定义渲染函数[x] 扫描基于Markdown语法编写的Mapper[x] 扫描基于XML语法编写的Mapper至此,基于仓颉编程语言实现SQL脚本模板渲染工具的演示已全部完成。如果想要了解更多仓颉编程语言知识可以访问: https://cangjie-lang.cn我正在参加【案例共创】第4期 基于华为开发者空间+仓颉/DeepSeek/MCP完成应用构建开发实践 cid:link_0
-
在Oracle执行计划中,访问索引(TABLE ACCESS BY INDEX SCAN)的方式有多种,每种方式都有其特定的应用场景和性能特点。以下是对这些索引访问方式的详细解释,以及按速度快慢整理的表格,同时说明在大数据查询时哪些需要进行优化。一、索引访问方式解释索引唯一扫描(INDEX UNIQUE SCAN)解释:扫描唯一索引,返回与给定条件完全匹配的行。由于唯一索引的特性,每个键值只对应一行数据,因此通常只会返回一条记录。特点:速度快,因为只需要访问索引中的特定条目。索引全扫描(INDEX FULL SCAN)解释:扫描整个索引,通常用于需要访问索引中所有条目的情况。这种方式会读取索引中的所有块,但不会访问表中的数据块(除非索引是聚簇索引或查询需要返回表中的所有列)。特点:速度较慢,因为需要访问索引中的所有条目。适用于索引覆盖查询(即查询所需的所有列都包含在索引中)或需要排序的查询。索引范围扫描(INDEX RANGE SCAN)解释:扫描索引的一部分,返回满足特定条件的行范围。这通常用于非唯一索引或组合索引,其中查询条件可能匹配多行。特点:速度介于唯一扫描和全扫描之间,具体取决于匹配的行数。索引快速全扫描(INDEX FAST FULL SCAN)解释:类似于索引全扫描,但使用多块读取(multi-block read)来提高效率。这种方式不保证返回行的顺序,因此适用于不需要排序的查询。特点:速度通常比索引全扫描快,因为它利用了多块读取的优势。索引跳跃式扫描(INDEX SKIP SCAN)解释:当复合索引的前导列未在查询条件中使用,但后续列被使用时,Oracle可以使用索引跳跃式扫描。它通过“跳跃”过前导列来访问后续列的索引条目。特点:速度相对较慢,因为它需要额外的处理来定位索引条目。适用于特定场景下的复合索引查询。二、按速度快慢整理的表格索引访问方式速度(相对快慢)适用场景索引唯一扫描(INDEX UNIQUE SCAN)最快查询条件精确匹配唯一索引列索引快速全扫描(INDEX FAST FULL SCAN)较快查询不需要排序,且索引覆盖查询所需列索引范围扫描(INDEX RANGE SCAN)中等查询条件匹配索引中的多行索引全扫描(INDEX FULL SCAN)较慢查询需要访问索引中所有条目,或索引覆盖查询索引跳跃式扫描(INDEX SKIP SCAN)最慢复合索引中前导列未在查询条件中使用,但后续列被使用三、大数据查询时的优化建议在大数据查询时,以下索引访问方式可能需要进行优化:索引全扫描(INDEX FULL SCAN)优化方向:如果查询不需要访问表中的所有列,考虑使用索引覆盖查询来避免全扫描。或者,如果查询需要排序,考虑使用其他优化技术(如并行查询、分区表等)来提高性能。索引范围扫描(INDEX RANGE SCAN)优化方向:确保查询条件尽可能精确,以减少匹配的行数。同时,考虑对索引进行优化,如添加或删除列以改善选择性。索引跳跃式扫描(INDEX SKIP SCAN)优化方向:尽量避免使用索引跳跃式扫描,因为它通常比其他索引访问方式慢。如果可能,重新设计查询或索引以使用更高效的访问方式。通用优化建议索引设计:确保索引设计合理,覆盖高频查询,并避免冗余索引。统计信息:定期收集和分析统计信息,以确保优化器能够生成最优的执行计划。并行查询:对于大数据查询,考虑使用并行查询来提高性能。分区表:如果表非常大,考虑使用分区表来减少查询需要扫描的数据量。
-
网上看到一个帖子说他们公司部署了一个基于AI去操作数据库的功能,然后用了10分钟后发现数据库被删了,大家觉得AI驱动数据库可取吗?
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签