[]
        
(Showing Draft Content)

缓存服务

在服务端命令中,有些数据获取需要较大开销,例如通过访问数据库获取数据,或者通过网络请求(WebService)获取数据。频繁的执行这样的操作可能会对服务器性能造成影响,而如果这部分数据实际变化不并不频繁,并且可以接受获取并不实时的数据,可以考虑使用缓存服务来缓存获取到的数据。

活字格服务端命令的上下文参数中的 CacheService 属性可以帮助开发者实现缓存服务。

public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        var cacheKey = "cacheKey";
        var cachedValue = dataContext.getCacheService().get(cacheKey);
        if (cachedValue == null)
        {
            cachedValue = "需要被缓存的值,通常,需要缓存的值来自数据库或网络请求";
            dataContext.getCacheService().add(cacheKey, cachedValue,Duration.ofMinutes(10));
        }
        var result = new ExecuteResult();
        result.setMessage(cachedValue.toString());
        return result;
    }

    @Override
    public String toString() {
        return "我的服务端命令插件";
    }
}

代码说明:

  1. 通过dataContext.getCacheService().get(cacheKey),检查制定cacheKey是否有缓存数据。

  2. 第一次请求时,缓存数据为空,则可以真正的通过访问数据库或网络获取数据

  3. 数据获取成功后,把数据通过dataContext.getCacheService().add(cacheKey, cachedValue);方法添加到缓存中。

    1. 第一个参数 cacheKey,不同的 cacheKey 用于区分不同的缓存,建议设计一个可以表达缓存内容且不会与其他缓存冲突的值,例如,请求时获取销售业绩排名前十的员工信息,cacheKey 可以为 “Top10_Sales_Cache_Data”;

    2. 第二个参数为缓存的内容;

    3. 第三个参数为缓存时长,示例代码中指定了缓存 10 分钟。通常应该根据业务数据的过期容忍程度和变化频繁程度来决定这个时间。时间达到时,缓存会被自动清空。再次请求数据时会执行第二步。

  1. 再次请求数据时,走到第一步,由于缓存存在,直接返回缓存中的数据