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

缓存 --- 内存缓存 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)那么配置数据更新之后,各个节点过十分钟可以达到数据一致性
  • 可以接受缓存丢失的情况,如某个节点宕机之后缓存会丢失
http://www.xdnf.cn/news/618.html

相关文章:

  • [OS_7] 访问操作系统对象 | offset | FHS | Handle
  • 性能比拼: Go vs Bun
  • LeRobot 项目部署运行逻辑(一)——综述
  • 深度学习总结(25)
  • 认知升级:把握人工智能教育化转型的历史机遇
  • xss学习3之服务端session
  • 2025.4.20总结
  • 【Bluedroid】蓝牙 HID 设备信息加载与注册机制及配置缓存系统源码解析
  • ReentrantReadWriteLock读写锁
  • Nacos配置中心客户端处理服务端配置信息源码解析
  • 透视部分国产碳化硅(SiC)MOSFET栅氧可靠性报告造假乱象
  • ClickHouse核心架构设计
  • 【中间件】redis使用
  • Gen - CDPT举例说明:动态上下文前缀(输入先和标签结合,输出结果会更贴近标签内容)
  • 大数据可能出现的bug之flume
  • Matlab 汽车行驶速度PID控制系统仿真
  • GIS开发笔记(9)结合osg及osgEarth实现三维球经纬网格绘制及显隐
  • 利用 HEMT 和 PHEMT 改善无线通信电路中的增益、速度和噪声
  • 常见的页面报错
  • 热门算法面试题第19天|Leetcode39. 组合总和40.组合总和II131.分割回文串
  • windows docker desktop 无法访问容器端口映射
  • 大模型面经 | 介绍一下CLIP和BLIP
  • mac监控linux上mysql性能(Grafana+Prometheus+mysqld_exporter)
  • 每日一题——最小测试用例集覆盖问题
  • 通过爬虫方式实现头条号发布视频(2025年4月)
  • 2025 UCSCCTF Pwn-wp(含附件)
  • Java链表反转方法详解
  • 2. 什么是最普通的自动化“裸奔状态”?
  • 扣子智能体1:创建Agent与写好提示词
  • 深入理解Linux中的线程控制:多线程编程的实战技巧