您的位置:首页 > 数据库 > Redis

redis的java操作(二):redis存取java对象,java对象的序列化

2018-07-24 11:02 197 查看
版权声明:版权所有 © 侵权必究 https://blog.csdn.net/m0_38075425/article/details/81180768

在大量的应用场景中,我们需要使用redis存取java对象。redis存取对象需要将对象序列化。

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。之后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。例如此处,我们将java对象转化为bytes数组的过程称为序列化,将bytes转化为java对象的过程称为反序列化。

首先是pom依赖:

[code]<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

1.我们假设要存储User对象,User类代码如下,注意,一个java类对象想要序列化,必须实现Serializable接口。

[code]public class User implements Serializable {

private String id;
private String username;
private String password;
private String nickname;
private String gender;

public String getId() {
return id;
}

public void setId(String 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;
}

public String getNickname() {
return nickname;
}

public void setNickname(String nickname) {
this.nickname = nickname;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", nickname='" + nickname + '\'' +
", gender='" + gender + '\'' +
'}';
}
}

2.将该对象序列化和反序列化的类,代码如下:

[code]public class SerializeUtil {

// 序列化
public static byte[] serialize(Object object) {

ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
bytes = baos.toByteArray();
} catch (Exception e) {
System.err.println("序列化失败" + e.getMessage());
}
return bytes;
}

// 反序列化
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {

ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
} catch (Exception e) {
System.err.println("反序列化失败" + e.getMessage());
}
return ois.readObject();
}
}

3.redis操作java(POJO)对象的代码如下:

[code]public class RedisObjectDemo {

public static void main(String args[]){

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(8);
config.setMaxTotal(8);
config.setMaxWaitMillis(1000);
JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, null, 0);
Jedis jedis = jedisPool.getResource();
User user = new User();
user.setId("1");
user.setGender("男");
user.setNickname("cherish");
user.setPassword("123456");
user.setUsername("admin");
jedis.set("user".getBytes(), SerializeUtil.serialize(user));
System.out.println("--------------------------------------------------------------------");
try {
User userResult = (User) SerializeUtil.deserialize(jedis.get("user".getBytes()));
System.out.println(userResult.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}

关于java如何连接和操作redis,笔者在上篇博客中已经说明,连接地址:https://blog.csdn.net/m0_38075425/article/details/81179510

4.运行测试,如下图:

redis存取对象成功。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: