caching - 内存缓存如何充当分布式?
问题描述
我知道 REDIS 缓存是内存缓存的一个例子。但它(REDIS)也可以充当分布式缓存。
我的问题是缓存数据存储在内存缓存中的确切位置。缓存是否直接部署在应用服务器上?如果是,那么 REDIS 作为内存缓存如何充当分布式?
解决方案
基本的 Redis 服务器是在一台机器上运行并将数据存储在内存中的单个服务器。任意数量的客户端(应用程序)都可以连接到它并获取或更新值。应用程序和 Redis 可以在同一台机器上,但通常在不同的机器上(例如,多台机器与同一个 Redis 服务器通信)。
它可以通过多种方式进行分发。你是复制:每个 Redis 服务器都有一份相同数据的副本。此处描述了此设置:https ://redis.io/topics/replication
更有趣的分布式操作涉及多个 Redis 服务器,每个服务器维护不同的数据子集。这需要协调。此设置称为 Redis 集群,如下所述:https ://redis.io/topics/cluster-spec 。在最基本的层面上,当客户端想要读取或设置密钥时,它首先对其进行哈希处理以获取插槽号。每个服务器负责一个插槽子集。客户端要么维护状态以了解哪个服务器负责哪个插槽,要么询问某个服务器,它会告诉它。然后它只是使用常规的 Redis 命令与该服务器就该密钥进行通信。
除此之外,还有复杂性,因为服务器集可能会因故障或允许集群增长而发生变化。
推荐阅读
- elasticsearch - 如何使用logstash动态定义elasticsearch索引?
- django - Django 模板响应中间件
- apache-spark - Jupyter Notebook 中的 Spark Streaming awaitTermination
- java - 单击关闭下拉菜单时如何查找元素定位器
- c# - 不了解 wpf 更新动态创建的图像控件可见性每秒变化的行为
- javascript - 使用 .reduce 对每个名称求和
- firebase - Firestore 安全规则:无法检查子集合中的文档是否等于用户 UID
- python - 如何合并具有相同索引的两个文件中的字符串?
- c# - 在 Unity 中无意中破坏了 BoxCollider
- javascript - 如何使用 .join .slice 或 .push 使这个加密器/解密器工作?