緩存 redis 詳解

緩存 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[]);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章