爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Redis缓存淘汰算法详解

      首页 知识中心 存储 文章详情页

      Redis缓存淘汰算法详解

      2024-12-19 08:40:27 阅读次数:21

      算法,缓存,链表

       

      Redis缓存淘汰算法

      Redis缓存淘汰算法是Redis内存管理机制中的重要组成部分,用于在Redis达到内存使用上限时,通过不同的策略选择部分数据进行删除,以腾出内存空间。Redis提供了多种缓存淘汰策略,这些策略可以根据业务需求和数据特点进行灵活配置。以下是对Redis缓存淘汰算法的详细解析:

      1. Redis缓存淘汰策略分类

      Redis的缓存淘汰策略可以分为两大类:

      • 不进行数据淘汰的策略:仅有一种,即noeviction。当缓存数据满了,有新的写请求进来时,Redis不再提供服务,而是直接返回错误。
      • 会进行淘汰的策略:共有7种,包括基于数据是否设置过期时间的两类策略。

      2. 会进行淘汰的7种策略

      2.1 基于过期时间的淘汰策略
      • volatile-random:在设置了过期时间的键值对中,进行随机删除。
      • volatile-ttl:根据过期时间的先后进行删除,越早过期的越先被删除。
      • volatile-lru:使用LRU(Least Recently Used,最近最少使用)算法筛选设置了过期时间的键值对。
      • volatile-lfu:使用LFU(Least Frequently Used,最近最少使用)算法选择设置了过期时间的键值对(Redis 4.0后新增)。
      2.2 基于所有数据范围的淘汰策略
      • allkeys-random:从所有键值对中随机选择并删除数据。
      • allkeys-lru:使用LRU算法在所有数据中进行筛选。
      • allkeys-lfu:使用LFU算法在所有数据中进行筛选(Redis 4.0后新增)。

      3. LRU与LFU算法详解

      • LRU(Least Recently Used):最近最少使用算法,它的基本思想是淘汰最近最少访问的数据。Redis实现的LRU算法是近似LRU,通过随机选择一定数量的键,并从中选择最不常使用的键进行淘汰。这种方式避免了遍历所有键的开销,但可能会牺牲一定的精确度。
      • LFU(Least Frequently Used):最近最少使用频率算法,它基于数据的访问频率进行淘汰。Redis使用近似计数器为每个键记录访问次数,当内存达到上限时,会优先淘汰访问次数较少的键。LFU算法通过log-log计数器实现,能够以较低的内存开销记录键的访问次数。

      4. 配置与调整

      • 设置内存使用上限:通过maxmemory参数来设定Redis的内存使用上限。
      • 配置淘汰策略:通过maxmemory-policy参数来配置淘汰策略。
      • 调整采样数量:对于LRU和LFU算法,可以通过maxmemory-samples参数来控制每次随机选择的键的数量,以提高算法的精确度,但也会增加CPU开销。
      • 监控与评估:通过定期监控Redis的内存使用情况和命中率,可以评估当前的淘汰策略是否合适,并根据需要进行调整。

      5. 实际应用场景

      • 缓存数据的重要性较高:适合使用LRU或LFU策略,以保留访问频繁的数据。
      • 数据具有明确的过期时间:适合使用volatile-ttl、volatile-random、volatile-lru或volatile-lfu策略。
      • 数据访问频率不均:适合使用allkeys-lfu或volatile-lfu策略,以提升缓存的命中率。
      • 对数据一致性要求非常高:适合使用noeviction策略,以确保不会随意删除数据。

      综上所述,Redis的缓存淘汰算法为Redis的内存管理提供了灵活且强大的支持,通过合理的配置和调整,可以显著提高缓存的效率和性能。

      LRU算法以及实现样例

      LRU(Least Recently Used,最近最少使用)缓存淘汰算法是一种常用的页面置换算法,用于管理缓存中的数据,确保最近最少使用的数据被优先淘汰。在双向链表中实现LRU缓存是一种高效的方式,因为双向链表可以让我们在O(1)时间复杂度内完成节点的插入和删除操作。

      下面是一个使用Python实现的基于双向链表的LRU缓存的简单示例:

      class ListNode:
          def __init__(self, key=0, value=0):
              self.key = key
              self.value = value
              self.prev = None
              self.next = None
      
      class LRUCache:
          def __init__(self, capacity: int):
              self.capacity = capacity
              # 初始化头尾节点
              self.head = ListNode()
              self.tail = ListNode()
              self.head.next = self.tail
              self.tail.prev = self.head
              self.cache = {}
      
          def get(self, key: int) -> int:
              if key not in self.cache:
                  return -1
              node = self.cache[key]
              # 将节点移动到链表头部
              self._move_to_head(node)
              return node.value
      
          def put(self, key: int, value: int) -> None:
              if key in self.cache:
                  # 如果key已存在,更新值并移动到头部
                  node = self.cache[key]
                  node.value = value
                  self._move_to_head(node)
              else:
                  # 如果key不存在,创建新节点
                  newNode = ListNode(key, value)
                  # 添加到哈希表中
                  self.cache[key] = newNode
                  # 添加到链表头部
                  self._add_node(newNode)
                  # 如果超出容量,删除链表尾部节点
                  if len(self.cache) > self.capacity:
                      tail = self.pop_tail()
                      del self.cache[tail.key]
      
          def _move_to_head(self, node):
              # 移除节点
              self._remove_node(node)
              # 添加到头部
              self._add_node(node)
      
          def _remove_node(self, node):
              prev = node.prev
              next_node = node.next
              prev.next = next_node
              next_node.prev = prev
      
          def _add_node(self, node):
              node.prev = self.head
              node.next = self.head.next
              self.head.next.prev = node
              self.head.next = node
      
          def pop_tail(self):
              res = self.tail.prev
              self._remove_node(res)
              return res
      
      # 使用示例
      lru_cache = LRUCache(2)
      lru_cache.put(1, 1)
      lru_cache.put(2, 2)
      print(lru_cache.get(1))  # 返回 1
      lru_cache.put(3, 3)      # 淘汰 key 2
      print(lru_cache.get(2))  # 返回 -1 (未找到)
      lru_cache.put(4, 4)      # 淘汰 key 1
      print(lru_cache.get(1))  # 返回 -1 (未找到)
      print(lru_cache.get(3))  # 返回 3
      print(lru_cache.get(4))  # 返回 4
      

      这个实现中,LRUCache 类维护了一个双向链表和一个哈希表。哈希表用于快速查找节点,而双向链表则用于维护节点的使用顺序。每次访问或添加节点时,都会将其移动到链表的头部,表示最近使用过。当缓存达到容量上限时,会删除链表尾部的节点,即最近最少使用的节点。

      LFU算法实现

      LFU(Least Frequently Used)算法是一种基于访问频率的缓存淘汰算法,其核心思想是优先淘汰那些访问频率最低的数据项。以下是LFU算法实现的基本步骤和关键点:

      1. 数据结构选择

      LFU算法的实现通常需要结合多种数据结构来高效地管理缓存项及其访问频率。常见的组合包括哈希表(HashMap)和双向链表(Doubly Linked List)或优先队列(如最小堆Min-Heap):

      • 哈希表:用于存储缓存项及其对应的访问频率信息。键为缓存项的键,值为指向双向链表节点或堆中元素的指针,以及访问频率计数器。
      • 双向链表或优先队列:用于按访问频率排序缓存项。在双向链表中,相同访问频率的节点可以通过额外的链表组织在一起;在优先队列中,则可以直接根据频率进行排序。

      2. 访问频率更新

      每次缓存项被访问时,需要更新其访问频率:

      • 在哈希表中查找缓存项,获取其当前的访问频率和对应的双向链表节点或堆元素。
      • 将访问频率加1,并更新哈希表中的记录。
      • 如果使用双向链表,可能需要将节点从当前频率的链表中移除,并插入到更高频率的链表中(如果频率增加)。
      • 如果使用优先队列,则可能需要重新调整队列中的位置。

      3. 缓存淘汰

      当缓存达到容量上限且需要插入新数据时,执行缓存淘汰:

      • 如果使用双向链表,遍历最低频率的链表,找到最久未被访问或访问频率最低的节点进行淘汰。
      • 如果使用优先队列,则直接从队列中取出最小频率的节点进行淘汰。
      • 从哈希表中删除被淘汰的缓存项,并释放相应的内存。

      4. 缓存插入

      新数据插入时,首先检查缓存是否已满:

      • 如果未满,直接在哈希表中添加新项,并初始化其访问频率为1。如果使用双向链表,将其添加到最低频率的链表中;如果使用优先队列,则将其插入到适当的位置。
      • 如果已满,则执行缓存淘汰操作,然后插入新数据。

      5. 优化和变种

      • LFU-Aging:在LFU的基础上增加“老化”机制,即定期降低所有缓存项的访问频率,以便更快地适应访问模式的变化。
      • Window-LFU:只记录过去一段时间内的访问历史,而不是所有数据的历史访问记录,以减少内存消耗和提高效率。
      • LFU*:只淘汰访问次数为1的缓存项,以减少缓存污染问题。

      6. 注意事项

      • LFU算法在访问模式稳定时表现良好,但在访问模式频繁变化时可能会出现缓存污染问题。
      • 相比LRU算法,LFU算法需要更多的内存来记录访问频率信息,并且在访问频率更新和排序时可能会有更高的性能开销。

      7. 算法的python实现

      在Python中实现LFU(Least Frequently Used)缓存算法,我们可以使用collections模块中的OrderedDict来模拟双向链表的功能(虽然它实际上是一个有序字典),以及一个哈希表来记录每个键的访问频率。不过,为了更准确地实现LFU算法,特别是当需要频繁地根据访问频率进行排序时,我们可能需要一个更复杂的结构,比如使用heapq(最小堆)来优化查找最小频率项的过程。

      然而,为了简化说明,这里我将提供一个基于OrderedDict和额外哈希表的LFU缓存实现,该实现将模拟LFU的行为,但可能不是最高效的(特别是在处理大量数据和频繁更新时)。

      from collections import OrderedDict, defaultdict
      
      class LFUCache:
          def __init__(self, capacity: int):
              self.capacity = capacity
              self.cache = OrderedDict()  # 存储键和对应的值以及频率
              self.frequency = defaultdict(OrderedDict)  # 存储每个频率对应的键的集合
      
          def get(self, key: int) -> int:
              if key not in self.cache:
                  return -1
      
              # 更新访问频率
              freq = self.cache[key][1]
              self.frequency[freq].pop(key)
              if not self.frequency[freq]:
                  del self.frequency[freq]
      
              freq += 1
              self.cache[key] = (self.cache[key][0], freq)
              if freq not in self.frequency:
                  self.frequency[freq] = OrderedDict()
              self.frequency[freq][key] = None
      
              # 将键移到OrderedDict的末尾,模拟最近访问
              self.cache.move_to_end(key)
      
              return self.cache[key][0]
      
          def put(self, key: int, value: int) -> None:
              if self.capacity <= 0:
                  return
      
              if key in self.cache:
                  # 更新现有键的值和频率
                  self.cache[key] = (value, self.cache[key][1] + 1)
                  freq = self.cache[key][1]
                  self.frequency[self.cache[key][1] - 1].pop(key)
                  if not self.frequency[self.cache[key][1] - 1]:
                      del self.frequency[self.cache[key][1] - 1]
                  if freq not in self.frequency:
                      self.frequency[freq] = OrderedDict()
                  self.frequency[freq][key] = None
                  self.cache.move_to_end(key)
              else:
                  # 插入新键
                  if len(self.cache) >= self.capacity:
                      # 淘汰最少使用的项
                      min_freq = min(self.frequency.keys())
                      oldest_key = next(iter(self.frequency[min_freq]))
                      del self.cache[oldest_key]
                      del self.frequency[min_freq][oldest_key]
                      if not self.frequency[min_freq]:
                          del self.frequency[min_freq]
      
                  # 插入新项
                  self.cache[key] = (value, 1)
                  if 1 not in self.frequency:
                      self.frequency[1] = OrderedDict()
                  self.frequency[1][key] = None
      
      # 示例用法
      lfu = LFUCache(2)
      lfu.put(1, 1)
      lfu.put(2, 2)
      print(lfu.get(1))  # 返回 1
      lfu.put(3, 3)      # 淘汰键 2
      print(lfu.get(2))  # 返回 -1 (未找到)
      lfu.put(4, 4)      # 淘汰键 1
      print(lfu.get(1))  # 返回 -1 (未找到)
      print(lfu.get(3))  # 返回 3
      print(lfu.get(4))  # 返回 4
      

      注意:这个实现虽然模拟了LFU的行为,但在处理大量数据和频繁更新时可能不是最高效的。特别是,它使用OrderedDict来模拟双向链表的行为,这在每次更新频率时都需要进行字典的插入和删除操作,这些操作的时间复杂度都是O(1)平均情况下,但在最坏情况下(即哈希冲突严重时)可能会退化。

      为了获得更好的性能,特别是在需要频繁更新频率和根据频率进行排序时,可以考虑使用更复杂的数据结构,如平衡树或自定义的双向链表与哈希表的组合。然而,这些实现将更加复杂,并且可能需要更多的内存和代码来实现。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://wendao76.blog.csdn.net/article/details/142537391,作者:问道飞鱼,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:OutOfMemoryError: GC Overhead Limit如何解决 Exceeded

      下一篇:Kubernetes 存储卷与持久化存储

      相关文章

      2025-05-19 09:04:14

      《剑指Offer》搜索算法题篇——更易理解的思路~

      《剑指Offer》搜索算法题篇——更易理解的思路~

      2025-05-19 09:04:14
      算法
      2025-05-19 09:04:14

      复杂度的OJ练习

      复杂度的OJ练习

      2025-05-19 09:04:14
      代码 , 复杂度 , 思路 , 数组 , 算法
      2025-05-19 09:04:14

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      背包问题——“0-1背包”,“完全背包”(这样讲,还能不会?)

      2025-05-19 09:04:14
      动态规划 , 算法
      2025-05-19 09:04:14

      【牛客网+LeetCode】链表 OJ强训题——高效解法

      【牛客网+LeetCode】链表 OJ强训题——高效解法

      2025-05-19 09:04:14
      数据结构 , 链表
      2025-05-16 09:15:17

      多源BFS问题(2)_飞地的数量

      多源BFS问题(2)_飞地的数量

      2025-05-16 09:15:17
      bfs , grid , 单元格 , 算法
      2025-05-16 09:15:17

      BFS解决最短路问题(4)_为高尔夫比赛砍树

      BFS解决最短路问题(4)_为高尔夫比赛砍树

      2025-05-16 09:15:17
      BFS , lt , 复杂度 , 算法
      2025-05-16 09:15:17

      递归,搜索,回溯算法(3)之穷举,暴搜,深搜,回溯,剪枝

      递归,搜索,回溯算法(3)之穷举,暴搜,深搜,回溯,剪枝

      2025-05-16 09:15:17
      回溯 , 子集 , 数组 , 算法 , 递归
      2025-05-16 09:15:17

      多源BFS问题(4)_地图分析

      多源BFS问题(4)_地图分析

      2025-05-16 09:15:17
      单元格 , 算法 , 网格 , 距离
      2025-05-16 09:15:10

      【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

      【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

      2025-05-16 09:15:10
      结点 , 递归 , 遍历 , 链表 , 题目
      2025-05-16 09:15:10

      BFS解决FloodFill算法(3)_岛屿的最大面积

      BFS解决FloodFill算法(3)_岛屿的最大面积

      2025-05-16 09:15:10
      grid , 复杂度 , 算法
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5274652

      查看更多

      最新文章

      【Mybatis】-防止SQL注入

      2025-05-14 10:03:13

      分隔链表-146. LRU 缓存

      2025-05-13 09:50:28

      排序链表,23. 合并 K 个升序链表,146. LRU 缓存

      2025-05-12 09:10:14

      LRU 缓存

      2025-05-12 08:43:47

      DS初阶:时间复杂度和空间复杂度

      2025-05-08 09:04:25

      两数相加

      2025-05-08 09:03:38

      查看更多

      热门文章

      leetcode数据结构-LRU

      2023-03-02 10:21:35

      精华推荐 | 【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的存储系统的实现原理和持久化机制

      2023-02-24 10:12:47

      elasticsearch预加载数据到文件系统缓存

      2024-09-25 10:13:57

      jedis工具类

      2023-02-16 08:14:03

      ajax get缓存问题+ajax post请求

      2023-06-07 07:32:36

      nginx反向代理(2)

      2024-07-01 01:32:03

      查看更多

      热门标签

      存储 缓存 内存 数据库 数据 redis mysql 服务器 数据恢复 Redis linux java 链表 MySQL sql
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      前端怎么间接控制浏览器的缓存行为

      【缓存技术:内存缓存和数据库缓存】

      【网络】如何扫描局域网内所有设备的ip和mac地址

      Redis 事务与数据持久化

      Linux:apache优化(3)—— 页面缓存时间

      驱动保护 -- 通过PID保护指定进程

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号