redis的java客户端Jedis简单封装

       经过我们团队的一番讨论,最终决定使用redis来进行我们的业务缓存。redis会将数据缓存到内存中,运行效率会很快。同时异步将数据写入到磁盘中,进行持久化。

且redis支持主从同步,支持分布式部署,支持N多数据结构,这对于我们有着莫大的吸引力。

参见:http://blog.csdn.net/yichenlian/article/details/27207383

        我们团队讨论的焦点是在于redis的灾备恢复问题。由于redis的持久化是异步的,总会有一点时间内存中数据和磁盘数据不同步的情况(当然可以设置成完全同步,那么用redis的意义就大打折扣了)。虽然没有找到尽善尽美的解决办法,不过有一些网上的处理方式还是可以接受的。

参见:http://blog.csdn.net/xiangliangyu/article/details/8165644
        随后我使用java客户端Jedis对redis相关操作进行了一些系统的简单的封装。使用的是jedis的分布式连接池,这样方便于redis横向扩展,增加高可用性。封装思路:首先定义连接池类,封装连接池获取方式;对外为接口,接口定义的是redis常规操作,定义的方法基本与redis中一致,并且使用接口便于扩展;实现接口,我封装的实现类只使用了分布式的方式(即ShardedJedis),也可以使用别的实现方式,可以自己扩展。
        1.获取连接池:

简单配置JedisPoolConfig

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		jedisPoolConfig.setMaxTotal(maxTotal);//the max number of connection
		jedisPoolConfig.setMaxIdle(maxIdle);//the max number of free
		jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);//the longest time of waiting

设置JedisShardInfo(redis.clients.jedis.JedisShardInfo.JedisShardInfo(String host, int port))

得到ShardedJedisPool(连接池):redis.clients.jedis.ShardedJedisPool.ShardedJedisPool(GenericObjectPoolConfig poolConfig, List<JedisShardInfo> shards,Hashing algo)

这样就得到了连接池。

          2.定义接口,简单为上:

public interface JedisClientInterface {

	/**
	 * 写入一般的string类型的value
	 * 
	 * @param key
	 * @param value
	 */
	void put(String key, String value);

	/**
	 * 读取String类型的value
	 * 
	 * @param key
	 * @return
	 */
	String get(String key);
}

          3.完成实现类:

public class JedisClientShardImpl implements JedisClientInterface {
@Override
	public void put(String key, String value) {
		boolean flag = true;
		ShardedJedis shardedJedis = pool.getResource();
		try{
			if(shardedJedis!=null){
				shardedJedis.set(key, value);
			}
		}catch(Exception e){
			flag = false;
			e.printStackTrace();
		}finally{
			if (flag){
                           pool.returnResource(shardedJedis);
                        }else{
                           pool.returnBrokenResource(shardedJedis);
                        }
		}
	}

	@Override
	public String get(String key) {
		boolean flag = true;
		ShardedJedis shardedJedis = pool.getResource();
		try{
			if(shardedJedis!=null){
				return shardedJedis.get(key);
			}
		}catch(Exception e){
			flag = false;
			e.printStackTrace();
		}finally{<pre name="code" class="java">                        if (flag){
                           pool.returnResource(shardedJedis);
                        }else{
                           pool.returnBrokenResource(shardedJedis);
                        }
}return null;}}


             至此,整个封装流程就走通了。可以任意向下扩展了。

redis的java客户端Jedis简单封装,布布扣,bubuko.com

redis的java客户端Jedis简单封装

上一篇:Android Branch and master source code merge(patch)


下一篇:C# HttpClient设置cookies的两种办法