前言
本章讲解SpringData Redis对象处理的相关知识
方法
1.概念
前面章节我们学习了Spring+SpringData Redis项目的搭建过程,并且进行了简单的测试。
本次将通过对象处理来进一步讲解SpringData Redis。
2.对象处理步骤
1)引入Json转换相关Jar坐标
<!-- 引入Json处理相关jar -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
因为我们存储对象到Redis中,采用Json格式存储最为恰当。
2)修改RedisTemplate的序列化器
<!-- 配置Redis模板类 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<!-- redis序列化器 -->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
<constructor-arg type="java.lang.Class" value="java.lang.Object" />
</bean>
</property>
</bean>
由于我们redis的hash类型:
redis语法:hset 键 属性键 属性值
这里键我们采用的是String类型的序列化器。这里也就是第一个序列化器。
属性键我们依然采用的是String类型的序列化器。这里也就是第三个序列化器。
属性值我们采用的是Json类型的序列化器。这里也就是最后一个序列化器。
序列化器的配置尤为重要!!!
3)编写测试代码,存储数据和获取数据
定义实体类文件,实现序列化接口——Serializable
package cn.edu.ccut.bo;
import java.io.Serializable;
public class Users implements Serializable {
private Integer id;
private String username;
private String password;
public Users() {
}
public Users(Integer id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
编写测试代码,存储数据:
@Test
public void testRedis01(){
//本次添加对象采用hash存储,key为users,代表表名
//其存储的键值对采用key=id,value=对象的方法
//本次采用Json格式存储
Users user01 = new Users(1,"jwang","jwang");
Users user02 = new Users(2,"zhangsan","zhangsan");
Users user03 = new Users(3,"lisi","lisi");
redisTemplate.opsForHash().put("users", user01.getId().toString(), user01);
redisTemplate.opsForHash().put("users", user02.getId().toString(), user02);
redisTemplate.opsForHash().put("users", user03.getId().toString(), user03);
}
执行结果在redis中查看为:
这里我们使用Redis客户端工具进行查看:
由此可见,我们成功的完成了数据的添加,可以理解users为表名哦!
那么既然添加可以,获取怎么玩呢?
@Test
public void testRedis02(){
List<Object> users = redisTemplate.opsForHash().values("users");
for (Object user : users) {
System.out.println(user);
}
}
测试结果如下: