微服务上面做一个缓存

来源:5-2 大白话剖析服务发现原理

LittleGoblin

2022-11-26

问题一:老师,这个缓存一般用哪个类来存储?Map?Redis?还是别的线程安全的集合?还是其他工具类?

问题二:微服务上做一个缓存,通过定时任务来做。以内容微服务为例,由于内容微服务的实例有多个,那么所有的内容微服务的实例都要去更新?

问题三:本地缓存的微服务的地址,这个地址是ip的形式吗?例如:http://192.168.1.1:8080/

问题四:本地缓存的地址如何和Ribbon/Feign一起使用?我以Ribbon为例描述问题,使用了Ribbon后,内容中心调用微服务的接口的代码:

UserDTO userDTO = this.restTemplate.getForObject("http://user-center/users/{userId}, UserDTO.class, userId);

这行代码的意思是:Ribbon会自动的把user-center名称转换成用户中心在nacos上面的地址,并且去进行负载均衡算法,计算出一个实例给我们请求。

那本节你提到的微服务调用是直接调用的,从本地缓存拿到想要调用的微服务的地址,不是先去请求服务发现组件再去调用的。

那整合了Ribbon后,本地缓存这个操作还需要吗?如果需要,怎么一起协作呢?

写回答

1回答

大目

2022-11-28

问题1:本地缓存,一个map即可

问题2:是的

问题3:可以是基于IP的,也可以是主机名的。对于spring cloud alibaba,是基于IP;如果用的spring cloud,注册中心用的eureka,那默认是基于主机名的,可以配置。

问题4:ribbon内部实现了服务发现缓存。

0
2
大目
回复
LittleGoblin
是的,不需要的哦
2022-12-15
共2条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3085 学习 · 1324 问题

查看课程