`

Redis保存对象实例

 
阅读更多
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;
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    使用redis管理对象缓存,可代替session

    “工具”可能是指使用Redis客户端工具,如`redis-cli`进行命令行操作,或使用图形界面工具如Redis Desktop Manager来管理和调试Redis实例。 综上所述,通过Redis管理对象缓存,特别是替代HTTP Session,可以提高Web...

    redis 自身实例应用,雪崩,分布式锁

    序列化的目的是将一个实现了 Serializable 接口的对象转换成一个字节序列,可以将该字节序列保存起来,例如保存在一个文件里,或者通过网络传输到其他计算机上恢复,只要该计算机平台存在相应的类就可以正常恢复为...

    redis缓存实例,及安装文件

    这些数据结构的设计使得Redis在处理复杂数据操作时表现出色,例如,哈希可用于存储对象,列表可实现消息队列,集合用于存储不重复元素,有序集合则添加了排序功能。 Redis支持多种操作命令,如设置(SET)、获取...

    Java操作Redis实例,操作封装

    本文将深入探讨如何使用Jedis进行Java操作Redis的实例,包括对象的保存、查询以及客户端连接资源管理。 首先,我们需要引入Jedis的依赖库,通常通过Maven或Gradle添加到项目中。对于Maven用户,可以在pom.xml文件中...

    redis可视化工具

    7. 多实例管理:对于有多台Redis服务器的情况,可以在同一界面下进行统一管理。 在提供的文件“redis0.8.3.3850sj.exe”中,我们可以推测这可能是某个特定版本的Redis可视化工具的Windows安装程序。用户在安装后,...

    阿里巴巴Redis使用规范

    阿里巴巴建议使用Redis保存热数据,以提高数据的访问速度。 规范六:不同的业务数据分实例存储 阿里巴巴建议不同的业务数据分实例存储,以避免数据混淆和提高数据的安全性。 规范七:在数据保存时,要设置过期时间...

    Redis使用+redis工具

    一个Redis实例可以作为主节点,多个从节点同步其数据。 7. **集群搭建**:Redis Cluster是Redis的分布式解决方案,可以将数据分布在多个节点上,实现数据的自动分片和故障转移。 8. **发布/订阅(Pub/Sub)**:Redis...

    Redis讲解(刚刚接触REDIS的看看)

    - **散列(Hashes)**:用于存储键值对的集合,特别适合表示对象。 - **列表(Lists)**:有序的字符串列表,支持两端插入和弹出操作。 - **集合(Sets)**:无序的唯一成员集合,支持交集、并集、差集等操作。 ...

    redis-windows-7.2.3.zip

    在Windows环境中,我们还可以借助可视化工具如RedisInsight、Redis Commander等来管理和监控Redis实例,使得开发和运维工作更加便捷。总之,Redis是一个强大且灵活的键值数据库,无论是在开发还是生产环境中,都能...

    redis.zip(redis6.2.4)

    1. **节点**:每个运行着Redis服务的实例是一个节点。 2. **槽(Slot)**:数据分片的逻辑单位,总共有16384个槽。 3. **主节点与从节点**:主节点负责写操作,从节点复制主节点数据,提供读服务和容灾备份。 4. **...

    redis-windows-7.0.10.zip

    在高可用性架构中,还可以使用Sentinel或者Cluster来监控和管理多个Redis实例,自动处理故障转移。 为了保证Redis服务的安全性,还需要关注访问控制和密码认证。Redis 6.0开始引入了TLS/SSL加密支持,以保护数据...

    Redis实战.pdf

    - **主从复制**:通过复制机制,可以创建多个Redis实例作为主服务器的副本,提高系统的高可用性和读取性能。 - **Redis Cluster**:Redis 集群支持自动分区,将数据分散在多个节点上,提供更高的扩展性和容错性。 ...

    redis-windows-7.0.8.zip

    一个Redis实例可以作为主节点,多个实例作为从节点,从节点实时同步主节点的数据,从而实现数据冗余和故障转移。 8. **集群模式**:Redis 3.0引入了集群功能,允许多个Redis节点分布式存储数据,提高了数据的可用性...

    StackExchange.Redis-1.2.6

    - **连接Redis**:通过`ConnectionMultiplexer`建立连接,`GetDatabase()`获取数据库实例。 - **设置和获取值**:使用`StringSet`和`StringGet`方法操作字符串类型键值对。 - **发布/订阅**:`Subscribe`方法订阅...

    Redis-x64-5.0.14.1.msi

    在 Windows 上,可以使用 `redis-cli.exe` 连接到本地或远程 Redis 实例。 10. **配置与优化**:Redis 可以通过配置文件 `redis.conf` 进行设置,包括内存限制、日志级别、持久化策略等。根据实际需求进行适当调整...

    redis 入门简单demo

    虽然Redis默认在内存中存储数据,但为防止数据丢失,提供了两种持久化方式:RDB(定期保存数据库快照)和AOF(记录每次写操作)。在Demo中,可能会展示如何配置和使用这两种持久化方法。 6. **事务**: Redis支持...

    redis-windows-7.0.6.zip

    一个Redis实例作为主节点,多个实例作为从节点,实时同步主节点的数据变化。 七、Redis事务 Redis支持简单的事务,可以一次执行多个命令,保证原子性。 八、Redis Cluster Redis Cluster是Redis的分布式解决方案...

    StackExchange.Redis.zip

    在后续所有的例子中,我们假设你有一个ConnectionMultiplexer类的实例保存以重用。 但现在,让我们来先创建一个。 这是使用 ConnectionMultiplexer.Connect 或 ConnectionMultiplexer.ConnectAsync 完成的,传递配置...

    redis-3.2.1.gem.zip

    Redis 的特点是速度快,因为数据都存储在内存中,定期通过持久化策略保存到磁盘,以防止数据丢失。此外,Redis 还提供了丰富的命令操作,支持事务、发布/订阅、主从复制和分片等功能,广泛应用于缓存、消息队列、...

    培训资料—redis

    为了克服这一限制,Redis提供了持久化功能,如RDB(快照)和AOF(Append Only File),可以在不影响服务的情况下定期或在特定事件后将内存中的数据保存到磁盘。 2. **丰富的数据结构**:如前所述,Redis支持多种...

Global site tag (gtag.js) - Google Analytics