调用结果缓存

通过缓存结果加速访问速度

功能说明

Dubbo支持了服务端结果缓存和客户端结果缓存。

缓存类型

目前Dubbo3.0版本及高于其的版本都支持以下几种内置的缓存策略:

  • lru 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。
  • lfu基于淘汰使用频次最低的原则来实现缓存策略。
  • expiring基于过期时间原则来实现缓存策略。
  • threadlocal 当前线程缓存,比如一个页面渲染,用到很多 portal,每个 portal 都要去查用户信息,通过线程缓存,可以减少这种多余访问。
  • jcacheJSR107 集成,可以桥接各种缓存实现。

缓存类型可扩展 缓存扩展

关于 示例代码

使用场景

结果缓存,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量。

使用方式

客户端缓存

Dubbo中对RPC调用结果缓存支持接口粒度和方法粒度的配置控制。

接口粒度

xml配置方式:

  1. <dubbo:reference interface="com.foo.DemoService" cache="lru" />

注解配置方式:

  1. @DubboReference(cache = "lru")
  2. private DemoService demoService;

方法粒度

  1. <dubbo:reference interface="com.foo.DemoService">
  2. <dubbo:method name="sayHello" cache="lru" />
  3. </dubbo:reference>

注解配置方式:

  1. @DubboReference(methods = {@Method(name="sayHello",cache = "lru")})
  2. private DemoService demoService;

服务端缓存

接口粒度

xml配置方式:

  1. <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
  2. <dubbo:service interface="com.foo.DemoService" ref="demoService" cache="lru" />

注解配置方式:

  1. @DubboService(cache = "lru")
  2. public class DemoServiceImpl implements DemoService {
  3. private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);
  4. @Override
  5. public String sayHello(String name) {
  6. logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
  7. return "Hello " + name;
  8. }
  9. }

方法粒度

  1. <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
  2. <dubbo:service interface="com.foo.DemoService" ref="demoService" cache="lru" />
  3. <dubbo:method name="sayHello" cache="lru" />
  4. </dubbo:service>

注解配置方式:

  1. @DubboService(methods = {@Method(name="sayHello",cache = "lru")})
  2. public class DemoServiceImpl implements DemoService {
  3. private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);
  4. @Override
  5. public String sayHello(String name) {
  6. logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
  7. return "Hello " + name;
  8. }
  9. }

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)