java操作redis简单学习1

package com.hanchao.testredis;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.alibaba.fastjson.JSON;
import com.hanchao.entity.Person;
import com.hanchao.util.SerializeUtil;

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.jedis.SortingParams;

/**
 * redis客户端简单学习
 * @author liweihan 
 * @version 1.0 (2014年12月14日 下午5:26:08)
 */
public class RedisClent {

	private Jedis jedis; //非切片的客户端连接
	private JedisPool jedisPool; //非切片连接池
	private ShardedJedis shardedJedis;//切片的客户端连接
	private ShardedJedisPool shardedJedisPool; //切片连接池
	
	/**
	 * 构造方法,初始化一些参数
	 */
	public RedisClent() {
		initialPool();
		initialShardedPool();
		shardedJedis = shardedJedisPool.getResource();
		jedis = jedisPool.getResource();
	}

	/**
	 * 初始化切片池
	 * http://yychao.iteye.com/blog/1751583
	 * 2014年12月14日 下午5:33:56
	 * liweihan
	 */
	private void initialShardedPool() {
		//池子基本配置
		JedisPoolConfig config = new JedisPoolConfig();
		 //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
        //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
		config.setMaxActive(20);
		//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
		config.setMaxIdle(5);
		//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
		config.setMaxWait(10000L);
		////在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
		config.setTestOnBorrow(false);
		
		//slave链接-分布式
		List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
		shards.add(new JedisShardInfo("10.10.78.208",6379,"master"));
		shards.add(new JedisShardInfo("10.10.52.141",6379,"slave"));
		//注意事项:此处的redis必须都是主的,不能是从的。如果是从的会报错的!
		
		//构造池
		shardedJedisPool = new ShardedJedisPool(config, shards);
	}

	/**
	 * 初始化非切片池
	 * 2014年12月14日 下午5:30:26
	 * liweihan
	 */
	private void initialPool() {
		//池子基本配置
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxActive(20);
		config.setMaxIdle(5);
		config.setMaxWait(10000L);
		config.setTestOnBorrow(false);
		
		jedisPool = new JedisPool(config, "10.10.78.208",6379);
	}
	
