redis springboot重新发行版值包含\x00数据

kknvjkwl  于 2023-01-20  发布在  Redis
关注(0)|答案(2)|浏览(140)

我使用的是springboot 1.5.9和redis-template,但是当我保存数据到redis时,我发现值是错误的,看起来像这样:

0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00[{\"id\":1,\"name\":\"RandomName1512028732904\",\"salary\":12.34},{\"id\":2,\"name\":\"RandomName1512028735366\",\"salary\":12.34},{\"id\":3,\"name\":\"RandomName1512028738439\",\"salary\":12.34},{\"id\":4,\"name\":\"RandomName1512028750450\",\"salary\":12.34},{\"id\":5,\"name\":\"RandomName1512031361305\",\"salary\":12.34},{\"id\":6,\"name\":\"RandomName1512031361972\",\"salary\":12.34},{\"id\":7,\"name\":\"1512116645365\",\"salary\":12.34}]"
redisTemplate.opsForValue().set("indexCache", data, 10000);

我怎样才能把纯json保存到redis???

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}
lkaoscv7

lkaoscv71#

redisTemplate.opsForValue().set("indexCache", data, 10000);

实际上,这个方法有四个参数。

redisTemplate.opsForValue().set("indexCache", data, 10000,TimeUnits.Seconds);
ukdjmx9f

ukdjmx9f2#

有多个名为set的方法具有不同的参数,但您可能通过从指定的偏移量开始使用set,如下所示:

/**
 * Overwrite parts of {@code key} starting at the specified {@code offset} with given {@code value}.
 *
 * @param key must not be {@literal null}.
 * @param value
 * @param offset
 * @see <a href="https://redis.io/commands/setrange">Redis Documentation: SETRANGE</a>
 */
void set(K key, V value, long offset);

我想你应该用的正确方法是

/**
 * Set the {@code value} and expiration {@code timeout} for {@code key}.
 *
 * @param key must not be {@literal null}.
 * @param value must not be {@literal null}.
 * @param timeout the key expiration timeout.
 * @param unit must not be {@literal null}.
 * @see <a href="https://redis.io/commands/setex">Redis Documentation: SETEX</a>
 */
void set(K key, V value, long timeout, TimeUnit unit);

因此您不能发出param TimeUnit,否则您将遇到您提出的问题。

相关问题