开发者社区> 问答> 正文

心跳包中引入redis缓存切面的设计问题,与调度问题。?报错

具体业务模型如下:

公司产品比如一些物联网设备会时不时的发心跳包,我给这些心跳包中对于操作比较频繁的表,加了个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)也没用。

 

 

展开
收起
爱吃鱼的程序员 2020-06-06 10:36:40 917 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>加instanceof类型判断呢?</p>
                    
    
                            ...........不行,加这个判断没有意义~
    
    2020-06-06 10:36:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ApsaraDB for Redis——与创客同行 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载