在项目中使用 redis存储 数据,提高 项目运行速度

在项目中发现从数据库中直接查找数据非常慢,所以想到了使用redis来加速

1. 引入依赖

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在yml配置中,设置redis地址

复制代码
spring:
  redis:
    host: localhost
    port: 6379
    password: xxxxx
    database: 1
    lettuce:
      pool:
        # 连接池中最大空闲连接
        max-idle: 8
        # 连接池中最大阻塞等待时间(如果为负值则说明无限制)
        max-wait: -1
        # 连接池中最大的空闲连接数
        max-active: 8

2. 设置redis序列化器

复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 * 当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,
 * 但是默认的key序列化器为JdkSerializationRedisSerializer,
 * 导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器。
 */
@Configuration
public class RedisTemplateConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<String ,String> redisTemplate = new RedisTemplate<>();//这里可以根据自己的需要修改,我因为键和值都是字符串类型的所以设置成了<String,String>
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setKeySerializer(RedisSerializer.string());//这里也需要修改
        return redisTemplate;
    }
}

3. 项目中使用

复制代码
@Service
public class InspectionStationInfoServiceImpl extends ServiceImpl<InspectionStationInfoMapper, InspectionStationInfo>
    implements IInspectionStationInfoService {

    @Autowired
    private RedisTemplate redisTemplate;

     /**
     * 根据单位id,查询对应机构的首检合格率
     * @param unitId 单位id
     * @return 首检合格率
     */
    private String firstInspectionPassRate(String unitId){
        ValueOperations<String ,String> operations = redisTemplate.opsForValue();
        String key = String.format("SZJDC:CHECKRESULT:BGBH:%s",unitId);
        //在redis中获取 首检合格率
        String rate = operations.get(key);
        return rate;
    }

}

4. 设置定时任务来将数据存储进redis,规定每天凌晨1点更新

java 复制代码
@Component
@Slf4j
public class FirstInspectionPassRateTask {
    @Autowired
    private CheckResultMapper checkResultMapper;

    @Autowired
    private InspectionStationInfoMapper inspectionStationInfoMapper;

    @Autowired
    private RedisTemplate redisTemplate;

    //每天凌晨一点
    @Scheduled(cron = "0 0 1 * * ?")
    public void calculateFirstInspectionPassRate(){
        log.info("####### 定时任务开启......");
        //单位id 集合
        List<String> unitIdList = inspectionStationInfoMapper.selectUnitId();
        unitIdList = Optional.ofNullable(unitIdList).orElse(new ArrayList<>());
        ValueOperations<String ,String> operations = redisTemplate.opsForValue();

        unitIdList.forEach(unitId -> {
            //根据单位id,查询对应机构的首检合格率
            String rate = checkResultMapper.firstInspectionPassRate(unitId);
            String key = String.format("SZJDC:CHECKRESULT:BGBH:%s",unitId);
            operations.set(key,rate);
        });
    }

}

后面如果有改变就继续写

相关推荐
洛克大航海1 小时前
解锁 PySpark SQL 的强大功能:有关 App Store 数据的端到端教程
linux·数据库·sql·pyspark sql
XueminXu3 小时前
ClickHouse数据库的表引擎
数据库·clickhouse·log·表引擎·mergetree·special·integrations
冒泡的肥皂3 小时前
MVCC初学demo(二
数据库·后端·mysql
代码程序猿RIP3 小时前
【Redis 】Redis 详解以及安装教程
数据库·etcd
小生凡一3 小时前
redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
数据库·redis·缓存
oe10193 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
小马哥编程3 小时前
【软考架构】案例分析-对比MySQL查询缓存与Memcached
java·数据库·mysql·缓存·架构·memcached
一 乐3 小时前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
折翼的恶魔4 小时前
SQL190 0级用户高难度试卷的平均用时和平均得分
java·数据库
煎蛋学姐4 小时前
SSM基于框架在线电影评论投票系统3gr0f(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·系统开发·ssm 框架·在线电影评论投票系统