Redis-Jedis 通過Java程序來操縱Redis數據庫(五大數據類型方法的測試!事務的測試)

通過Java程序來操縱Redis數據庫

終於到了用我們的Java程序來操縱Redis數據庫的環節啦~還是程序寫着舒坦

什麼是Jedis?

它是官方推薦的Java連接開發工具!使用Java操縱Redis的中間件!說白了就是一個包,我們導入程序就可以使用了~

Jedis的使用

那麼到底怎樣去使用它呢?別急慢慢來~

1、首先我們要創建一個普通的maven項目

在這裏插入圖片描述

2、導入Jedis的包

另外,json的包我們也可能會用得到,也一起導進來!

<dependencies>
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
    </dependency>
    
    <!--json-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
</dependencies>

3、測試連接

注意:我這裏用的是windows系統連接本地的服務,就得在windows中也裝上redis,並啓動服務,纔可連接成功!

package com.gang;

/*
Description:測試連接
Author:32259
Time:2020四月2020/4/316:15
*/

import redis.clients.jedis.Jedis;

public class TestPing {

    public static void main(String[] args) {
    	//new Jedis對象即可
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //jedis所有的方法都是我之前博客裏寫的那些命令!只不過在這裏成爲了方法
        System.out.println(jedis.ping());
    }
}

查看測試結果:連接成功!
在這裏插入圖片描述

下面是一些基本方法的使用測試!對應我以前博客中redis的命令,這裏只不過變成了方法而已!

4、關於Redis-key基本方法的使用

package com.gang;

/*
Description:測試普通鍵key
Author:32259
Time:2020四月2020/4/316:40
*/

import redis.clients.jedis.Jedis;

public class TestKey {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        System.out.println("清空數據:"+jedis.flushDB());
        System.out.println("判斷某個鍵是否存在:"+jedis.exists("username"));
        System.out.println("新增<'username','fanmenggang'>的鍵值對:"+jedis.set("username","fanmenggang"));
        System.out.println("新增<'password','123456'>的鍵值對:"+jedis.set("password","123456"));
        System.out.println("查看系統中所有的鍵:"+jedis.keys("*"));
        System.out.println("刪除鍵password:"+jedis.del("password"));
        System.out.println("判斷鍵password是否存在:"+jedis.exists("password"));
        System.out.println("查看鍵username所存儲的值的類型:"+jedis.type("username"));
        System.out.println("隨機返回key中的一個:"+jedis.randomKey());
        System.out.println("重命名key:"+jedis.rename("username","root"));
        System.out.println("取出改名後root鍵的值:"+jedis.get("root"));
        System.out.println("切換到2號數據庫:"+jedis.select(2));
        System.out.println("查看2號數據庫中的所有鍵(當然裏面沒存東西):"+jedis.keys("*"));
        System.out.println("新增<'username','gangzi'>的鍵值對:"+jedis.set("username","gangzi"));
        System.out.println("切換回0號數據庫:"+jedis.select(0));
        System.out.println("查看0號數據庫中的所有鍵:"+jedis.keys("*"));
        System.out.println("刪除當前數據庫中的所有key:"+jedis.flushDB());
        System.out.println("返回當前數據庫的大小(key的數目):"+jedis.dbSize());
        System.out.println("清空所有的數據庫:"+jedis.flushAll());
        System.out.println("查看2號數據庫中還有沒有username這個鍵:"+jedis.keys("*"));
    }
}

結果:
在這裏插入圖片描述

測試五大數據類型的使用

1.String

package com.gang;

/*
Description:測試String類型
Author:32259
Time:2020四月2020/4/317:22
*/

import redis.clients.jedis.Jedis;

import java.util.concurrent.TimeUnit;

