spring-data-redis提供了多种serializer策略,这对使用jedis的开发者而言,实在是非常便捷。sdr提供了4种内置的serializer:
- JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),数据以字节流存储
- StringRedisSerializer:字符串编码,数据以string存储
- JacksonJsonRedisSerializer:json格式存储
- OxmSerializer:xml格式存储
其中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的序列化策略,其中“JacksonJsonRedisSerializer”与“OxmSerializer”都是基于stirng存储,因此它们是较为“高级”的序列化(最终还是使用string解析以及构建java对象)。
RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”:
1) keySerializer :对于普通K-V操作时,key采取的序列化策略
2) valueSerializer:value采取的序列化策略
3) hashKeySerializer: 在hash数据结构中,hash-key的序列化策略
4) hashValueSerializer:hash-value的序列化策略
无论如何,建议key/hashKey采用StringRedisSerializer。
接下来,通过实例描述如何使用它们,可以首先参考“spring-data-redis特性”:
一. JdkSerializationRedisSerializer/StringRedisSerializer
1) spring配置文件
<bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory"></property> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> </property> <property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> </property> </bean>
2) 程序实例:
ValueOperations<String, User> valueOper = redisTemplate.opsForValue(); User user = new User("zhangsan",12); valueOper.set("user:1", user); System.out.println(valueOper.get("user:1").getName());
其中User为pojo类,且需要实现Serializable接口。
二.sdr与json
1) spring配置:
<bean id="jsonSerializer" class="com.sample.redis.sdr.JsonRedisSerializer"/> <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory"></property> <property name="defaultSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> </bean>
并没有在配置文件中,使用JacksonJsonRedisSerializer,因为这样实在是麻烦而且不灵活(主要是jackson需要ClassType)。我们将在java代码进行转换,因为通过java代码,使用jackson工具将json字符串转换成javabean是非常简单的。
2) 程序实例:
/** * 不使用sdr自带的json序列化工具,一切操作基于string **/ public class JsonRedisSeriaziler{ public static final String EMPTY_JSON = "{}"; public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); protected ObjectMapper objectMapper = new ObjectMapper(); public JsonRedisSeriaziler(){} /** * java-object as json-string * @param object * @return */ public String seriazileAsString(Object object){ if (object== null) { return EMPTY_JSON; } try { return this.objectMapper.writeValueAsString(object); } catch (Exception ex) { throw new SerializationException("Could not write JSON: " + ex.getMessage(), ex); } } /** * json-string to java-object * @param str * @return */ public <T> T deserializeAsObject(String str,Class<T> clazz){ if(str == null || clazz == null){ return null; } try{ return this.objectMapper.readValue(str, clazz); }catch (Exception ex) { throw new SerializationException("Could not write JSON: " + ex.getMessage(), ex); } } }
public class RedisClientTest { private JsonRedisSeriaziler seriaziler; private RedisTemplate redisTemplate; public void setSeriaziler(JsonRedisSeriaziler seriaziler) { this.seriaziler = seriaziler; } public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public void insertUser(User user){ ValueOperations<String, String> operations = redisTemplate.opsForValue(); operations.set("user:" + user.getName(), seriaziler.seriazileAsString(user)); } public User getUser(String name){ ValueOperations<String, String> operations = redisTemplate.opsForValue(); String json = operations.get("user:" + name); return seriaziler.deserializeAsObject(json, User.class); } }
三.sdr与xml
实施办法可以参见本文“sdr与json”,同时参考spring-oxm相关文档。
相关推荐
在处理数据序列化方面,Spring-data-redis允许自定义Serializer,如使用Jackson2JsonRedisSerializer进行JSON序列化。源码中,DefaultRedisSerializer类实现了这一功能,通过反射和反序列化技术,将Java对象与Redis...
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> ``` 现在我们已经配置好了基础的Redis连接,接下来是实现业务逻辑。在Spring MVC的控制器中,可以注入`...
2. **创建RedisTemplate实例**:`RedisTemplate`是Spring Data Redis提供的核心模板类,用于执行Redis的各种操作。我们需要配置一个`RedisTemplate` bean,并指定`RedisConnectionFactory`: ```xml ...
<artifactId>spring-boot-starter-data-redis ``` 接着,配置 Redis 连接信息。在 `application.yml` 或 `application.properties` 文件中添加以下配置: ```yaml spring: redis: host: localhost port: 6379...
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.io.Serializable; @...
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> <!-- StringRedisTemplate 配置 --> <bean id="stringRedisTemplate" class="org.springframework.data....
一旦配置完成,Spring Boot会自动创建RedisTemplate和StringRedisTemplate实例,它们是操作Redis的主要工具。你可以通过@Autowired注解注入到你需要的类中,例如: ```java @Autowired private RedisTemplate, ...
1. **引入依赖**: 首先,你需要在项目中添加 Redis 和 Spring Data Redis 相关的依赖。如果是 Maven 项目,可以在 `pom.xml` 文件中添加以下依赖: ```xml <groupId>org.springframework.boot <artifactId>...
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> ``` (4) 在SpringMVC Controller中注入RedisTemplate,实现数据操作。 ```java @Autowired private ...
<artifactId>spring-boot-starter-data-redis ``` 接下来,配置Redis连接。在Spring Boot项目中,通常通过application.yml或application.properties文件来配置: ```yaml spring: redis: host: localhost ...
Spring提供了`spring-data-redis`模块,使得与Redis的交互变得简单。通过使用Spring Data Redis,开发者可以利用注解驱动的方法来操作Redis数据库。 在项目结构中,`com.kevin.server`包可能包含了我们的核心业务...
<bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer"> <constructor-arg> <value type="java.lang.Class">com.example.YourDomainClass</value> </constructor-arg> ```...
Spring Data Redis项目提供了一套完整的Redis集成方案。在Maven工程中,可以在pom.xml文件中引入以下依赖: ```xml <groupId>org.springframework.data <artifactId>spring-data-redis <version>2.5.x.RELEASE ...
1. **RedisTemplate**:Spring Data Redis提供的核心模板类,它封装了对Redis的操作,如字符串、哈希、列表、集合、有序集合等数据类型的CRUD操作。使用`@Autowired`注解可以将其注入到需要使用Redis的类中。 2. **...
在Spring中,我们通常会使用`RedisTemplate`来操作Redis,通过@Bean注解实例化: ```java @Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { ...
Spring Data Redis 提供了丰富的 API 来操作 Redis 数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。 总结来说,Spring Boot 结合 Redis 提供了一种高效、便捷的...
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import ...
Jedis 是 Java 开发者常用的 Redis 客户端库,而 Spring Data Redis 是 Spring 框架的一部分,它提供了与 Redis 集成的高级抽象。在“征服 Redis + Jedis + Spring (三)—— 列表操作”这一主题中,我们将深入探讨...
在Spring框架中整合Redis,我们可以使用Spring Data Redis模块,它提供了一套丰富的RedisTemplate和StringRedisTemplate接口,简化了与Redis的交互。例如,对于对象的存储,我们可以创建一个实体类,通过注解`@Redis...