当前位置: 首页 > 面试题库 >

将Redis用作REST API的中间缓存

杨凯旋
2023-03-14
问题内容

我们有一个iOS应用,可通过REST
API与Django服务器通信。大多数数据由相当大的Item对象组成,这些对象包含一些渲染成单个平面词典的相关模型,并且该数据很少更改。

我们发现,查询这对于Postgres来说不是问题,但是生成JSON响应需要花费大量时间。另一方面,每个用户的项目集合也有所不同。

我想到了一个渲染系统,我们只需要为Item对象构建一个字典并将其保存为JSON字符串到redis中,这样我们就可以直接从redis提供API(例如HMGET(用户库中的项目ID)),这非常快捷,并使其相对容易地重新生成“渲染实例”,基本上仅是几个post_save信号。

我想知道这种设计有多好,是否有重大缺陷?也许有更好的方法来完成这项任务?


问题答案:

当然,我们在公司做同样的事情,使用Redis来存储不是JSON,而是存储从RESTful请求的后端数据库生成的大型XML字符串,它节省了大量的网络跃点和开销。

如果这是您第一次使用Redis,请记住一些注意事项…

专用Redis服务器
Redis是单线程的,应部署在具有足够CPU能力的专用服务器上。不要将其部署在您的应用程序或数据库服务器上。

高可用性
通过主/从复制设置Redis以实现高可用性。我知道Redis 集群已经取得了很多进展,因此您可能还需要检查HA。

高速缓存命中/未命中
当在Redis中检查高速缓存“命中”时,如果连接中断或发生任何异常,请不要使请求失败,只需默认使用数据库即可;缓存应该始终是“尽力而为”,因为数据库总是可以用作最后的选择。



 类似资料:
  • 问题内容: 我有postgres 9.3 db,我想使用Redis来缓存对数据库的调用(基本上像memcached一样)。我遵循了这些文档,这意味着我已经基本配置了redis以用作LRU缓存。但是不确定下一步该怎么做。如何告诉Redis跟踪对数据库的调用并缓存其输出?我怎么知道它正在工作? 问题答案: 用伪代码: 这可能必须是您正在使用的查询引擎的自定义适配器。

  • 问题内容: 我需要使用php创建一个具有大量数据的mysql数据库的解决方案。我的程序将有许多要求,我认为如果我使用缓存和OO数据库,我会得到很好的结果,但是我没有经验。 我认为,例如,如果我将保存在mysql中的信息缓存到redis数据库中,性能将会提高,但是我不知道这是否是个好主意,因此我希望有人来帮助我选择。 抱歉,如果我的英语不太好,我来自巴西。 问题答案: 是的,redis对此很有帮助。

  • 我使用Infinispan缓存作为会话作用域bean,在Spring MVC应用程序中缓存与用户相关的数据对象。 现在我们迁移到Spring引导,我们想使用@enableRedisHttp会话,但我们面临的问题是,附加到会话的InfinispanCacheManager是不可序列化的,产生以下异常: 通常,我们会平衡用户对多个节点的请求,因此需要在节点之间共享缓存(使用Redis store)。

  • 1. 前言 在MyBatis 缓存一节中,我们介绍了 MyBatis 的多级缓存。MyBatis 的二级缓存可在多个会话中共享缓存,但是这也加大了内存的使用空间,如果二级缓存空间占有量过多势必会导致程序运行空间的不足,因此我们需要将二级缓存转移到专业的缓存服务器上。 Redis 是一个高性能的 kv 数据库,被广泛的使用在缓存服务上,MyBatis 项目开发者提供了 Redis 缓存的实现。本小节

  • 在第一次运行时缓存单个项数据后,后续运行将生成一个不能转换为错误的。我想解决在缓存中存储单个项目后获取该项目的问题。 这是一个gradle Spring应用程序,它将数据存储在MySQL数据库中,并使用redis作为缓存管理器。 服务实现类 控制器类 REDIS CONFIG课程 我希望在浏览器上看到一个json客户端数据 查询单个项目时显示的错误为: 在终端上,redis将物品存储为

  • 我的spring boot项目有以下配置。 此外,我还关注maven对POM的依赖。 我有一个单独的redis服务器运行在我的本地机器上的定义端口。另外,在我的服务类中,我有像@cacheable、@cacheput这样的注释来支持缓存。