public class TestString {
    public static void main(String[] args){
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        System.out.println("==========增加數據========");
        System.out.println(jedis.set("k1","v1"));
        System.out.println(jedis.set("k2","v2"));
        System.out.println(jedis.set("k3","v3"));
        System.out.println("刪除鍵k2:"+jedis.del("k2"));
        System.out.println("獲取鍵k2:"+jedis.get("k2"));
        System.out.println("修改k1:"+jedis.set("k1","v1changed"));
        System.out.println("獲取k1的值:"+jedis.get("k1"));
        System.out.println("在k3後面拼接值:"+jedis.append("k3","End"));
        System.out.println("獲取k3的值:"+jedis.get("k3"));
        System.out.println("增加多個鍵值對:"+jedis.mset("key1","value1","key2","value2"));
        System.out.println("獲取多個鍵的值:"+jedis.mget("k1","k2","key1","key2"));
        System.out.println("刪除多個鍵:"+jedis.del("k1","key1"));

        jedis.flushDB();
        System.out.println("==========新增鍵值對防止覆蓋原先值=========");
        System.out.println(jedis.setnx("k1","v1"));
        System.out.println(jedis.setnx("k2","v2"));
        System.out.println(jedis.setnx("k2","v8"));
        System.out.println(jedis.get("k1"));
        System.out.println(jedis.get("k2"));

        System.out.println("==========新增鍵值對並設置有效時間=========");
        System.out.println(jedis.setex("k3",5,"v3"));
        System.out.println(jedis.get("k3"));
        try {
            //休眠6秒
            TimeUnit.SECONDS.sleep(6);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(jedis.get("k3"));

        System.out.println("========獲取原來的值,並更新爲新的值=========");
        System.out.println(jedis.getSet("k2","v2xinzhi"));
        System.out.println(jedis.get("k2"));

        System.out.println("截取指定下標的字符串:"+jedis.getrange("k2",3,6));
    }
}

結果:
在這裏插入圖片描述

2.List

package com.gang;

/*
Description:測試List
Author:32259
Time:2020四月2020/4/319:43
*/

import redis.clients.jedis.Jedis;

public class TestList {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        System.out.println("=========添加一個List========");
        jedis.lpush("collections","ArrayList","Vector","Stack","HashMap");
        jedis.lpush("collections","HashSet");
        jedis.lpush("collections","TreeSet");//從左邊往進加
        jedis.rpush("collections","HashMap");//從右邊往進加
        jedis.lpush("collections","TreeMap");
        System.out.println("collections中的內容:"+jedis.lrange("collections",0,-1));//-1代表倒數第一個
        System.out.println("collections中0到3區間的內容:"+jedis.lrange("collections",0,3));
        System.out.println("============================");
        //刪除列表指定的值,第二個參數爲刪除的個數(有重複時)!後add進去的值先被刪掉,類似於出棧!
        System.out.println("刪除指定個數的元素:"+jedis.lrem("collections",2,"HashMap"));
        System.out.println("collections中的內容:"+jedis.lrange("collections",0,-1));
        System.out.println("刪除下標0-3區間之外的元素:"+jedis.ltrim("collections",0,3));
        System.out.println("collections中的內容:"+jedis.lrange("collections",0,-1));
        System.out.println("collections列表出棧(左):"+jedis.lpop("collections"));
        System.out.println("collections中的內容:"+jedis.lrange("collections",0,-1));
        System.out.println("collections列表出棧(右):"+jedis.rpop("collections"));
        System.out.println("collections中的內容:"+jedis.lrange("collections",0,-1));
        System.out.println("修改指定下標1的內容:"+jedis.lset("collections",1,"hahaaha"));
        System.out.println("collections中的內容:"+jedis.lrange("collections",0,-1));
        System.out.println("============================");
        System.out.println("collections的長度:"+jedis.llen("collections"));
        System.out.println("獲取指定下標1的元素:"+jedis.lindex("collections",1));
        System.out.println("==============排序==============");
        jedis.lpush("sortedList","5","6","4","3","9","1");
        System.out.println("排序前:"+jedis.lrange("sortedList",0,-1));
        System.out.println("排序後:"+jedis.sort("sortedList"));


    }
}

