spring redis 的value值有前缀乱码 xml配置
时间: 2023-10-26 16:06:20 浏览: 53
Spring Redis默认使用JdkSerializationRedisSerializer对value进行序列化,而JdkSerializationRedisSerializer序列化的结果包含了一些前缀和后缀的乱码。如果不想出现乱码,可以使用其他的序列化器,比如StringRedisSerializer。
在Spring Redis的xml配置文件中,可以通过以下方式配置使用StringRedisSerializer:
```
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<property name="keySerializer" ref="stringRedisSerializer"/>
<property name="valueSerializer" ref="stringRedisSerializer"/>
</bean>
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
```
这样配置后,存储到Redis中的value值就不会有前缀乱码了。
相关问题
spring-data-redis的value值有前缀乱码
可能是因为使用了默认的序列化器,而默认的序列化器会在value前面添加一些乱码前缀。解决方法是使用自定义的序列化器,或者指定使用Jackson序列化器。
使用自定义的序列化器可以继承RedisSerializer类,重写serialize和deserialize方法,然后将自定义的序列化器注入到RedisTemplate中。
使用Jackson序列化器可以通过配置RedisTemplate的valueSerializer属性来指定使用Jackson序列化器。具体配置如下:
```java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 使用Jackson序列化器
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
```
spring-mvc.xml 配置redis
以下是在 Spring MVC 中配置 Redis 的步骤:
1. 引入 Redis 相关依赖
```xml
<!-- Redis 相关依赖 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${spring.data.redis.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
```
其中,`${spring.data.redis.version}` 和 `${jedis.version}` 分别是 Spring Data Redis 和 Jedis 的版本号。
2. 配置 Redis 连接池
在 `spring-mvc.xml` 文件中添加以下配置:
```xml
<!-- Redis 连接池配置 -->
<bean id="redisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="200"/>
<property name="maxIdle" value="50"/>
<property name="minIdle" value="10"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="30000"/>
<property name="numTestsPerEvictionRun" value="10"/>
<property name="minEvictableIdleTimeMillis" value="60000"/>
<property name="softMinEvictableIdleTimeMillis" value="10000"/>
</bean>
```
上述配置中,`redisPoolConfig` 是一个连接池配置的 bean,其中包含了一些连接池的属性配置。
3. 配置 Redis 连接工厂
在 `spring-mvc.xml` 文件中添加以下配置:
```xml
<!-- Redis 连接工厂配置 -->
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="poolConfig" ref="redisPoolConfig"/>
<property name="hostName" value="${spring.redis.host}"/>
<property name="port" value="${spring.redis.port}"/>
<property name="database" value="${spring.redis.database}"/>
<property name="password" value="${spring.redis.password}"/>
<property name="timeout" value="${spring.redis.timeout}"/>
<property name="usePool" value="true"/>
</bean>
```
上述配置中,`redisConnectionFactory` 是一个连接工厂的 bean,其中包含了 Redis 连接的相关配置。
4. 配置 Redis 模板
在 `spring-mvc.xml` 文件中添加以下配置:
```xml
<!-- Redis 模板配置 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="redisConnectionFactory"/>
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
</property>
</bean>
```
上述配置中,`redisTemplate` 是一个 Redis 模板的 bean,其中配置了 Redis 的序列化方式。
5. 配置 Redis 缓存管理器
在 `spring-mvc.xml` 文件中添加以下配置:
```xml
<!-- Redis 缓存管理器配置 -->
<bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
<constructor-arg name="redisTemplate" ref="redisTemplate"/>
<property name="cacheNames">
<list>
<value>cacheName1</value>
<value>cacheName2</value>
</list>
</property>
<property name="defaultExpiration" value="3600"/>
</bean>
```
上述配置中,`redisCacheManager` 是一个 Redis 缓存管理器的 bean,其中配置了缓存的名称和过期时间。
至此,Redis 的配置就完成了。在需要使用 Redis 的地方,可以直接注入 `redisTemplate` 或 `redisCacheManager` 来实现操作 Redis 缓存。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)