探究redis fake 方法未实现的问题原因及解决方案

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

探究redis fake 方法未实现的问题原因及解决方案

1 问题描述

        在使用轻量级环境的时候,偶有发现在操作一些功能的时候会报这个错,redis fake 方法未实现。

        例1:物料需求计划中,初始化BOM结构树报错

kd.mmc.mrp.exception.MRPBizException: root: kd.bos.exception.KDException: redis fake 方法未实现
at kd.bos.fake.redis.JedisClientFake.hset(JedisClientFake.java:998)
at kd.mmc.mrp.framework.cache.MRPRedisStore.mapSet(MRPRedisStore.java:255)
at kd.mmc.mrp.framework.cache.MRPCacheManager.putSubData(MRPCacheManager.java:102)
at kd.mmc.mrp.calcnode.framework.mq.resolver.query.AbstractMRPResDataQueryResolver.saveDatas(AbstractMRPResDataQueryResolver.java:71)
at kd.mmc.mrp.calcnode.framework.mq.resolver.query.MRPBOMDataQueryResolver.saveDatas(MRPBOMDataQueryResolver.java:34)
at kd.mmc.mrp.calcnode.framework.mq.resolver.query.AbstractMRPResDataQueryResolver.execute(AbstractMRPResDataQueryResolver.java:48)
at kd.mmc.mrp.calcnode.framework.mq.resolver.query.MRPBOMDataQueryResolver.execute(MRPBOMDataQueryResolver.java:16)
at kd.mmc.mrp.calcnode.framework.thread.MRPCalcWorker.run(MRPCalcWorker.java:242)
at kd.mmc.mrp.calcnode.framework.thread.MRPCalcWorker.resolveAlone(MRPCalcWorker.java:55)


        例2财务应付单下推付款申请单并下推付款单,无法自动结算,通过分布式事务排查到这个报错

2024-04-17 16:07:01.335 ERROR   --- [IdempotentWatchDog/traceId:da16ab70177dbbe7/time:1713340621310] k.b.k.c.i.s.IdempotentRedisStorageImpl   : {traceId:1220a1e4825ef3dd} redis renewal err IDEM:ierp:1565321489509515264:1713169793618
kd.bos.exception.KDException: redis fake 方法未实现
at kd.bos.fake.redis.JedisClientFake.pexpire(JedisClientFake.java:305)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at kd.bos.redis.JedisClientProxy.invoke(JedisClientProxy.java:37)
at com.sun.proxy.$Proxy21.pexpire(Unknown Source)
at kd.bos.kdtx.common.idemponent.storage.IdempotentRedisStorageImpl.renewal(IdempotentRedisStorageImpl.java:123)
at kd.bos.kdtx.common.idemponent.watchdog.IdempotentWatchDog.renewalByDBRoute(IdempotentWatchDog.java:88)
at kd.bos.kdtx.common.idemponent.watchdog.IdempotentWatchDog.renewal(IdempotentWatchDog.java:82)
at kd.bos.kdtx.common.idemponent.watchdog.IdempotentWatchDog.run(IdempotentWatchDog.java:64)
at kd.bos.threads.impl.RequestContextRunnable.run(RequestContextRunnable.java:59)
at kd.bos.thread.ThreadLifeCycleManager$RunnableWrap.run(ThreadLifeCycleManager.java:267)
at java.lang.Thread.run(Thread.java:748)


        例3:在某个版本的标准的引入引出功能不能使用报错

Caused by: kd.bos.exception.KDException: KDException: redis fake 方法未实现:[eval][keys=>679008189806542848IDGEN_SIGNER_CURSEQ_bas/coderule/26QTTKS0UGW+]
at kd.bos.cache.redis.RedisSessionlessCache.eval(RedisSessionlessCache.java:237)
at kd.bos.generator.common.cache.DistributeCacheUtil.lua(DistributeCacheUtil.java:87)
at kd.bos.generator.segment.SignerCache.updateCurseqIfCompare(SignerCache.java:144)
at kd.bos.generator.segment.SegmentConfig.updateCurseq(SegmentConfig.java:351)
at kd.bos.coderule.adaptor.FastCodeRuleSigner.updateMaxNumber(FastCodeRuleSigner.java:332)
at kd.bos.coderule.service.CodeRuleServiceImp.updateNumber(CodeRuleServiceImp.java:2245)
at kd.bos.coderule.service.CodeRuleServiceImp.updateMaxserialNumbers


2 原因分析

        首先要说明的一点是,这个问题是只发生在轻量级环境上的,而轻量级环境是供广大苍穹开发者安装在个人电脑上一套“学习版”的环境,为了让这套环境便于在相对配置较低的个人电脑上运行,轻量级环境相比gPaaS容器版环境少了不少组件,比如说monitor,redis,mq,以及文件服务器等组件。而苍穹的不少功能都是依赖于redis缓存的,所以在轻量级环境就用了一种替代的方式来实现,这种方式就是通过jvm内存式存储(可以简称为redis fake)来实现的。

        而这种是和真正redis,还是有区别的,redis的分布式集群,lua脚本,持久化的这些特性都是没有在苍穹轻量级的内存(redis fake)实现的,所以当一些业务功能使用redis的时候会报以上的错,如例2的pexpire方法在redis里面实现了,而在redis fake是没有实现的。下面的截图是pexpire方法被调用直接报异常,redis fake 方法未实现。

        当然随着版本的更迭,redis fake也在不断适配这些功能,像上面的以上1,3两种报错都在苍穹6.0通过补丁实现了,也就不会再报这种错误了。


3 解决方案

       如果是旧版本的轻量级环境可以通过下载最新版本的轻量化环境,也就是开发者助手,里面包含了最新版的redis fake 的适配,下面是相关文档。

https://vip.kingdee.com/knowledge/specialDetail/218022218066869248?category=218024956679336192&id=419439190506352128&productLineId=29&lang=zh-CN

        如果最新版依然有问题,可以通过提单或者在评论区留言,我会联系你们。

探究redis fake 方法未实现的问题原因及解决方案

1 问题描述 在使用轻量级环境的时候,偶有发现在操作一些功能的时候会报这个错,redis fake 方法未实现。 例1:物料...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息