多个项目同时使用一个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
![3145530-0748816a21e1840c.png](https://i-blog.csdnimg.cn/blog_migrate/27b3f8635fb25454285d5cddf9fdde03.png)
项目a.png
项目b
![3145530-6965e7aa07886865.png](https://i-blog.csdnimg.cn/blog_migrate/4a0b03de623fe3774e072f1c69e7e8ed.png)
项目b.png
查看代码
项目a
![3145530-f08bfb2bbd7f901e.png](https://i-blog.csdnimg.cn/blog_migrate/25509747ab3a05449f4143cf0788ee87.png)
项目a.png
项目b
![3145530-954955cd74163568.png](https://i-blog.csdnimg.cn/blog_migrate/887e5f0fe64a4a0d5cce4e5fd9f0073c.png)
项目b.png
红框中为差异的地方
原因分析
RedisTemplate和StringRedisTemplate对于数据的处理是不一样的
虽然我们都是存储的String类型,在RedisTemplate中静jackson处理之后还是一个对象,有"",而使用StringRedisTemplate处理过之后就是一个文本,没有""。
所以当所以当项目a去解析项目b写入的数据时,因为没有双引号,识别为对象(number/bool)而非String。