当前位置: 首页 > news >正文

缓存 --- 内存缓存 or 分布式缓存

缓存 --- 内存缓存 or 分布式缓存

  • 内存缓存(In-Memory Cache)
  • 分布式缓存(Distributed Cache)
  • 内存缓存 vs 分布式缓存

  • 内存缓存和分布式缓存是两种常见的缓存策略,它们在存储位置、访问速度和适用场景上有所不同。下面分别解释这两种缓存,并给出具体的使用案例以及常用的库。

内存缓存(In-Memory Cache)

定义

  • 内存缓存是指将数据存储在应用程序的内存中,通常是在单个服务器或进程的内存中。由于数据存储在内存中,访问速度非常快,但缓存的数据仅限于当前服务器或进程,无法与其他服务器共享。

特点

  • 速度快数据存储在内存中,访问速度极快
  • 数据隔离每个服务器或进程的缓存是独立的,无法共享
  • 容量有限:受限于内存大小,缓存容量有限。
  • 易失性:缓存数据在进程重启或服务器宕机时会丢失。

使用案例

  • 高频访问数据对于频繁访问但变化不频繁的数据(如配置信息、字典数据),可以使用内存缓存来提高访问速度
  • 单机应用:在单机应用中,内存缓存是简单且高效的选择。
  • 临时数据存储:用于存储临时数据,如计算结果或中间状态。

常用库

  • Python: functools.lru_cachecachetools
  • Java: Guava CacheCaffeine
  • C#: MemoryCache
  • Node.js: node-cache

示例

# 使用Python的functools.lru_cache作为内存缓存
from functools import lru_cache@lru_cache(maxsize=100)  # 缓存最多存储100个结果
def get_data(key):# 模拟从数据库或其他数据源获取数据return fetch_data_from_db(key)

分布式缓存(Distributed Cache)

定义

  • 分布式缓存是指将数据存储在多个服务器的共享缓存系统中,通常使用专门的缓存服务器(如Redis、Memcached)来存储数据。分布式缓存可以跨多个服务器共享数据,适合大规模分布式系统。

特点

  • 数据共享:缓存数据可以在多个服务器之间共享,适合分布式系统。
  • 扩展性好:可以通过增加缓存服务器来扩展缓存容量和性能。
  • 一致性较好:通过缓存服务器的机制,可以保证多个服务器之间的缓存数据一致性。
  • 网络开销:由于数据存储在远程服务器上,访问速度受网络延迟影响。

使用案例

  • 会话存储:在分布式Web应用中,可以使用分布式缓存来存储用户会话信息,确保用户在不同服务器之间切换时会话数据一致。
  • 热点数据缓存:对于频繁访问的热点数据(如商品信息、用户信息),可以使用分布式缓存来减轻数据库的压力。
  • 分布式锁:在分布式系统中,可以使用分布式缓存(如Redis)来实现分布式锁,确保多个进程之间的互斥操作。

常用库

  • Redis: 高性能的键值存储系统,支持多种数据结构(如字符串、哈希、列表、集合等)。
  • Memcached: 高性能的分布式内存缓存系统,适合存储简单的键值对。
  • Hazelcast: 分布式内存数据网格,支持分布式缓存、计算和消息传递。
  • Apache Ignite: 分布式内存计算平台,支持缓存、计算和流处理。

示例

import redis# 连接到Redis服务器
cache = redis.Redis(host='localhost', port=6379, db=0)def get_data(key):data = cache.get(key)if data is None:# 从数据库或其他数据源获取数据data = fetch_data_from_db(key)cache.set(key, data)return data

内存缓存 vs 分布式缓存

特性内存缓存分布式缓存
存储位置本地内存远程缓存服务器(如Redis、Memcached)
数据共享不支持,数据隔离支持,数据可跨服务器共享
访问速度极快(内存访问)较快(受网络延迟影响)
扩展性有限(受限于单机内存)高(可通过增加服务器扩展)
一致性差(多个服务器缓存不一致)较好(通过缓存服务器机制保证)
适用场景单机应用、高频访问数据分布式系统、共享数据存储

如果数据符合以下特点,优先使用内存缓存

  • 数据量不大,且不回快速增长(如一些配置信息)
  • 各个节点对数据一致性要求不高
  • 数据更新不频繁的信息一般对一致性要求不高
  • 比如某配置信息,可使用内存缓存并设定一个过期时间(10min)那么配置数据更新之后,各个节点过十分钟可以达到数据一致性
  • 可以接受缓存丢失的情况,如某个节点宕机之后缓存会丢失

相关文章:

  • 【1】云原生,kubernetes 与 Docker 的关系
  • 代码随想录算法训练营第五十三天 | 105.有向图的完全可达性 106.岛屿的周长
  • synchronized 与分布式锁
  • 如何成为Prompt工程师:学习路径、核心技能与职业发展
  • 精益数据分析(7/126):打破创业幻想,拥抱数据驱动
  • 树莓派3B的外网访问
  • C语言之文本加密程序设计
  • 【NLP 60、实践 ⑭ 使用bpe构建词表】
  • Android Kotlin AIDL 完整实现与优化指南
  • SpringBoot3设置maven package直接打包成二进制可执行文件
  • 开源项目FastAPI-MCP:一键API转换MCP服务
  • 软件测试笔记(测试的概念、测试和开发模型介绍、BUG介绍)
  • 计算机视觉7——齐次坐标与相机内外参
  • 测试模版1
  • 【Python笔记 01】变量、标识符
  • Eureka搭建
  • Vue3 + TypeScript,关于item[key]的报错处理方法
  • 2025年4月19日-得物算法岗春招笔试题-第一题
  • HBase安装与基本操作指南
  • 【21天学习打卡挑战赛】如何学习WEB安全:逼自己在短时间掌握WEB安全核心内容
  • 中国代表:美“对等关税”和歧视性补贴政策严重破坏世贸规则
  • 中央网信办:重点整治违规AI产品、利用AI制作发布谣言等突出问题
  • 圆桌|如何应对特朗普政府的关税霸凌?一种联合国视角的思考
  • 牛市早报|今年第二批810亿元超长期特别国债资金下达,支持消费品以旧换新
  • 南京航空航天大学启动扁平化改革:管理岗规模控制在20%,不再统一设科级机构
  • 国务院安委会对辽宁辽阳一饭店重大火灾事故查处挂牌督办