栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据存储方式更改引发的一些感想

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据存储方式更改引发的一些感想

今天遇到一个BUG,新创建不为零的数据,但是取到的值为零。一路Debug发现存数据貌似没有什么问题,取数据的代码逻辑上没有什么问题,但是却取不到数据。但是经过仔细研究发现,存数据的时候将数据存入了MySQL,而取数据的时候却是从Redis中取出,需要将存数据过程改为存入Redis。

//剩余次数存储在Redis中
RedissonUtil.set(CacheNameConstants.API_REAL_TOKEN + token, apisqPo.getDycs());

这时新存入的数据都能够正常的取到了,但之前的数据仍然无法取到。这时遇到的问题就是之前MySQL中的数据也需要存入Redis。

可以通过写一个测试类,来从MySQL中查询所有信息,并将其存入Redis中。

import xxxxxx
......
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisInsert {

    @Autowired
    private GxApiYyglMapper gxApiYyglMapper;

    @Test
    public void insertToRedis() throws Exception{
        List gxApiYygls = gxApiYyglMapper.findAll(GxApiYygl.class);
        for(GxApiYygl gxApiYygl : gxApiYygls) {
            String token = gxApiYygl.getToken();
            RedissonUtil.set(CacheNameConstants.API_REAL_TOKEN + token,gxApiYygl.getSycs());
        }
    }
}

问题虽然很简单,但是在分析这个问题的过程中,有一些感触。

就像C(++)分配的内存一定要释放,malloc/free(new/delete)一定要成对出现那样,资源的获取与释放,连接的打开与关闭(或try with resource),数据的存取,一定要以相同的方式成对出现。

将项目中一些常用到的数据存储在Redis中能够大幅度改善性能。项目原来设计为将这些数据存储在MySQL中,更改代码逻辑使得这些数据存储在Redis后,出现了一些数据项为0的BUG。这时,虽然数据的存取方式相同且成对出现了,但是仍然改变不了与已经持久化的数据不兼容的问题。我们还需要将之前的数据同步到Redis中。

假如Redis的数据在持久化前丢失了,怎么办?能否定期将Redis的数据同步到MySQL中?这样能将损失尽可能减少。

数据库中的数据能够更改,人生过去的时光却不可能重来。人生就像区块链那样,经历过的一切,有过的幸运或是遗憾都不会改变,哪怕存取数据的方式已经更改。我们所能做的只有做好当下,不断优化自己的存取方式,争取能够把握住未来罢了。当然,我们也能将以前的数据同步到新的存储中,怎么做呢?读取旧的数据,并存入新的存储。具体来说就是,过去那些想做却又能力不够的事情,能不能再尝试一下呢?以后遇到了喜欢的姑娘,能不能鼓起勇气呢?曾经有过的梦想,能不能再去追一回呢?

往者不可谏,来者犹可追

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/601053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号