Spring集成Redis实例入门

ShardedJedis实现分析

ShardedJedis是基于一致性哈希算法实现的分布式Redis集群客户端;ShardedJedis的设计分为以下几块:

  1. 对象池设计:Pool,ShardedJedisPool,ShardedJedisFactory
  2. 面向用户的操作封装:BinaryShardedJedis,BinaryShardedJedis
  3. 一致性哈希实现:Sharded

关于ShardedJedis设计,忽略了Jedis的设计细节,设计类图如下:


代码实现:

model对象:

package com.duobei.memcached.model;

import java.io.Serializable;

public class User implements Serializable {
	private static final long serialVersionUID = 1L;

	private String name;
	private String pass;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

}

测试类:

package com.duobei.redis;

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

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.duobei.memcached.model.User;

import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class RedisTest {

	private ApplicationContext context;
	private ShardedJedisPool shardedJedisPool;
	private ShardedJedis jedis;

	public RedisTest() {

	}

	@Before
	public void init() throws Exception {

		String config[] = { "applicationContext.xml",
				"applicationContext-redis.xml" };
		context = new ClassPathXmlApplicationContext(config);

		shardedJedisPool = (ShardedJedisPool) context
				.getBean("shardedJedisPool");
		jedis = (ShardedJedis) shardedJedisPool.getResource();
	}

	@Test
	@Ignore
	public void testSet() {
		System.out.println(jedis.set("name", "changxiaoxiao"));
	}

	@Test
	@Ignore
	public void testGet() {
		System.out.println(jedis.get("name"));
	}

	@Test
	@Ignore
	public void addOne() {

		/*
		 * 构造一个User对象
		 */
		User user = new User();
		user.setName("changxiaoxiao");
		user.setPass("changxiaoxiao");

		jedis.set("userOne".getBytes(), ObjectToByte(user));
		System.out.println("添加成功!");
	}

	
	@Test
	//@Ignore
	public void show() {
		byte[] bytes = jedis.get("userOne".getBytes());
		User user = (User) ByteToObject(bytes);
		System.out.println("Name:" + user.getName());
		System.out.println("Password:" + user.getPass());
	}

	/**
	 * 对象序列化
	 * @param obj
	 * @return
	 */
	public byte[] ObjectToByte(Object obj) {
		byte[] bytes = null;
		try {
			ByteArrayOutputStream bo = new ByteArrayOutputStream();
			ObjectOutputStream oo = new ObjectOutputStream(bo);
			oo.writeObject(obj);
			bytes = bo.toByteArray();
			bo.close();
			oo.close();  
		}
		catch(Exception e) { 
			e.printStackTrace();
		}
		return bytes;
    }
	
	/**
	 * 反序列化
	 * @param bytes
	 * @return
	 */
	public Object ByteToObject(byte[] bytes) {
		Object object = null;
		try {
			ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
			ObjectInputStream ois = new ObjectInputStream(bais);
			object = ois.readObject();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return object;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值