結果:
在這裏插入圖片描述

3.Set

package com.gang;

/*
Description:測試Set
Author:32259
Time:2020四月2020/4/320:13
*/

import redis.clients.jedis.Jedis;

public class TestSet {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.flushDB();
        System.out.println("===============向集合中添加元素(不重複)================");
        System.out.println(jedis.sadd("set","e1","e3","e2","e5","e7","e4","e0","e8"));
        System.out.println(jedis.sadd("set","e6"));
        System.out.println(jedis.sadd("set","e6"));
        System.out.println("set集合中所有的元素爲:"+jedis.smembers("set"));
        System.out.println("刪除一個指定元素e0:"+jedis.srem("set","e0"));
        System.out.println("set集合中所有的元素爲:"+jedis.smembers("set"));
        System.out.println("刪除多個指定元素e7,e5:"+jedis.srem("set","e7","e5"));
        System.out.println("set集合中所有的元素爲:"+jedis.smembers("set"));
        System.out.println("隨機的移除集合中的一個元素:"+jedis.spop("set"));
        System.out.println("隨機的移除集合中的一個元素:"+jedis.spop("set"));
        System.out.println("set集合中所有的元素爲:"+jedis.smembers("set"));
        System.out.println("set集合中的元素個數:"+jedis.scard("set"));
        System.out.println("e1是否在set集合中:"+jedis.sismember("set","e1"));
        System.out.println("========================================================");
        System.out.println(jedis.sadd("set1","e1","e3","e2","e5","e7","e4","e6"));
        System.out.println(jedis.sadd("set2","e1","e3","e0","e5","e8","e4","e6"));
        System.out.println("將set1中的元素刪掉e1並將e1存入set3中:"+jedis.smove("set1","set3","e1"));
        System.out.println("將set1中的元素刪掉e5並將e5存入set3中:"+jedis.smove("set1","set3","e5"));
        System.out.println("set1集合中所有的元素爲:"+jedis.smembers("set1"));
        System.out.println("set3集合中所有的元素爲:"+jedis.smembers("set3"));
        System.out.println("=====================集合運算=======================");
        System.out.println("set1集合中所有的元素爲:"+jedis.smembers("set1"));
        System.out.println("set2集合中所有的元素爲:"+jedis.smembers("set2"));
        System.out.println("set1與set2集合的並集:"+jedis.sunion("set1","set2"));
        System.out.println("set1與set2集合的交集:"+jedis.sinter("set1","set2"));
        System.out.println("set1與set2集合的差集:"+jedis.sdiff("set1","set2"));//set1與set2中去掉交集後剩餘的元素
        jedis.sinterstore("set4","set1","set2");//求交集並將交集保存在dstkey中
        System.out.println("set4集合中所有的元素爲:"+jedis.smembers("set4"));
    }
}

結果:
在這裏插入圖片描述

4.Hash

package com.gang;

/*
Description:測試Hash
Author:32259
Time:2020四月2020/4/321:31
*/

import redis.clients.jedis.Jedis;

import java.util.HashMap;

public class TestHash {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.flushDB();
        HashMap<String, String> map = new HashMap<>();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");


