Redis+Jedis简单应用

一、jedis的简单应用

1、导入jar包(jedis-2.3.0.jar)

2、实例

package cn.tzz.redis.simple;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;

public class RedisTest {

	private Jedis jedis;
	
	@Before
	public void initJedis(){
		jedis = new Jedis("127.0.0.1",6379);
	}
	
	/**添加*/
	public void addValue(String key, String value){
		jedis.set(key, value);
	}
	
	/**拼接*/
	public void append(String key, String value){
		jedis.append(key, value);
	}
	
	/**设置多个键值对*/
	public void mset(){
		jedis.mset("name","t","age","26","qq","123456");
	}
	
	/**根据key删除*/
	public void deleteValue(String key){
		jedis.del(key);
	}
	/**根据key获取Value*/
	public String getValue(String key){
		return jedis.get(key);
	}
	/**修改key*/
	public void renameKey(String oldkey, String newkey){
		jedis.rename(oldkey, newkey);
	}
	
	@Test
	public void testAddValue(){
		String key = "key";
		addValue(key, "abc");
		String value = getValue(key);
		System.out.println(value);
	}
	
	@Test
	public void testAppend(){
		String key = "key";
		testAddValue();
		append(key, "--ccc");
		String value = getValue(key);
		System.out.println(value);
	}
	
	@Test
	public void testMset(){
		mset();
		System.out.println(getValue("name") + "-" + getValue("age") + "-" +getValue("qq"));
	}
	
	@Test
	public void testDeleteValue(){
		String key = "key1";
		deleteValue(key);
		String value = getValue(key);
		System.out.println(value);
	}
	@Test
	public void testRenameKey(){
		String key = "key1";
		String newkey = "key2";
		addValue(key, "abc");
		renameKey(key, newkey);
		String value = getValue(newkey);
		System.out.println(value);
	}
	
	/**Map*/
	@Test
	public void testMap() {
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", "tzz");
		map.put("age", "26");
		map.put("qq", "123456");
		jedis.hmset("user", map);
		// 取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List
		// 第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
		List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
		System.out.println(rsmap);

		// 删除map中的某个键值
		jedis.hdel("user", "age");
		System.out.println(jedis.hmget("user", "age")); // 因为删除了,所以返回的是null
		System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数2
		System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true
		System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key
		System.out.println(jedis.hvals("user"));// 返回map对象中的所有value

		Iterator<String> iter = jedis.hkeys("user").iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + ":" + jedis.hmget("user", key));
		}
	}
	
	/**操作List */
	@Test
	public void testList() {
		// 开始前,先移除所有的内容
		jedis.del("test-list");
		System.out.println(jedis.lrange("test-list", 0, -1));
		jedis.lpush("test-list", "1");
		jedis.lpush("test-list", "22");
		jedis.lpush("test-list", "333");
		// 再取出所有数据jedis.lrange是按范围取出,
		// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
		System.out.println(jedis.lrange("test-list", 0, -1));

		jedis.del("test-list");
		jedis.rpush("test-list", "1");
		jedis.rpush("test-list", "22");
		jedis.rpush("test-list", "333");
		System.out.println(jedis.lrange("test-list", 0, -1));
	}

	/**Set*/
	@Test
	public void testSet() {
		// 添加
		jedis.sadd("test-set", "a","b");
		jedis.sadd("test-set", "b");
		jedis.sadd("test-set", "c");
		jedis.sadd("test-set", "d");
		jedis.sadd("test-set", "e");
		// 移除noname
		jedis.srem("test-set", "who");
		System.out.println(jedis.smembers("test-set"));// 获取所有加入的value
		System.out.println(jedis.sismember("test-set", "who"));// 判断 who
															// 是否是user集合的元素
		System.out.println(jedis.srandmember("test-set"));
		System.out.println(jedis.scard("test-set"));// 返回集合的元素个数
	}

	@Test
	public void test() throws InterruptedException {
		// jedis 排序
		// 注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
		jedis.del("a");// 先清除数据,再加入数据进行测试
		jedis.rpush("a", "1");
		jedis.lpush("a", "6");
		jedis.lpush("a", "3");
		jedis.lpush("a", "9");
		System.out.println(jedis.lrange("a", 0, -1));// [9, 3, 6, 1]
		System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //输入排序后结果
		System.out.println(jedis.lrange("a", 0, -1));
	}
}

 二、Jedis的池化使用

1、导入jar包(jedis-2.3.0.jar + commons-pool2-2.0.jar)

2、配置文件(redis_config.properties)

#最大分配的对象数  
redis.pool.maxActive=1024
#最大能够保持idel状态的对象数  
redis.pool.maxIdle=200
#当池内没有返回对象时,最大等待时间  
redis.pool.maxWait=1000
#当调用borrow Object方法时,是否进行有效性检查  
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查  
redis.pool.testOnReturn=true
#host
redis.host=127.0.0.1
redis.host2=10.118.71.104
#Port  
redis.port=6379

 3、实例

