一、概述
最近在做性能优化,之前有一个业务是这样实现的:
1.温度报警后第三方通讯管理机直接把报警信息保存到数据库
2.我们在数据库中添加触发器,(BEFORE INSERT)根据这条报警信息处理业务逻辑,在数据库中插入“其他业务数据”
3.前端setTimeout每隔5秒ajax去后端查询“其他业务数据”(查库)
优化后这样实现:
两个微服务,消息中间件专门一个服务,接收消息存入数据库,存入redis;业务服务直接从redis获取
1.MQTT订阅通讯管理机报警事件主题
2.发生报警后,java中根据报警信息保存“其他业务数据”到数据库并放入redis缓存
3.前端setTimeout每隔5秒ajax去后端查询“其他业务数据”(改为从redis中获取)
4.下一步计划使用WebSocekt,去掉前端setTimeout
二、SpringBoot配置redis
pom.xml、application.properties、@EnableCaching等等这些配置就不列出来了,大家可以百度,提一下RedisTemplate的配置
RedisTemplate<String, Object>可以直接存直接存List、Map等,使用jackson2JsonRedisSerializer序列化,
package ; import java.lang.reflect.Method; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; @Configuration public class RedisConfiguration { @Bean