        //添加元素
        jedis.hmset("hash",map);
        //還可以這麼添加
        jedis.hset("hash","k5","v5");
        System.out.println("散列hash的所有鍵值對:"+jedis.hgetAll("hash"));
        System.out.println("散列hash的所有鍵:"+jedis.hkeys("hash"));
        System.out.println("散列hash的所有值:"+jedis.hvals("hash"));
        System.out.println("將k6的保存的值加上一個整數,如果k6不存在則添加k6:"+jedis.hincrBy("hash","k6",5));
        System.out.println("散列hash的所有鍵值對:"+jedis.hgetAll("hash"));
        System.out.println("將k6的保存的值加上一個整數,如果k6不存在則添加k6:"+jedis.hincrBy("hash","k6",5));
        System.out.println("散列hash的所有鍵值對:"+jedis.hgetAll("hash"));
        System.out.println("刪除一個或者多個鍵值對:"+jedis.hdel("hash","k1","k3"));
        System.out.println("散列hash的所有鍵值對:"+jedis.hgetAll("hash"));
        System.out.println("散列hash的所有鍵值對個數:"+jedis.hlen("hash"));
        System.out.println("判斷k2是否在hash中:"+jedis.hexists("hash","k2"));
        System.out.println("判斷k1是否在hash中:"+jedis.hexists("hash","k1"));
        System.out.println("獲取hash中的一個值:"+jedis.hmget("hash","k4"));
        System.out.println("獲取hash中的多個值:"+jedis.hmget("hash","k4","k6"));



    }
}

結果:
在這裏插入圖片描述

5.Zset

package com.gang;

/*
Description:測試Zset
Author:32259
Time:2020四月2020/4/321:48
*/

import redis.clients.jedis.Jedis;

public class TestZset {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.flushDB();
        jedis.zadd("myset",1,"one");
        jedis.zadd("myset",2,"two");
        jedis.zadd("myset",3,"three");
        System.out.println("查看全部的值:"+jedis.zrange("myset",0,-1));


        jedis.flushDB();
        jedis.zadd("salsry",2500,"zhangsan");
        jedis.zadd("salsry",500,"lisi");
        jedis.zadd("salsry",5000,"wangwu");
        System.out.println("由高到低排序:"+jedis.zrangeByScore("salsry","-inf","+inf"));
        System.out.println("由高到低排序:"+jedis.zrevrangeByScore("salsry","+inf","-inf"));
        System.out.println("查看全部的值:"+jedis.zrange("salsry",0,-1));
        jedis.zrem("salsry","lisi");
        System.out.println("查看全部的值:"+jedis.zrange("salsry",0,-1));
        System.out.println("查看所有元素的個數:"+jedis.zcard("salsry"));


        jedis.flushDB();
        jedis.zadd("myset",1,"one");
        jedis.zadd("myset",2,"two");
        jedis.zadd("myset",3,"three");
        jedis.zadd("myset",4,"four");

        System.out.println("獲取指定區間元素的個數:"+jedis.zcount("myset", 0, 3));


    }
}

結果:
在這裏插入圖片描述

事務

  • 正常運行
package com.gang;

/*
Description:測試事務
Author:32259
Time:2020四月2020/4/322:15
*/

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestTX {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","fanmenggang");
        jsonObject.put("sex","nan");

        //開啓事務
        Transaction multi = jedis.multi();
        String s = jsonObject.toJSONString();

        try {
            multi.set("user1",s);
            multi.set("user2","haha");

            multi.exec();//執行事務
        }catch (Exception e){
            multi.discard();//放棄事務
            e.printStackTrace();
        }finally {
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            jedis.close();//關閉連接

        }


    }
}

結果:
在這裏插入圖片描述

  • 測試原子性,模擬運行時異常,語法錯誤
package com.gang;

/*
Description:測試事務
Author:32259
Time:2020四月2020/4/322:15
*/

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestTX {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","fanmenggang");
        jsonObject.put("sex","nan");

        //開啓事務
        Transaction multi = jedis.multi();
        String s = jsonObject.toJSONString();

        try {
            multi.set("user1",s);
            multi.set("user2","haha");
            multi.incrBy("user2",5);//模擬運行時異常,語法錯誤,字符串不能進行自增,證明事務不保證原子性
            multi.exec();//執行事務
        }catch (Exception e){
            multi.discard();//放棄事務
            e.printStackTrace();
        }finally {
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            jedis.close();//關閉連接

        }


    }
}

結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章