小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【Redis】redis集群與非集群環(huán)境下的jedis客戶端通用開發(fā)

 WindySky 2016-03-31

非集群環(huán)境下

package com.chiwei.redis;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.util.Pool;

public class RedisSingleClient {

	//未分片客戶端連接
	private Jedis jedis;
	//未分片客戶端連接池
	private JedisPool jedisPool;
	//分片客戶端連接
	private ShardedJedis shardedJedis;
	//分片客戶端連接池
	private ShardedJedisPool shardedJedisPool;
	//jedispool配置
	private JedisPoolConfig config;
	
	public void initJedisPoolConfig() {
		config = new JedisPoolConfig();
		config.setMaxTotal(100);
		config.setMaxIdle(10);
		config.setMaxWaitMillis(1000L);
		config.setTestOnBorrow(true);
		config.setTestOnReturn(true);
	}
	
	public void initJedisPool() {
		initJedisPoolConfig();
		jedisPool = new JedisPool(config,"192.168.11.176",7379);
	}
	
	public void initShardedJedisPool() {
		initJedisPoolConfig();
		List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		shards.add(new JedisShardInfo("192.168.11.176",7379));
		shards.add(new JedisShardInfo("192.168.11.177",7379));
		shards.add(new JedisShardInfo("192.168.11.178",7379));
		shardedJedisPool = new ShardedJedisPool(config,shards);
	}
	
	public Jedis getJedis() {
		jedis = this.jedisPool.getResource();
		return jedis;
	}
	
	public ShardedJedis getShardedJedis() {
		shardedJedis = this.shardedJedisPool.getResource();
		return shardedJedis;
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void returnResource(Pool pool, Object redis) {
		if (redis != null) {
			pool.returnResourceObject(redis);
		}
	}
	
	public void set(String key, String value) {
		try {
			jedis = getJedis();
			shardedJedis = getShardedJedis();
			jedis.set(key, value);
			shardedJedis.getShard("chiwei").set("chiwei", "lining");
		} catch (Exception e) {
			e.printStackTrace();
			jedisPool.returnBrokenResource(jedis);
			shardedJedisPool.returnBrokenResource(shardedJedis);
		} finally {
			returnResource(jedisPool, jedis);
			returnResource(shardedJedisPool, shardedJedis);
		}
	}
	
	public String get(String key) {  
        String value = null;  
        try {  
            jedis = getJedis();
            value = jedis.get(key);  
        } catch (Exception e) {  
            e.printStackTrace();  
            // 釋放資源  
            jedisPool.returnBrokenResource(jedis);  
        } finally {  
            returnResource(jedisPool, jedis);  
        }  
        return value;  
    } 
	
	public String getShardValue(String key) {  
        String value = null;  
        try {  
        	shardedJedis = getShardedJedis();
            value = shardedJedis.getShard(key).get(key);
        } catch (Exception e) {  
            e.printStackTrace();  
            // 釋放資源  
            shardedJedisPool.returnBrokenResource(shardedJedis);
        } finally {  
        	returnResource(shardedJedisPool, shardedJedis);
        }  
        return value;  
    } 
	
	@Test
	public void test() {
		initJedisPool();
		initShardedJedisPool();
		jedis = getJedis();
		shardedJedis = getShardedJedis();
		jedis.set("momo", "nono");
		//shardedJedis.set("chiwei", "lining");
		System.out.println(jedis.get("momo"));
		//System.out.println(shardedJedis.get("chiwei"));
		shardedJedis.getShard("chiwei").set("chiwei", "lining");
		System.out.println(shardedJedis.getShard("chiwei").get("chiwei"));
	}

}
分片Shard的目的就是將數(shù)據(jù)均勻分布到多臺redis實例中

以上的測試實例是簡單的key-value,下面試試復(fù)雜的key

List

shardedJedis.lpush("chiwei", "one");
		shardedJedis.lpush("chiwei", "two");
		shardedJedis.lpush("chiwei", "three");
		shardedJedis.lpush("chiwei", "three");
		System.out.println(shardedJedis.llen("chiwei"));
		String str = shardedJedis.lpop("chiwei");
		System.out.println(str);

list添加的元素可重復(fù)

Set不能重復(fù)

shardedJedis.sadd("chiwei", "one");
		shardedJedis.sadd("chiwei", "one");


其它各種類型,請讀者自行嘗試,http://www./commands.html

集群環(huán)境

package com.chiwei.redis;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

public class RedisClusterClient {

	private String serverInfo = "172.30.129.145:7379,172.30.129.145:7380,172.30.129.146:7379,172.30.129.146:7380,172.30.129.147:7379,172.30.129.147:7380";

	private Set<HostAndPort> getClusterInfo(String serverInfo) {
		Set<HostAndPort> set = new HashSet<HostAndPort>();
		if(serverInfo==null||"".equals(serverInfo.length())) {
			throw new RuntimeException("The serverInfo can not be empty");
		}
		String ipPort[] = serverInfo.split(",");
		int len = ipPort.length;
		for(int i=0;i<len;i++) {
			String server[] = ipPort[i].split(":");
			set.add(new HostAndPort(server[0], Integer.parseInt(server[1])));
		}
		return set;
	}
	
	@Test
	public void test() {

		Set<HostAndPort> jedisClusterNodes = getClusterInfo(serverInfo);
		// Jedis Cluster will attempt to discover cluster nodes automatically
		JedisCluster jc = new JedisCluster(jedisClusterNodes);
		jc.set("foo", "bar");
		String value = jc.get("foo");
		System.out.println(value);
	}

}

通過JedisCluster對象來操作redis緩存。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.0</version>
</dependency>


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多