Redis作为缓存数据库,需要安装运行redis软件。
客户端在java中使用jedis进行读取(当然有多种客户端可以进行操作)。
jedis使用的jar包有:jedis-2.8.0.jar, commons-pool2-2.3.jar
序列化和反序列化以及map转Object需要jar:commons-logging-1.2.jar commons-lang3-3.3.2.jar commons-beanutils-1.9.3.jar
以下为代码片段:
随便创建一个实体类:
package com.jedis;
import java.io.Serializable;
public class Person implements Serializable{
/**
*
*/
private String name;
private String age;
private String sex;
public Person() {
super();
}
public Person(String name, String age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
创建一个工具类:主要用于jedis的操作
package com.jedis;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class JedisUtils extends org.apache.commons.lang3.ObjectUtils {
public static Map<String,String> ObjectToMap(Object o){
if(o==null){
return null;
}
Class<? extends Object> cla = o.getClass();
Field[] declaredFields = cla.getDeclaredFields(); //获取所有成员包含 private
Map<String,String> map = new HashMap<String,String>();
if(declaredFields != null && declaredFields.length !=0){
for(Field fi:declaredFields){
map.put(fi.getName().toLowerCase(), fi.getName());
}
}
return map;
}
public static Object mapToObject(Map<String,String> map, Class<?> cls){
if(map == null || map.size()==0){
return null;
}
try {
Object obj = cls.newInstance();
BeanUtils.populate(obj, map);
return obj;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 序列化对象
* @param object
* @return
*/
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
if (object != null){
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
return baos.toByteArray();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 反序列化对象
* @param bytes
* @return
*/
public static Object unserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
try {
if (bytes != null && bytes.length > 0){
bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
下面是个Demo类:
package com.jedis;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Properties;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisDemo1 {
/**
* 单实例测试
*/
@Test
public void test1(){
//设置IP地址和端口
Jedis jedis = new Jedis("127.0.0.1",6379);
//存数据
jedis.set("name", "imooc");
//获取数据
System.out.println(jedis.get("name"));
jedis.close();
System.out.println(jedis.get("name"));
jedis.del("name");
System.out.println(jedis.get("name"));
}
@Test
public void test2(){
//设置IP地址和端口
Jedis jedis = new Jedis("127.0.0.1",6379);
Person per = new Person("zhangfei","男","31");
//存数据
Map<String,String> map = JedisUtils.ObjectToMap(per);
try {
jedis.set("name".getBytes("utf-8"),JedisUtils.serialize(map));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取数据
try {
byte[] bytes = jedis.get("name".getBytes("utf-8"));
Object o = JedisUtils.unserialize(bytes);
if(o instanceof Map){
Map<String,String> map1 = (Map<String, String>) o;
Person p = (Person) JedisUtils.mapToObject(map1, Person.class);
System.out.println(p.getName()+" "+p.getAge());
System.out.println(map.toString());
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jedis.close();
}
/**
* 数据库连接池方式使用jedis
*/
@Test
public void test3(){
JedisPoolConfig config = new JedisPoolConfig();
//最大连接空闲数
config.setMaxIdle(10);
//最大连接数
config.setMaxTotal(25);
/*获取连接池*/
JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379);
Jedis jedis = null;
try{
jedis =jedisPool.getResource();
Person per = new Person("zhangfei","男","31");
byte[] value = JedisUtils.serialize(per);
byte[] key = JedisUtils.serialize("key");
jedis.set(key, value);
byte[] getVaue = jedis.get(key);
Person per1 = (Person) JedisUtils.unserialize(getVaue);
System.out.println(JedisUtils.ObjectToMap(per1).toString());
//设置数据
}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
jedis.close();
}
}
}
/**
* 数据库连接池方式使用jedis
* 读取properties文件
*/
@Test
public void test4(){
Jedis jedis = null;
try{
Properties pro = new Properties();
InputStream in = new FileInputStream(System.getProperty("user.dir")+"/src/resource/jedis.properties");
pro.load(in);
JedisPoolConfig config = new JedisPoolConfig();
//最大连接空闲数
config.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));
//最大连接数
config.setMaxTotal(25);
/*获取连接池*/
JedisPool jedisPool = new JedisPool(config,pro.get("redis.ip").toString(),Integer.parseInt(pro.getProperty("redis.port")));
jedis =jedisPool.getResource();
Person per = new Person("zhangfei","男","31");
byte[] value = JedisUtils.serialize(per);
byte[] key = JedisUtils.serialize("key");
jedis.set(key, value);
byte[] getVaue = jedis.get(key);
Person per1 = (Person) JedisUtils.unserialize(getVaue);
System.out.println(JedisUtils.ObjectToMap(per1).toString());
//设置数据
}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
jedis.close();
}
}
}
}
properties文件类
# Redis settings
# redis.host=10.21.7.201(43) redis.host=192.168.201.201(UAT) redis.password=123456(43&UAT)
# redis.host=192.168.101.102(ZS) redis.password=yzkj123456(ZS)
redis.ip=127.0.0.1
#redis.host=192.168.201.201
#redis.host=192.168.101.102
redis.port=6379
#redis.password=''
#redis.password=yzkj123456
redis.minIdle=100
redis.maxIdle=300
redis.maxActive=600
redis.maxWait=1000
redis.testOnBorrow=true