心跳包中引入redis缓存切面的设计问题,与调度问题。?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

爱吃鱼的程序员 2020-06-06 10:36:40 21

具体业务模型如下:

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

 

 

缓存 JSON NoSQL 物联网 调度 Redis 数据格式
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-06 10:36:55
                        <p>加instanceof类型判断呢?</p>
                    
    
                            ...........不行,加这个判断没有意义~
    
    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程