Redis保存对象实例

该博客介绍了如何在Redis中存储对象实例。通过自定义序列化和反序列化方法,将Java对象转换为字节数组进行存储。示例展示了如何使用Jedis库设置和获取实现了Serializable接口的Person对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis没有直接存储对象的方法,不过Redis要以存储字节,所以可以先把对象自己写的一个序列化和反序列化的方法。


package com.comtop;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @ProjectName:Skeleton
 * @PackageName:com.comtop
 * @Verson :0.1
 * @CreateUser :Test
 * @CreateDate :2014-7-19上午10:47:11
 * @UseFor :
 */
public class JedisTest {
	JedisPool pool;
	Jedis jedis;

	@Before
	public void setUp() {
		JedisPoolConfig config = new JedisPoolConfig();
		pool = new JedisPool(config, "127.0.0.1");
		jedis = pool.getResource();
		// 密码验证
		jedis.auth("password");
	}

	@Test
	public void test() throws InterruptedException {
		Person person = new Person("123", "alan");
		jedis.set("person:123".getBytes(), SerializeUtil.ObjTOSerialize(person));
		person = new Person("234", "bruce");
		jedis.set("person:234".getBytes(), SerializeUtil.ObjTOSerialize(person));

		Person per = getObject("234");
		System.out.println(per);
	}

	private Person getObject(String id) {
		byte[] person = jedis.get(("person:" + id).getBytes());
		return (Person) SerializeUtil.unSerialize(person);
	}
}

class Person implements Serializable {
	private static final long serialVersionUID = 1L;
	private String id;
	private String name;

	/**
	 * @param id
	 * @param name
	 */
	Person(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString()
	{
		return this.id +" "+this.name ;
	}
}

class SerializeUtil {

	/**
	 * 
	 * @CreateUser:
	 * @ReturnType:byte[]
	 * @param obj
	 * @return
	 * @CreateDate:2014-7-19上午11:38:19
	 * @SerializeUtilUseFor :序列化一个对象
	 */
	public static byte[] ObjTOSerialize(Object obj) {
		ObjectOutputStream oos = null;
		ByteArrayOutputStream byteOut = null;
		try {
			byteOut = new ByteArrayOutputStream();
			oos = new ObjectOutputStream(byteOut);
			oos.writeObject(obj);
			byte[] bytes = byteOut.toByteArray();
			return bytes;
		} catch (Exception e) {
		}
		return null;
	}

	/**
	 * 
	 * @CreateUser:Test
	 * @ReturnType:Object
	 * @param bytes
	 * @return
	 * @CreateDate:2014-7-19上午11:38:29
	 * @SerializeUtilUseFor :反序列化
	 */
	public static Object unSerialize(byte[] bytes) {
		ByteArrayInputStream in = null;
		try {
			in = new ByteArrayInputStream(bytes);
			ObjectInputStream objIn = new ObjectInputStream(in);
			return objIn.readObject();
		} catch (Exception e) {
		}
		return null;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值