文章目錄
通過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();//關閉連接
}
}
}
結果: