使用jedis操作redis常用方法


在redis入門及在商城案例中的使用中簡單介紹了下使用jedis如何操作redis,但是其實方法是跟redis的操作大部分是相對應的。我這里做下記錄

1、String類型操作
public class StringTest {

Jedis jedis;
@Before//該注解下的方法在@Test執行之前執行
public void before(){
//創建連接
jedis = new Jedis("192.168.25.128",6379);
}
@After//該注解下的方法在@Test執行之后執行
public void after(){
//關閉連接
jedis.close();
}
/*
* 存儲,獲取,設置過期時間,key命令
*/
@Test
public void test() throws InterruptedException{
//1.存儲值
jedis.set("name", "張三");
//2.取值
String name = jedis.get("name");
System.out.println(name);
//3.key命令:查看有效期,-1表示持久化
Long t = jedis.ttl("name");
System.out.println(t);
//4.key命令,對已經存在的key設置過期時間
jedis.expire("name", 5);
while(true){
String name2 = jedis.get("name");
System.out.println(name2);
System.out.println("有效期為:"+jedis.ttl("name")+"秒");
Thread.sleep(2000);
}

}
輸出結果:
張三
-1
-------------------
張三
有效期為:5秒
張三
有效期為:3秒
張三
有效期為:1秒
null
有效期為:-2秒
/*
* 測試自增自減:前提,value值能解析為數字類型
* 刪除
*/
@Test
public void test2(){
jedis.set("age", "18");
String age1 = jedis.get("age");
System.out.println("當前年齡:"+age1);

Long age2 = jedis.decr("age");
System.out.println("一年前年齡為:"+age2);

Long age3 = jedis.incr("age");
System.out.println("現在年齡又變回為:"+age3);

//如果key不存在則忽略此操作
Long del = jedis.del("age1");
}
輸出結果:
當前年齡:18
一年前年齡為:17
現在年齡又變回為:18
/*
* 批量存儲和獲取
*/
@Test
public void test3(){
jedis.mset("a1","mysql","a2","oracle","a3","sqlServer","a4",
"redis","a5","mongodb","a6","hbase");
List list = jedis.mget("a1","a2","a3","a4","a5","a6");
for (String s : list) {
System.out.println(s);
}
}
輸出結果:
mysql
oracle
sqlServer
redis
mongodb
hbase
/*
* 存儲值的同時設置過期時間,判斷key是否存在
*/
@Test
public void test4() throws InterruptedException{
//jedis.setex(key, 過期時間, value)
jedis.setex("life", 5, "享受美好");
while(jedis.exists("life")){
System.out.println(jedis.get("life"));
Thread.sleep(2000);
}
}
輸出結果:在輸出三個“享受美好”之后便不再輸出
享受美好
享受美好
享受美好
2、Hash類型操作
public class MapTest {

Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
}

@Test
public void test1(){
//1.存儲值
jedis.hset("student", "name", "小李");
jedis.hset("student", "class", "小學生");
jedis.hset("student", "age", "10");
jedis.hset("student", "skill", "keng");
//2.獲取指定值 獲取名字
String name = jedis.hget("student", "name");
System.out.println(name);
System.out.println("----------------------");
//3.獲取存儲的map
Map<string, string=""> all = jedis.hgetAll("student");
Set<entry<string,string>> set = all.entrySet();
Iterator<entry<string, string="">> iterator = set.iterator();
while (iterator.hasNext()) {
Entry<string, string=""> entry = iterator.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
System.out.println("------------------------------");
//4.獲取map中全部key
Set keySet = jedis.hkeys("student");
for (String key : keySet) {
System.out.println(key);
}
System.out.println("-------------------------------");
//5.獲取map中全部values
List list = jedis.hvals("student");
for (String value : list) {
System.out.println(value);
}
System.out.println("------------------");
//6.刪除指定的值 刪除map中class,name兩對鍵值對
Long long1 = jedis.hdel("student", "class","name");
Set set2 = jedis.hkeys("student");
for (String key : set2) {
System.out.println(key);
}
System.out.println("-------------------");
//7.判斷map是否存在
Boolean e = jedis.hexists("student", "class");
System.out.println("class是否存在:"+e);
System.out.println("-----------------");
//8.自增自減,可以指定增加減少的數值
jedis.hincrBy("student", "age", 2);
System.out.println(jedis.hget("student", "age"));
}
}
輸出結果:
小李
----------------------
skill:keng
name:小李
class:小學生
age:10
------------------------------
name
class
age
skill
-------------------------------
10
keng
小李
小學生
------------------
age
skill
-------------------
class是否存在:false
-----------------
2年后年齡為:12
String跟Hash是最常見的類型,在實習這段時間也都只用到這兩種,所以我覺得不管怎樣這兩種至少應該掌握。

3、List類型操作
public class ListTest {
Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
}

@Test
public void test(){
//1.存儲值(左邊開始)。當成棧(子彈匣),先進先出,入棧
jedis.lpush("scores", "100","90","80","70","60");
//右邊開始存
jedis.rpush("scores", "50","40","30","20","10");
//2.取值(左邊開始),可以說是同時移除了該值,出棧
String lv = jedis.lpop("scores");
//右邊開始取
String rv= jedis.rpop("scores");
System.out.println("左邊取為:"+lv);
System.out.println("右邊取為:"+rv);
System.out.println("--------------------");
//3.取所有值(只有左邊開始取)0 -1表示取所有位置,位置是[start,end]
//redis命令行操作的時候已經演示過
List list = jedis.lrange("scores", 0, -1);
for (String value : list) {
System.out.println(value);
}
System.out.println("-----------");
//4.插隊,44插入到100后面,注:沒有什么rinsert()方法
jedis.linsert("scores",BinaryClient.LIST_POSITION .AFTER, "100", "44");
List list2 = jedis.lrange("scores", 0, -1);
for (String value : list2) {
System.out.println(value);
}
List list3 = jedis.lrange("scores", 0, 3);
for (String value : list3) {
System.out.println(value);
}

}
}
輸出結果:
左邊取為:60
右邊取為:10
--------------------
70
80
90
100
50
40
30
20
-----------
70
80
90
100
44
50
40
30
20
---------------
70
80
90
100
4、Set類型操作
public class JedisTest {
Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
}
/*
* 測試添加,取值,移除,判斷
*/
@Test
public void test1(){
//1.存儲
jedis.sadd("names", "Tom","Jack","Harry","Lucy","laowang");
//2.獲取set中全部記錄,取出來的跟存儲的順序不一樣
Set members = jedis.smembers("names");
for (String member : members) {
System.out.println(member);
}
//3.移除指定數據
jedis.srem("names","Tome","Jack");
//4.判斷某值是否為set中成員
Boolean tom = jedis.sismember("names", "Tome");
System.out.println("Tom在名單里嗎:"+tom);
}
輸出結果:
Jack
Harry
Lucy
Tom
laowang
Tom在名單里嗎:false
/*
* 差集,交集,並集
*/
@Test
public void test2(){
jedis.sadd("set1", "a","b","c","d");
jedis.sadd("set2", "b","c","d","e");
//1.差集 set1中有set2中沒有的
Set sdiff = jedis.sdiff("set1","set2");
for (String d : sdiff) {
System.out.println(d);
}
System.out.println("----------------");
//2.交集
Set sinter = jedis.sinter("set1","set2");
for (String in : sinter) {
System.out.println(in);
}
System.out.println("----------------");
//3.並集
Set sunion = jedis.sunion("set1","set2");
for (String un : sunion) {
System.out.println(un);
}
}
輸出結果:
a
----------------
d
c
b
----------------
d
e
a
c
b
5、Zset(有序Set)類型操作
public class SortedSetTest {
Jedis jedis;
@Before
public void before(){
jedis = new Jedis("192.168.25.128",6379);
}
@After
public void after(){
jedis.close();
}
@Test
public void test1(){
//1.添加
jedis.zadd("table", 1, "a");
jedis.zadd("table", 3, "b");
jedis.zadd("table", 2, "c");
jedis.zadd("table", 5, "d");
jedis.zadd("table", 4, "e");
//2.取值 0 -1表示取所有,可以自己指定開始結束位置,跟list一樣
//默認根據分數由低到高排
Set table = jedis.zrange("table", 0, -1);
for (String t : table) {
System.out.println(t);
}
System.out.println("-----------------");
//3.排序,由高到低排
Set table2 = jedis.zrevrange("table", 0, -1);
for (String t : table2) {
System.out.println(t);
}
System.out.println("-----------------");
//4.修改某個值的分數
jedis.zincrby("table", 7, "a");
Set table3 = jedis.zrevrange("table", 0, -1);
for (String t : table3) {
System.out.println(t);
}
}
}
輸出結果:
a
c
b
e
d
-----------------
d
e
b
c
a
-----------------
a
d
e
b
c

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM