1. 程式人生 > >java程式碼操作Redis?

java程式碼操作Redis?

一、Redis是什麼?

     Redis 是一個由Salvatore Sanfilippo寫的高效能的key-value儲存系統,通常被稱為資料結構伺服器。

二、Redis的優點?

    Redis支援各種不同方式的排序,redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案。

三、java程式碼的操作:

  1、首先要匯入Jedis的jar包(我用的maven環境,所以稱之為依賴):

    

        <!--匯入jedis的依賴-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

        <!--匯入jackson的依賴(用於轉JSON格式)-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>

  2、建立一個實體類(名稱為Student,用於等下的操作JSON資料):

/**
 * 學生實體類
 */
public class Student implements Serializable{
    /**
     * 學生編號
     */
    private String sid;
    /**
     * 學生姓名
     */
    private String sname;
    /**
     * 學生性別
     */
    private String ssex;
    public Student() {
    }
    public Student(String sid, String sname, String ssex) {
        this.sid = sid;
        this.sname = sname;
        this.ssex = ssex;
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSsex() {
        return ssex;
    }
    public void setSsex(String ssex) {
        this.ssex = ssex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "sid='" + sid + '\'' +
                ", sname='" + sname + '\'' +
                ", ssex='" + ssex + '\'' +
                '}';
    }
}

3、建立一個測試類:

  3.1、操作字串資料:

  

/**
     * 操作字串資料
     */
    @Test
    public void redisString() {
        //host:連線地址,port:埠號
        Jedis jedis = new Jedis("192.168.42.150", 6379);
        //檢視是否連線:如果輸出為pong,則證明連線成功
        System.out.println(jedis.ping());
        //1、賦值:鍵值對形式
        jedis.set("admin", "123456");
        //2、設定多個鍵值對
        jedis.mset("a", "apple", "b", "banana", "c", "cherry");
        //3、取值
        System.out.println(jedis.get("admin"));
        //4、刪除
        jedis.del("admin");
    }

   3.2、操作JSON資料:

   

    /**
     * 操作JSON資料
     */
    @Test
    public void redisJSON() {
         Jedis jedis = new Jedis("192.168.42.150", 6379);
        //建立List集合
        List<Student> studentList = new ArrayList<>();
        //學生物件
        Student student = null;
        //迴圈賦值
        for (int i = 1; i < 101; i++) {
            student = new Student();
            student.setSid(UUID.randomUUID().toString());
            student.setSname("學生" + i);
            student.setSsex(i % 2 == 0 ? "男" : "女");
            //把物件加入到集合裡
            studentList.add(student);
        }
        //使用jackson轉換JSON格式
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String outStr = objectMapper.writeValueAsString(studentList);
            jedis.set("student", outStr);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //輸出集合資訊
        String str = jedis.get("student");
        System.out.println(str);

//        //把集合轉為物件(可需要可不需要)
//        try {
//            JavaType javaType = objectMapper.getTypeFactory().constructParametricType(ArrayList.class, Student.class);
//            List<Student> students = objectMapper.readValue(str, javaType);
//            for (Student s : students) {
//                System.out.println(s);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }

   3.3、操作HashMap資料:

/**
     * 操作HashMap集合資料
     */
    @Test
    public void redisHashMap() {
         Jedis jedis = new Jedis("192.168.42.150", 6379);
        //寫入(寫入時鍵名不能相同)
        Map<String, String> writeMap = new HashMap<>();
        writeMap.put("sid", UUID.randomUUID().toString());
        writeMap.put("sname", "姓名");
        writeMap.put("ssex", "性別");
        jedis.hmset("hashmap", writeMap);

        //讀取
        Map<String, String> readMap = jedis.hgetAll("hashmap");
        System.out.println(readMap);
    }

 3.4、操作ArrayList資料:

/**
     * 操作ArrayList集合資料
     */
    @Test
    public void redisList() {
        Jedis jedis = new Jedis("192.168.42.150", 6379);
        //加入值
        jedis.lpush("list", "list1", "list2", "list3", "list4");
        //讀取
        System.out.println(jedis.lrange("list", 0, 10));
        //獲取集合長度:輸出值為:4
        System.out.println(jedis.llen("list"));
        //取下標為0的值:輸出值為:學生4(原因:加入值是先進後出)
        System.out.println(jedis.lindex("list", 0));
        //通過下標修改key的值
        //System.out.println(jedis.lset("list", 0, "xx"));
        //刪除
        //jedis.del("list");
    }

3.5、操作叢集:

 /**
     * 操作叢集
     */
    @Test
    public void redisColony() {
        //配置redis叢集
        Set<HostAndPort> hostAndPortSet = new HashSet<>();
        hostAndPortSet.add(new HostAndPort("192.168.42.150", Integer.parseInt("6380")));
        hostAndPortSet.add(new HostAndPort("192.168.42.150", Integer.parseInt("6381")));
        hostAndPortSet.add(new HostAndPort("192.168.42.150", Integer.parseInt("6382")));
        hostAndPortSet.add(new HostAndPort("192.168.42.150", Integer.parseInt("6383")));
        hostAndPortSet.add(new HostAndPort("192.168.42.150", Integer.parseInt("6384")));

        //連線池配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //設定最大連線數
        jedisPoolConfig.setMaxTotal(10);
        //設定最大空閒數
        jedisPoolConfig.setMaxIdle(1);
        //設定最大等待時間,超過該時間還未獲取到連線,會丟擲異常
        jedisPoolConfig.setMaxWaitMillis(10 * 1000);

        JedisCluster jedisCluster = new JedisCluster(hostAndPortSet, jedisPoolConfig);

        //賦值和取值
        jedisCluster.set("admin", "123456");
        System.out.println(jedisCluster.get("admin"));

    }

如需更多的瞭解,可以去看Redis的教程:http://www.runoob.com/redis/redis-tutorial.html