Spring集成Redis实例入门

来源:互联网 发布:首席数据官职责 编辑:程序博客网 时间:2024/06/09 18:42

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() {}@Beforepublic 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@Ignorepublic void testSet() {System.out.println(jedis.set("name", "changxiaoxiao"));}@Test@Ignorepublic void testGet() {System.out.println(jedis.get("name"));}@Test@Ignorepublic void addOne() {/* * 构造一个User对象 */User user = new User();user.setName("changxiaoxiao");user.setPass("changxiaoxiao");jedis.set("userOne".getBytes(), ObjectToByte(user));System.out.println("添加成功!");}@Test//@Ignorepublic 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;}}


原创粉丝点击