redis - 在多个平台上使用 Redis
问题描述
我一直在使用 Redis 来获取项目的统计信息。我正在使用Jedis
Redis for java,目前用于该项目,但我也想在多个平台(如网站、android 甚至 IOS)中使用相同的 Redis 服务器。该项目经常使用 Redis 来获取和设置。
我的问题
- 现在只有一台 Redis 服务器,所以如果我想在多个平台上使用,它必须连接专用服务器,在当前服务器和 Redis 服务器之间存在延迟。我该怎么做?
- 我只想为所有连接使用一个 Redis 服务器。它是危险的还是会影响性能?
如果你对这个话题有任何想法,我想听听你的想法!
解决方案
首先; 为了“更好”和水平扩展,您的应用程序服务器不应存储任何数据。如果您的应用程序服务器有MySQL
数据库或Redis
在其中,那么很难扩展,因为它们不是“无状态的”。如果您想在此设计中添加第二台服务器,那么您不能使用您的数据复制您的应用程序服务器。要使其“无状态”,您必须将数据存储移出应用程序服务器。
- 你对此无能为力。延迟是不可避免的。你可以做的是减少它。如果你的 Redis 和应用服务器在同一个区域,那么这不会是一个大问题。如果您的应用程序不需要互联网访问,那么您可以将它们放在同一个 VPC 中。
- 这取决于。如果您的“应用程序 A”每秒都在写入大对象,那么“应用程序 B”在读取时会受到影响,因为 Redis 是单线程的。如果您的两个应用程序都只发出快速请求(例如:在小型对象上获取/设置),那么这将不是什么大问题。
如果您对此有所顾虑,可以检查复制以提供更高的可用性。
复制既可以用于
scalability
,以便为只读查询提供多个副本(例如,可以将慢 O(N) 操作卸载到副本),也可以仅用于提高数据安全性和high availability
.
推荐阅读
- algorithm - 计数排序的下限为 O(n)
- c - 从 uint16_t 转换为 int32_t 需要中间转换为 int16_t
- java - Android Studio Java 位图工厂返回 null
- c# - 无法从实现它的子类中读取接口属性?
- java - 每次按下(单击)Jbutton 时如何在现有按钮组中创建一个新的 JButton 实例
- java - 当 @Around 用于 Spring AOP 时,不会检索数据
- python - 仅当代码在 Python 3.8 中使用 Selenium 在页面上找到某个单词时,如何才能启动代码序列?
- r - 当需要在主中进行对数转换时绘制辅助 Y 轴
- python - 在 for 循环中列出问题(get_object_or_404)的答案。如何将每个答案也作为一个对象中的一个对象?
- python - 简单的统计问题有一个(不是那么)简单的答案