Redis 試用

1、準備ubuntu虛擬機

2、解決虛擬機與win7通訊問題


解決方法:http://www.cnblogs.com/lanzi/archive/2012/03/30/2425036.html

3、下載redis

http://www.redis.io/download

4、安裝redis

     

$tar -zxvf redis.tar
$make
$vim redis.conf
//修改requirepass foobared 去掉註釋,換成自己的密碼
$./redis-server redis.conf//啓動
//刪除所有數據
$./redis-cli -a meimima
$flushall
不加-a 密碼 無權限操作。

默認端口是6379


5、準備JAVA客戶端。

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.1.0</version>
</dependency>
6、

接口

package com.test.redis.dao;

import java.util.List;
import java.util.Map;

public interface HelloWorldDAO {
	public String save(String key,String value);
	public String save(String key,List<String> strList);
	public String save(String key,Map<String,String> strMap);
	
	public String update(String key,String value);
	public String update(String key,List<String> strList);
	public long update(String key,Map<String,String> strMap);
	
	public long delete(String key);
	
	public Map<String,String> getMap(String key);
	public List<String> getList(String key,int begin_index,int count);
	public String getString(String key);
}


7、實現類

package com.test.redis.dao.impl;

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

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import com.test.redis.dao.HelloWorldDAO;

public class HelloWorldDAOImpl implements HelloWorldDAO {
	
	private JedisPool pool;
	private Jedis jedis;
	
	public HelloWorldDAOImpl(){
		pool = new JedisPool(new JedisPoolConfig(),"192.168.43.128");
		jedis = pool.getResource();
		jedis.auth("meimima");
	}
	
	@Override
	public String save(String key, String value) {
		return jedis.set(key, value);
	}

	@Override
	public String save(String key, List<String> strList) {
		for(String s:strList){
			jedis.lpush(key, s);
		}
		return "";
	}

	@Override
	public String save(String key, Map<String, String> strMap) {
		return jedis.hmset(key, strMap);
	}

	@Override
	public String update(String key, String value) {
		//jedis.set 覆蓋key對應的值
		//jedis.append 末尾添加新的value
		//jedis.mset = jedis.set1 jedis.set2
		return jedis.set(key, value);
	}

	@Override
	public String update(String key, List<String> strList) {
		jedis.del(key.getBytes());
		return save(key,strList);
		
	}

	@Override
	public long update(String key, Map<String, String> strMap) {
		return 0;
	}

	@Override
	public long delete(String key) {
		//jedis.del(key) 刪除key-value
		//jedis.hdel(key,map_key) 刪除key對應的map中的map_key值
		return jedis.del(key);
	}

	@Override
	public Map<String, String> getMap(String key) {
		Map<String,String> m = new HashMap<String, String>();
		Iterator<String> it = jedis.hkeys(key).iterator();
		while(it.hasNext()){
			String key1 = it.next();
			m.put(key1,jedis.hmget(key, key1).get(0));
		}
		return m;
	}

	@Override
	public List<String> getList(String key,int begin_index,int count) {
		// TODO Auto-generated method stub
		List<String> l = jedis.lrange(key,begin_index,count);
		return l;
	}

	@Override
	public String getString(String key) {
		return jedis.get(key);
	}

}

8、JUNIT測試類

package com.test.redis.test;

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

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.test.redis.dao.HelloWorldDAO;
import com.test.redis.dao.impl.HelloWorldDAOImpl;

public class HelloWorldDAOTest {
	String v1;
	String k1;
	String k2;
	List<String> l2;
	String k3;
	Map<String,String> m3;
	static HelloWorldDAO hw;
	@BeforeClass
	public static void initClass(){
		hw = new HelloWorldDAOImpl();
	}
	@Before
	public void init(){
		v1 = "helloWorld!!1";
		k1 = "key1";
		hw.save(k1, v1);
		k2 = "key2";
		l2 = new ArrayList<String>();
		l2.add("helloWorld!list1");
		l2.add("helloWorld!list2");
		l2.add("helloWorld!list3");
		l2.add("helloWorld!list4");
		hw.save(k2, l2);
		k3 = "key3";
		m3 = new HashMap<String, String>();
		m3.put("map1","helloworld!map1");
		m3.put("map2","helloworld!map2");
		m3.put("map3","helloworld!map3");
		m3.put("map4","helloworld!map4");
		hw.save(k3, m3);
	}
	@After
	public void destroy(){
		hw.delete(k1);
		hw.delete(k2);
		hw.delete(k3);
	}
	@Test
	public void testStringGet(){
		Assert.assertEquals(v1,hw.getString(k1));
	}
	@Test
	public void testStringDel(){
		hw.delete(k1);
		Assert.assertEquals(null,hw.getString(k1));
	}
	@Test
	public void testStringUpdate(){
		hw.update(k1, "hello!2");
		Assert.assertEquals("hello!2", hw.getString(k1));
	}
	@Test
	public void testStringSave(){
		Assert.assertEquals("OK", hw.save(k1, v1));
	}
	@Test
	public void testListGet(){
		List<String> l = hw.getList(k2, 0, -1);
		Assert.assertEquals(true,l.containsAll(l2));
		Assert.assertEquals(true,l2.containsAll(l));
	}
	@Test
	public void testListUpdate(){
		List<String> l = new ArrayList<String>();
		l.add("helloWorld!list11");
		l.add("helloWorld!list12");
		l.add("helloWorld!list13");
		hw.update(k2, l);
		Assert.assertEquals(false,hw.getList(k2, 0, -1).containsAll(l2));
		Assert.assertEquals(true,hw.getList(k2, 0, -1).containsAll(l));
	}
	@Test
	public void testListDel(){
		hw.delete(k2);
		Assert.assertEquals(0,hw.getList(k2, 0, -1).size());
	}
	@Test
	public void testMapGet(){
		Assert.assertEquals(m3.size(),hw.getMap(k3).size());
	}
}

9、外送一個序列化工具類~忘記哪個博客裏的了~抄一下。

package com.test.redis.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializeUtil {
	public static byte[] serialize(Object object) {
		ObjectOutputStream oos = null;
		ByteArrayOutputStream baos = null;
		try {
			// 序列化
			baos = new ByteArrayOutputStream();
			oos = new ObjectOutputStream(baos);
			oos.writeObject(object);
			byte[] bytes = baos.toByteArray();
			return bytes;
		} catch (Exception e) {

		}
		return null;
	}
	
	public static Object unserialize(byte[] bytes) {
		ByteArrayInputStream bais = null;
		try {
			// 反序列化
			bais = new ByteArrayInputStream(bytes);
			ObjectInputStream ois = new ObjectInputStream(bais);
			return ois.readObject();
		} catch (Exception e) {

		}
		return null;
	}
}

序列化工具類本來是想將對象和LIST等轉爲BYTE[]存入redis.這樣會方便一點。有時間再試試。


睡覺了~~~~~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章