package cn.tzz.redis.simple;

import java.util.ResourceBundle;

import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolTest {

	private static JedisPool jedisPool;

	/** 初始化jedis连接池 */
	@Before
	public void initJedisPool() {
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		// 读取配置文件
		ResourceBundle bundle = ResourceBundle.getBundle("redis_config");
		jedisPoolConfig.setMaxTotal(Integer.parseInt(bundle
				.getString("redis.pool.maxActive")));
		jedisPoolConfig.setMaxIdle(Integer.parseInt(bundle
				.getString("redis.pool.maxIdle")));
		jedisPoolConfig.setMaxWaitMillis(Long.parseLong(bundle
				.getString("redis.pool.maxWait")));
		jedisPoolConfig.setTestOnBorrow(Boolean.parseBoolean(bundle
				.getString("redis.pool.testOnBorrow")));
		jedisPoolConfig.setTestOnReturn(Boolean.parseBoolean(bundle
				.getString("redis.pool.testOnReturn")));
		String host = bundle.getString("redis.host");
		int port = Integer.valueOf(bundle.getString("redis.port"));
		int timeout = Integer.valueOf(bundle.getString("redis.pool.maxWait"));
		// 构造连接池
		jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
	}

	@Test
	public void testSet() {
		Jedis jedis = null;
		try {
			// 从连接池中获取jedis实例
			jedis = jedisPool.getResource();
			String key = "Test_Pool";
			jedis.del(key);
			jedis.set(key, "Test_Pool");
		} catch (Exception e) {
			// 销毁对象
			jedisPool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 释放对象池
			jedisPool.returnResource(jedis);
		}
	}

	@Test
	public void testGet() {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			System.out.println(jedis.get("Test_Pool"));
		} catch (Exception e) {
			// 销毁对象
			jedisPool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 释放对象池
			jedisPool.returnResource(jedis);
		}
	}
}

三、一致性哈希(集群)

Memcached完全基于分布式集群,而Redis是Master-Slave,如果想把Reids,做成集群模式,无外乎多做几套Master-Slave,每套Master-Slave完成各自的容灾处理,通过Client工具,完成一致性哈希。

Memcached是在Server端完成Sharding,Redis只能依靠各个Client做Sharding。

实例:

package cn.tzz.redis.simple;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class JedisPoolTest2 {

	private static ShardedJedisPool shardedJedisPool;

	/** 初始化jedis连接池 */
	@Before
	public void initShardedJedisPool() {
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		// 读取配置文件
		ResourceBundle bundle = ResourceBundle.getBundle("redis_config");
		jedisPoolConfig.setMaxTotal(Integer.parseInt(bundle
				.getString("redis.pool.maxActive")));
		jedisPoolConfig.setMaxIdle(Integer.parseInt(bundle
				.getString("redis.pool.maxIdle")));
		jedisPoolConfig.setMaxWaitMillis(Long.parseLong(bundle
				.getString("redis.pool.maxWait")));
		jedisPoolConfig.setTestOnBorrow(Boolean.parseBoolean(bundle
				.getString("redis.pool.testOnBorrow")));
		jedisPoolConfig.setTestOnReturn(Boolean.parseBoolean(bundle
				.getString("redis.pool.testOnReturn")));
		String host = bundle.getString("redis.host");
		String host2 = bundle.getString("redis.host2");
		int port = Integer.valueOf(bundle.getString("redis.port"));
		int timeout = Integer.valueOf(bundle.getString("redis.pool.maxWait"));
		// 构造连接池
		JedisShardInfo jedisShardInfo1 = new JedisShardInfo(host, port, timeout);
		JedisShardInfo jedisShardInfo2 = new JedisShardInfo(host2, port,
				timeout);
		List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		shards.add(jedisShardInfo1);
		shards.add(jedisShardInfo2);
		shardedJedisPool = new ShardedJedisPool(jedisPoolConfig, shards);
	}

	@Test
	public void testSet() {
		ShardedJedis jedis = null;
		try {
			// 从连接池中获取jedis实例
			jedis = shardedJedisPool.getResource();
			String key = "Test_Pool";
			jedis.del(key);
			jedis.set(key, "Test_Pool");
		} catch (Exception e) {
			// 销毁对象
			shardedJedisPool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 释放对象池
			shardedJedisPool.returnResource(jedis);
		}
	}

	@Test
	public void testGet() {
		ShardedJedis jedis = null;
		try {
			jedis = shardedJedisPool.getResource();
			System.out.println(jedis.get("Test_Pool"));
		} catch (Exception e) {
			// 销毁对象
			shardedJedisPool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			// 释放对象池
			shardedJedisPool.returnResource(jedis);
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值