美文网首页
Redis共享数据时的异常

Redis共享数据时的异常

作者: 谁在烽烟彼岸 | 来源:发表于2019-09-27 14:41 被阅读0次

    多个项目同时使用一个redis,数据共享

    依赖

    项目a使用

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.47</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.4</version>
    </dependency>
    

    项目b使用

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.44</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.10</version>
    </dependency>
    

    状况

    当项目a/b使用自己写入数据一切正常,
    当项目a使用项目b的写入的数据时,无法读取,

    org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized token 'article_5d81fceea0ef1c017f76ae7d': was expecting ('true', 'false' or 'null')
     at [Source: [B@68261ba; line: 1, column: 65]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'article_5d81fceea0ef1c017f76ae7d': was expecting ('true', 'false' or 'null')
     at [Source: [B@68261ba; line: 1, column: 65]
            at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.deserialize(Jackson2JsonRedisSerializer.java:73)
            at org.springframework.data.redis.serializer.SerializationUtils.deserializeValues(SerializationUtils.java:50)
            at org.springframework.data.redis.serializer.SerializationUtils.deserialize(SerializationUtils.java:63)
            at org.springframework.data.redis.core.AbstractOperations.deserializeValues(AbstractOperations.java:253)
            at org.springframework.data.redis.core.DefaultValueOperations.multiGet(DefaultValueOperations.java:125)
    

    查询redis数据库发现数据存在差异,差异存在于""
    项目a

    项目a.png
    项目b
    项目b.png

    查看代码
    项目a


    项目a.png

    项目b


    项目b.png

    红框中为差异的地方

    原因分析

    RedisTemplate和StringRedisTemplate对于数据的处理是不一样的
    虽然我们都是存储的String类型,在RedisTemplate中静jackson处理之后还是一个对象,有"",而使用StringRedisTemplate处理过之后就是一个文本,没有""
    所以当所以当项目a去解析项目b写入的数据时,因为没有双引号,识别为对象(number/bool)而非String。

    相关文章

      网友评论

          本文标题:Redis共享数据时的异常

          本文链接:https://www.haomeiwen.com/subject/eujructx.html