缓存 redis 的使用
一,API
参考地址
二,使用的类:
JedisPoolConfig, JedisPool, Jedis
配置连接池的代码如下:
package redistest;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* Created by Administrator on 2016/8/2.
*/
public final class JedisUtil {
private static Logger log = Logger.getLogger(JedisUtil.class);
private static String IP = "localhost"; //ip地址
private static int PORT = 6379; //端口
private static int MAX_TOTAL = 10; //实现连接的最大数目
private static int MAX_IDLE = 5; //连接池最大允许的空闲数
private static int MAX_WAIT = 1000; //最大等待时间
private static int TIME_OUT = 1000; //超时时间
private static JedisPool jedisPool = null;
/*初始化Redis 连接池*/
static{
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(MAX_TOTAL);
jpc.setMaxIdle(MAX_IDLE);
jpc.setMaxWaitMillis(MAX_WAIT);
jedisPool = new JedisPool(jpc, IP, PORT, TIME_OUT, null);
}
/*获取jedis 资源*/
public synchronized static Jedis getJedis(){
if(jedisPool != null){
return jedisPool.getResource();
} else{
log.info("连接池为空!!");
return null;
}
}
/*释放jedis 资源*/
public static void returnResource(Jedis jedis){
if(jedis!= null){
jedisPool.returnResource(jedis);
}
}
}
测试代码:
package redistest;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Administrator on 2016/8/2.
*/
public class Test {
private static Jedis jedis = null;
public static void main(String[] args) {
jedis = JedisUtil.getJedis();
JedisUtil.returnResource(jedis);
listTest();
}
/*list 操作*/
public static void listTest() {
jedis.lpush("list", "11");
jedis.lpush("list", "22");
jedis.lpush("list", "33");
List<String> list = jedis.lrange("list", 0, 3);
System.out.println("删除前集合:");
for (String s : list) {
System.out.print(s);
}
jedis.del("list");
List<String> list2 = jedis.lrange("list", 0, 3);
System.out.println("删除后集合:");
for (String s : list2) {
System.out.print(s);
}
}
/*字符串操作*/
public static void stringTest() {
jedis.mset("str", "str", "i", "i"); //设置多个键值对
System.out.println("删除前, str:" + jedis.get("str") + ", i: " + jedis.get("i"));
;
jedis.del("str"); //删除键
System.out.println("删除后, str:" + jedis.get("str") + ", i: " + jedis.get("i"));
;
}
/*map 操作*/
public static void mapTest() {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "11");
map.put("2", "22");
jedis.hmset("user", map);
List<String> list = jedis.hmget("user", "1", "2");
System.out.println("删除前的值:");
for (String s : list) {
System.out.print(s + ", ");
}
map.put("1", "111");
map.put("2", "222");
jedis.hmset("user", map);
List<String> list2 = jedis.hmget("user", "1", "2");
System.out.println("删除前的,修改后的值:");
for (String s : list2) {
System.out.print(s + ", ");
}
jedis.hdel("user", "1");
List<String> list3 = jedis.hmget("user", "1", "2");
System.out.println("删除后的,修改后的值:");
for (String s : list3) {
System.out.print(s + ", ");
}
}
}
三,redis 存储对象的方法(序列化)
被存储的对象必须实现 Serializable 接口;
序列化和反序列化的代码如下:
package redistest;
import java.io.*;
/**
* Created by Administrator on 2016/8/2.
*/
public class SerializeUtil {
/*序列化对象*/
public static byte[] serialize(Object object){
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(object); //序列化
byte[] bytes = bos.toByteArray(); //转换对象为字节数组
return bytes;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/*反序列化*/
public static Object unSerialize(byte[] bytes){
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
Object obj = ois.readObject(); //反序列化
return obj;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e1){
e1.printStackTrace();
}
return null;
}
}
存储到缓存的方法:
jedis.set(byte[], byte[]);