1、準備ubuntu虛擬機
2、解決虛擬機與win7通訊問題
解決方法:http://www.cnblogs.com/lanzi/archive/2012/03/30/2425036.html
3、下載redis
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.這樣會方便一點。有時間再試試。
睡覺了~~~~~~~~