redis如何存对象和取对象实例

 

第一步:先创建redisUtil

package com.runtai.redis;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
public class RedisUtil {
	private static String ip="localhost";
	private static int port=6379;
	private static int timeout=10000;
	private static JedisPool pool=null;
	
	
	static{
		JedisPoolConfig config=new JedisPoolConfig();
		config.setMaxTotal(1024);//最大连接数
		config.setMaxIdle(200);//最大空闲实例数
		config.setMaxWaitMillis(10000);//等连接池给连接的最大时间,毫秒
		config.setTestOnBorrow(true);//borrow一个实例的时候,是否提前vaildate操作
		
		pool=new JedisPool(config,ip,port,timeout);
		
	}
	
	//得到redis连接
	public static Jedis getJedis(){
		if(pool!=null){
			return pool.getResource();
		}else{
			return null;
		}
	} 
	
	//关闭redis连接
	public static void close(final Jedis redis){
		if(redis != null){
			redis.close();
		}
	}
}

第二步:创建序列化工具SerializeUtil

package com.runtai.redis;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
public class SerializeUtil {
	/**
	 *
	 * 序列化
	 */
	public static byte[] serialize(Object obj) {
 
		ObjectOutputStream oos = null;
		ByteArrayOutputStream baos = null;
 
		try {
			// 序列化
			baos = new ByteArrayOutputStream();
			oos = new ObjectOutputStream(baos);
 
			oos.writeObject(obj);
			byte[] byteArray = baos.toByteArray();
			return byteArray;
 
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
 
	/**
	 *
	 * 反序列化
	 *
	 * @param bytes
	 * @return
	 */
	public static Object unSerialize(byte[] bytes) {
 
		ByteArrayInputStream bais = null;
 
		try {
			// 反序列化为对象
			bais = new ByteArrayInputStream(bytes);
			ObjectInputStream ois = new ObjectInputStream(bais);
			return ois.readObject();
 
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

第三步:创建user实体类对象


package com.runtai.entity;
 
import java.io.Serializable;
 
//实现redis得继承Serializable接口进行序列化
public class User implements Serializable{
	//定义一个序列号
	private static final long serialVersionUID = 1L;
	
    private Integer id;
 
    private String name;
    
    private String password;
    
    private String headPhoto; //头像图片
    
    private String src; //头像图片
    
    private String kind;
    
    private String createTime;
    
    private Integer status;//1正常2删除
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
 
	public String getPassword() {
		return password;
	}
 
	public void setPassword(String password) {
		this.password = password;
	}
 
	public String getHeadPhoto() {
		return headPhoto;
	}
 
	public void setHeadPhoto(String headPhoto) {
		this.headPhoto = headPhoto;
	}
 
	public String getKind() {
		return kind;
	}
 
	public void setKind(String kind) {
		this.kind = kind;
	}
 
	public String getCreateTime() {
		return createTime;
	}
 
	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}
 
	public String getSrc() {
		return src;
	}
 
	public void setSrc(String src) {
		this.src = src;
	}
 
	public Integer getStatus() {
		return status;
	}
 
	public void setStatus(Integer status) {
		this.status = status;
	}
	
	
}

第四步:开始利用redis存取对象

@Test
	public void textRrdis() {  
		Jedis redis=RedisUtil.getJedis();
		//设置user对象
		User user =new User();
		user.setId(1);
		user.setName("小明");
		redis.del("luoxu");
		//把user对象序列化后存储进redis
		redis.set("user".getBytes(),SerializeUtil.serialize(user));
		
		//从redis取出user后,把user对象反序列化
		User user2=(User) SerializeUtil.unSerialize(redis.get("user".getBytes()));
		System.out.println(JSON.toJSON(user2));
	}
### 如何在 Redis List 中对象集合 #### Java 实现 在 Java 中,可以通过序列化的方式将对象换为字节数组并储到 Redis 的列表中。以下是一个完整的实现: ```java import com.alibaba.fastjson.JSON; import redis.clients.jedis.Jedis; public class RedisListExample { public static String serialize(Object obj) { return JSON.toJSONString(obj); // 将对象序列化为 JSON 字符串[^1] } public static <T> T deserialize(String json, Class<T> clazz) { return JSON.parseObject(json, clazz); // 将 JSON 字符串反序列化为指定类型的对象 } public static void main(String[] args) { Jedis jedis = new Jedis("localhost", 6379); // 定义要储的对象集合 MyObject object1 = new MyObject(1, "Object One"); MyObject object2 = new MyObject(2, "Object Two"); // 序列化对象并将它们推入 Redis 列表 jedis.lpush("myObjects", serialize(object1)); jedis.lpush("myObjects", serialize(object2)); // 获整个列表中的所有元素 for (String serializedObj : jedis.lrange("myObjects", 0, -1)) { MyObject deserializedObj = deserialize(serializedObj, MyObject.class); System.out.println(deserializedObj.toString()); } } } class MyObject { private int id; private String name; public MyObject(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "MyObject{id=" + id + ", name='" + name + "'}"; } } ``` 上述代码展示了如何通过 FastJSON 工具将自定义对象 `MyObject` 换为 JSON 字符串,并将其储到 Redis 的列表中。 --- #### Python 实现 在 Python 中,可以利用内置的 `json` 模块来完成类似的序列化反序列化操作: ```python import json import redis # 初始化 Redis 连接 r = redis.Redis(host='localhost', port=6379) # 自定义对象类 class MyObject: def __init__(self, id, name): self.id = id self.name = name def to_json(self): return json.dumps({'id': self.id, 'name': self.name}) # 对象序列化为 JSON 字符串[^2] @staticmethod def from_json(data): d = json.loads(data) # JSON 字符串反序列化为字典 return MyObject(d['id'], d['name']) # 创建对象实例 obj1 = MyObject(1, "Object One") obj2 = MyObject(2, "Object Two") # 将对象序列化后Redis 列表 r.lpush('my_objects', obj1.to_json()) r.lpush('my_objects', obj2.to_json()) # 从 Redis 列表中读并反序列化 for item in r.lrange('my_objects', 0, -1): # 获列表中的所有元素 my_obj = MyObject.from_json(item.decode()) # 解码并反序列化 print(my_obj.__dict__) ``` 此代码片段演示了如何使用 Python 的标准库 `json` 来处理对象的序列化与反序列化,并将其储到 Redis 列表中。 --- #### 关于 Redis 数据结构的选择 当考虑对象集合时,Redis 提供了几种不同的数据类型可供选择。尽管 STRING 类型也可以用来储序列化的对象,但 HASH 类型通常更适合这种需求[^3]。然而,在本例中,我们选择了 LIST 类型以便展示其适用场景——即按顺序储多个对象的情况。 如果需要更高效的查询能力或其他高级特性,则可能还需要借助第三方框架(如 Redisson),它能够提供针对复杂业务逻辑的支持以及优化后的性能表现[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值