我们之前的做法都是经常查询基础,其实这些数据没有经常操作增改删等的话,我们可以查询一次就好然后放到redis变好。这时就有人有疑问了,那如果喔改动了,岂不是用不到了新的了。如果是这样的话你设置一个时效性。比如你设置时效性为每天12点或者一周、一个月等等清除redis,根据你自己需求而定,然后重新加载新的到redis中。首先你载入redis做个判断,避免重复加载。你先判断能不能拿到从redis中,如果不能拿到则查询放入redis中,否则不需要查询数据库。有的人说为啥启动就要加载初始化数据呢,我登陆后加载不好么,之前喔也是这么做,后面喔才发现这个会业务代码,更快,这些不经常操作的数据,我们一开始加载的话,就不会我们操作业务去操作,从而也可以说提高了点性能吧为了业务代码。话不多说上代码,目前提供两种方法。

一、启动类实现 CommandLineRunner 


@SpringBootApplication
public class   Zkt5gBuAdminApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(Zkt5gBuAdminApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        initData()
    }

    @Autowired
    private XXXXService XXXService;

    
    private void  initData(){
        XXXService.xxxfuncation();
    } 
}

二、用注解形式进行加载 @PostConstruct ,先创建一个类 RedisInitDataRunner 

@Configuration
public class RedisInitDataRunner {

    @Autowired
    private xxxService xxxService;
    /**
     * 创建线程池,默认10个线程
     */
    public static final ExecutorService pool = Executors.newFixedThreadPool(10);

    /**
     * 初始化数据
     */
    @PostConstruct
    public void initData() {
        pool.execute(new Runnable() {
            @Override
            public void run() {
                xxxService.xxxfuncation();
            }
        });
    }
}

写的不是很好有不好的地方欢迎指出。谢谢,也希望能够帮得到需要帮助的人

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