具体业务模型如下:
公司产品比如一些物联网设备会时不时的发心跳包,我给这些心跳包中对于操作比较频繁的表,加了个redis。
1)我的redis是这样加的: 对于每个要加缓存的表,都写一个切面,在切面中进行缓存操作。
是否还有其他方法?因为这样每个表一个切面写的话,会导致下面的调度问题
2)调度问题:
不同的切面类中,我都有用他的实体类做相应的序列化方式,比如
// 设置hash的value序列化方式为 json
this.redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Equipment.class));
// 获取redis中的数据
equipment = (Equipment) this.redisTemplate.opsForHash().get(RedisConstant.EQUIIPMENT_HASH_KEY, equipmentId);
这个是切面 EquipmentReditAspect的序列化方式。
但是由于调度问题的出现,设置了序列化后,也有可能调度到别的代码块去执行了(比如执行了其他切面类的序列化方式,设置成了别的类)。而再跳到 获取redis中数据的那一行执行时,序列化直接报错了。
这种情况,我给这个代码块加 synchronized(this)也没用。
<p>加instanceof类型判断呢?</p>
...........不行,加这个判断没有意义~
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。