现象:
业务卡件,报错:模型输入项获取发生异常
原因:
现在模型接入是支持页面配置的,定时会将数据库的模型参数加载到缓存中,代码运行时模型参数都是直接从缓存中获取的
下午新增模型时,业务人员配错了模型参数
DI->MODEL1,model_key->mdoel1,model_type->130,
此时加载到缓存中,然后业务对该模型进行了修改,改为了
DI->MODEL2,model_key->mdoel1,model_type->130,
这时候由于缓存map是以DI作为主键并且缓存的刷新是直接更新而没有做清空处理
![](http://upload-images.jianshu.io/upload_images/28065404-96f3af23e424af53.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
这时候缓存再次将这条数据加入内存中,即此时缓存中对应了两个模型,即产生了脏数据
DI->MODEL1,model_key->mdoel1,model_type->130
DI->MODEL2,model_key->mdoel1,model_type->130
然后在模型输入项获取时会将模型model_key和model_type取出组成一个map,mdoel_key作为主键
![](http://upload-images.jianshu.io/upload_images/28065404-908780fc54e629d4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
这时候由上面的缓存记录可以看到,有两条模型参数对应同一moedl_key,就抛异常了;
处理办法:
重启应用以刷新缓存,清掉脏数据
改进措施:
1、业务层面:模型元数据配置按使用场景进行隔离
2、安全层面:模型配置增加审核机制
3、编码层面:加强异常数据场景测试
作者:上好佳28
链接:https://www.jianshu.com/p/27a77075715c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 标签:缓存,DI,type,模型,调用,key,model,异常 From: https://www.cnblogs.com/yogayao/p/17466885.html