緩存 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[]);