	/**
	 * 测试一下
	 * 2014年12月14日 下午5:41:05
	 * liweihan
	 */
	public void show() {
		System.out.println(" ----- redis学习开始:");
		//keyOperater();
//		stringOpeara();
//		stringOpeara2();
//		listOpeara();
//		setOprera();
//		sortedSetOperate();
//		hashOperate();
//		objOperate();
//		objOperate2();
//		objOperate3();
		testOprera();
		
		jedisPool.returnResource(jedis); //返还到连接池
		shardedJedisPool.returnResource(shardedJedis);
	}
	
}

    下面是show()中测试的一些具体方法实现:

	/**
	 * 测试一下分布式
	 * 
	 * 
	 * 2014年12月16日 下午4:06:29
	 * liweihan
	 */
	private void testOprera() {
		for (int i = 0; i < 100; i++) {
			shardedJedis.set("22" + i, "cc" + i);
		}
	}

 

	/**
	 * 测试一下分布式
	 * 
	 * 
	 * 2014年12月16日 下午4:06:29
	 * liweihan
	 */
	private void testOprera() {
		for (int i = 0; i < 100; i++) {
			shardedJedis.set("22" + i, "cc" + i);
		}
	}

	/**
	 * java性能比较【java序列化,json格式】
	 * 事实证明:两者的速度是差不多哦。下面的10万个插入,查几秒而已!json要快
	 * 有参考价值的文章:http://developer.51cto.com/art/201303/384162_all.htm
	 * 
	 * 2014年12月16日 上午11:44:05
	 * liweihan
	 */
	private void objOperate3() {
        System.out.println("======================java序列化性能==========================");
        //清空数据 
        jedis.select(2);//★选择某个数据库
        System.out.println(jedis.flushDB()); 
        
	    long start = System.currentTimeMillis();
	    for (int i = 0; i < 100000; i++) {
	        Person person = new Person();
	        person.setId(i);
	        person.setName("hanchao"+i);
	        String result = jedis.set(("person"+i).getBytes(), SerializeUtil.serialize(person));
	    }
	    long end = System.currentTimeMillis();
	    System.out.println("java序列化用时:: " + ((end - start)/1000.0) + " seconds");
		
        System.out.println("======================java使用json序列化性能==========================");
        //清空数据 
        System.out.println(jedis.flushDB()); 
        
	    long start1 = System.currentTimeMillis();
	    for (int i = 0; i < 100000; i++) {
	        Person person = new Person();
	        person.setId(i);
	        person.setName("hanchao"+i);
	        String result = jedis.set("person"+i, JSON.toJSONString(person));
	    }
	    long end1 = System.currentTimeMillis();
	    System.out.println("使用json字符串所用时间: " + ((end1 - start1)/1000.0) + " seconds");
	}

	/**
	 * redis操作java对象
	 * 
	 * 
	 * 2014年12月16日 上午11:27:16
	 * liweihan
	 */
	private void objOperate2() {
        System.out.println("======================java-object==========================");
        //清空数据 
        System.out.println(jedis.flushDB()); 
        
        Person person = new Person();
        person.setId(1);
        person.setName("hanchao");
        
        jedis.set("person1", JSON.toJSONString(person));
        
        Person personObj = JSON.parseObject(jedis.get("person1"),Person.class);
        System.out.println("从redis取得对象为:" + personObj.getId() + " : " + personObj.getName());
	}

	/**
	 * redis操作java对象[序列化|反序列化]
	 * 
	 * 
	 * 2014年12月16日 上午11:08:55
	 * liweihan
	 */
	private void objOperate() {
        System.out.println("======================java-object==========================");
        //清空数据 
        System.out.println(jedis.flushDB()); 
		
		Person person1 = new Person();
		person1.setId(1);
		person1.setName("hanchao");
		
		System.out.println("存入序列化的对象1:" + jedis.set("person1".getBytes(), SerializeUtil.serialize(person1)));
		
		byte[] person11 = jedis.get(("person"+1).getBytes());
		Person person11_obj = (Person) SerializeUtil.unserialize(person11);
		System.out.println("取得序列化对象1:" + person11_obj.getId() + "," + person11_obj.getName());
	}

	/**
	 * hash的操作
	 * 
	 * 
	 * 2014年12月15日 下午4:41:47
	 * liweihan
	 */
	private void hashOperate() {
        System.out.println("======================hash==========================");
        //清空数据 
        System.out.println(jedis.flushDB()); 
        
        System.out.println("=============增=============");
        System.out.println("hashs中添加key001和value001键值对:"+shardedJedis.hset("hashs", "key001", "value001")); //1
        System.out.println("hashs中添加key002和value002键值对:"+shardedJedis.hset("hashs", "key002", "value002")); //1
        System.out.println("hashs中添加key003和value003键值对:"+shardedJedis.hset("hashs", "key003", "value003"));//1
        System.out.println("新增key004和4的整型键值对:"+shardedJedis.hincrBy("hashs", "key004", 4l));//4
        System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));//[value001, value002, value003, 4]
        System.out.println();
        
        System.out.println("=============同时将多个键值对放到hash表中=============");
        Map<String, String> map = new HashMap<String, String>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        map.put("key4", "value4");
        System.out.println("同时将多个键值对放到hash表中:" + shardedJedis.hmset("hashs", map));//OK
        System.out.println(shardedJedis.hget("hashs", "key2"));//value2
        
        
        System.out.println("=============删=============");
        System.out.println("hashs中删除key002键值对:"+shardedJedis.hdel("hashs", "key002"));//1
        System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));//[value001, value003, 4]
        System.out.println();
        
        
        System.out.println("=============改=============");
        System.out.println("key004整型键值的值增加100:"+shardedJedis.hincrBy("hashs", "key004", 100l));//104
        System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));//[value001, value003, 104]
        System.out.println();
        
        
        System.out.println("=============查=============");
        System.out.println("判断key003是否存在:"+shardedJedis.hexists("hashs", "key003"));//true
        System.out.println("获取key004对应的值:"+shardedJedis.hget("hashs", "key004"));//104
        System.out.println("批量获取key001和key003对应的值:"+shardedJedis.hmget("hashs", "key001", "key003"));//[value001, value003] 
        System.out.println("获取hashs中所有的key:"+shardedJedis.hkeys("hashs"));//[key004, key003, key001]
        System.out.println("获取hashs中所有的value:"+shardedJedis.hvals("hashs"));//[value001, value003, 104]
        System.out.println();
        
        Map<String,String> maps = shardedJedis.hgetAll("hashs"); 
        for(Entry<String, String> entry: maps.entrySet()) { 
             System.out.print(entry.getKey() + ":" + entry.getValue() + "\t"); 
        } 
	}

	/**
	 * SortedSet功能
	 * 
	 * 
	 * 2014年12月15日 下午4:22:54
	 * liweihan
	 */
	private void sortedSetOperate() {
		System.out.println("======================zset=========================="); 
        // 清空数据 
        System.out.println(jedis.flushDB()); 
        
        System.out.println("=============增=============");
        System.out.println("zset中添加元素element001:"+shardedJedis.zadd("zset", 7.0, "element001")); //1
        System.out.println("zset中添加元素element002:"+shardedJedis.zadd("zset", 8.0, "element002")); //1
        System.out.println("zset中添加元素element003:"+shardedJedis.zadd("zset", 2.0, "element003")); //1
        System.out.println("zset中添加元素element004:"+shardedJedis.zadd("zset", 3.0, "element004"));//1
        System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));//按照权重值排序
        //[element003, element004, element001, element002]
        System.out.println();
        
        
        System.out.println("=============删=============");
        System.out.println("zset中删除元素element002:"+shardedJedis.zrem("zset", "element002"));
        System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));
        System.out.println();
        
        
        System.out.println("=============改=============");
        System.out.println();
        
        
        System.out.println("=============查=============");
        System.out.println("统计zset集合中的元素中个数:"+shardedJedis.zcard("zset"));
        System.out.println("统计zset集合中权重某个范围内(1.0——5.0),元素的个数:"+shardedJedis.zcount("zset", 1.0, 5.0));
        System.out.println("查看zset集合中element004的权重:"+shardedJedis.zscore("zset", "element004"));
        System.out.println("查看下标1到2范围内的元素值:"+shardedJedis.zrange("zset", 1, 2));
        System.out.println();
        
	}


你可能感兴趣的:(java,redis,java操作redis)