一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java操作Redis詳細(xì)介紹

Java操作Redis詳細(xì)介紹

2021-02-19 23:06mengwei JAVA教程

這篇文章主要介紹了Java操作Redis詳細(xì)介紹,涉及對(duì)key的操作,string數(shù)據(jù)類型,list數(shù)據(jù)類型等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。

1. 簡(jiǎn)介

Redis 是一個(gè)開源(BSD許可)的,內(nèi)存中的key-value存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件。

2. 對(duì)key的操作

首先要建立連接Jedis jedis = new Jedis("127.0.0.1", 6379),然后就可以對(duì)string,set,zset,hash進(jìn)行操作了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//對(duì)key的測(cè)試
public void keyTest() {
    System.out.println(jedis.flushDB());
    //清空數(shù)據(jù)
    System.out.println(jedis.echo("hello"));
    //打印hello
    System.out.println(jedis.exists("foo"));
    //判斷key是否存在
    jedis.set("key1", "values1");
    jedis.set("key2", "values2");
    System.out.println(jedis.exists("key1"));
    //判斷key是否存在
    String randomKey = jedis.randomKey();
    //選擇一個(gè)隨機(jī)的key
    System.out.println("randomKey的為: " + randomKey);
    jedis.expire("key1", 60);
    //生存時(shí)間
    System.out.println(jedis.pttl("key1"));
    //剩下的生存時(shí)間
    //移除key的過期時(shí)間
    jedis.persist("key1");
    // 獲取key的類型, "string", "list", "set" "none" none表示key不存在
    System.out.println("type的類型為: " + jedis.type("key1"));
    //key的類型
    // 導(dǎo)出key的值
    String value = jedis.get("key1");
    System.out.println(value);
    // 將key重命名
    jedis.renamenx("key1", "keytest");
    System.out.println("key1是否存在: " + jedis.exists("key1"));
    // 判斷是否存在
    System.out.println("keytest是否存在: " + jedis.exists("keytest"));
    // 判斷是否存在
    // 查詢匹配的key
    // KEYS * 匹配數(shù)據(jù)庫(kù)中所有 key 。
    // KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
    // KEYS h*llo 匹配 hllo 和 heeeeello 等。
    // KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
    // 特殊符號(hào)用 \ 隔開。
    Set<string> set = jedis.keys("k*");
    //獲取所有相關(guān)的key keys方法
    System.out.println(set);
    jedis.del("key1");
    // 刪除key del方法
    System.out.println(jedis.exists("key1"));
}

3. String數(shù)據(jù)類型

?
1
2
3
4
5
6
7
8
9
10
11
12
set mystr "hello world!" //設(shè)置字符串類型
get mystr //讀取字符串類型
 
對(duì)字符串進(jìn)行數(shù)值操作
127.0.0.1:6379> set mynum "2"
OK
127.0.0.1:6379> get mynum
"2"
127.0.0.1:6379> incr mynum
(integer) 3
127.0.0.1:6379> get mynum
"3"

Java操作代碼為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//對(duì)string操作的測(cè)試
public void stringTest() {
    jedis.set("hello", "hello");
    //set
    System.out.println(jedis.get("hello"));
    //get
    // 使用append 向字符串后面添加
    jedis.append("hello", " world");
    //追加 append方法
    System.out.println(jedis.get("hello"));
    // set覆蓋字符串
    jedis.set("hello", "123");
    System.out.println(jedis.get("hello"));
    // 設(shè)置過期時(shí)間
    jedis.setex("hello2", 2, "world2");
    System.out.println(jedis.get("hello2"));
    try {
        Thread.sleep(3000);
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(jedis.get("hello2"));
    // 一次添加多個(gè)key-value對(duì)
    jedis.mset("a", "1", "b", "2");
    // 獲取a和b的value
    List<string> valus = jedis.mget("a", "b");
    System.out.println(valus);
    // 批量刪除
    jedis.del("a", "b");
    System.out.println(jedis.exists("a"));
    System.out.println(jedis.exists("b"));
}

4. List數(shù)據(jù)類型

redis中的lists在底層實(shí)現(xiàn)上并不是數(shù)組,而是鏈表。

一系列操作:RPUSH, LPUSH, LLEN, LRANGE, LPOP和 RPOP。

我們可以用LPUSH在lists的左側(cè)插入一個(gè)新元素,用RPUSH在lists的右側(cè)插入一個(gè)新元素,用LRANGE命令從lists中指定一個(gè)范圍來提取元素。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//新建一個(gè)list叫做mylist,并在列表頭部插入元素"1"
127.0.0.1:6379> lpush mylist "1"
//返回當(dāng)前mylist中的元素個(gè)數(shù)
(integer) 1
//在mylist右側(cè)插入元素"2"
127.0.0.1:6379> rpush mylist "2"
(integer) 2
//在mylist左側(cè)插入元素"0"
127.0.0.1:6379> lpush mylist "0"
(integer) 3
//列出mylist中從編號(hào)0到編號(hào)1的元素
127.0.0.1:6379> lrange mylist 0 1
1) "0"
2) "1"
//列出mylist中從編號(hào)0到倒數(shù)第一個(gè)元素
127.0.0.1:6379> lrange mylist 0 -1
1) "0"
2) "1"
3) "2"

Java操作代碼為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public void listTest() {
    String key = "mylist";
    jedis.del(key);
    //把之前的刪除
    // 隊(duì)列添加元素
    jedis.rpush(key, "aaaa");
    jedis.rpush(key, "aaaa");
    jedis.rpush(key, "bbbb");
    jedis.rpush(key, "cccc");
    jedis.rpush(key, "cccc");
    //隊(duì)列長(zhǎng)度
    System.out.println("lenth: " + jedis.llen(key));
    // 打印隊(duì)列,從索引0開始,到倒數(shù)第1個(gè)(全部元素)
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
    // 索引為1的元素
    System.out.println("index of 1: " + jedis.lindex(key, 1));
    // 設(shè)置隊(duì)列里面一個(gè)元素的值,當(dāng)index超出范圍時(shí)會(huì)返回一個(gè)error。
    jedis.lset(key, 1, "aa22");
    System.out.println("index of 1: " + jedis.lindex(key, 1));
    // 從隊(duì)列的右邊入隊(duì)一個(gè)元素
    jedis.rpush(key, "-2", "-1");
    // 先-2,后-1入隊(duì)列
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
    // 從隊(duì)列的左邊入隊(duì)一個(gè)或多個(gè)元素
    jedis.lpush(key, "second element", "first element");
    // 先second
    // element,后first
    // elementF入隊(duì)列
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
    // 從隊(duì)列的右邊出隊(duì)一個(gè)元素
    System.out.println(jedis.rpop(key));
    // 從隊(duì)列的左邊出隊(duì)一個(gè)元素
    System.out.println(jedis.lpop(key));
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
    // count > 0: 從頭往尾移除值為 value 的元素,count為移除的個(gè)數(shù)。
    // count < 0: 從尾往頭移除值為 value 的元素,count為移除的個(gè)數(shù)。
    // count = 0: 移除所有值為 value 的元素。
    jedis.lrem(key, 1, "cccc");
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
    // 即最右邊的那個(gè)元素也會(huì)被包含在內(nèi)。 如果start比list的尾部下標(biāo)大的時(shí)候,會(huì)返回一個(gè)空列表。
    // 如果stop比list的實(shí)際尾部大的時(shí)候,Redis會(huì)當(dāng)它是最后一個(gè)元素的下標(biāo)。
    System.out.println(jedis.lrange(key, 0, 2));
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
    // 刪除區(qū)間以外的元素
    System.out.println(jedis.ltrim(key, 0, 2));
    System.out.println("all elements: " + jedis.lrange(key, 0, -1));
}

5. Set類型

redis的集合,是一種無序的集合,集合中的元素沒有先后順序。
一系列操作:SADD, SREM, SISMEMBER, SMEMBERS 和 SUNION.
集合相關(guān)的操作也很豐富,如添加新元素、刪除已有元素、取交集、取并集、取差集等。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//向集合myset中加入一個(gè)新元素"one"
127.0.0.1:6379> sadd myset "one"
(integer) 1
127.0.0.1:6379> sadd myset "two"
(integer) 1
//列出集合myset中的所有元素
127.0.0.1:6379> smembers myset
1) "one"
2) "two"
//判斷元素1是否在集合myset中,返回1表示存在
127.0.0.1:6379> sismember myset "one"
(integer) 1
//判斷元素3是否在集合myset中,返回0表示不存在
127.0.0.1:6379> sismember myset "three"
(integer) 0
//新建一個(gè)新的集合yourset
127.0.0.1:6379> sadd yourset "1"
(integer) 1
127.0.0.1:6379> sadd yourset "2"
(integer) 1
127.0.0.1:6379> smembers yourset
1) "1"
2) "2"
//對(duì)兩個(gè)集合求并集
127.0.0.1:6379> sunion myset yourset
1) "1"
2) "one"
3) "2"
4) "two"

Java操作代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public void setTest() {
    // 清空數(shù)據(jù)
    System.out.println(jedis.flushDB());
    String key = "myset1";
    String key2 = "myset2";
    // 集合添加元素
    jedis.sadd(key, "aaa", "bbb", "ccc");
    jedis.sadd(key2, "bbb", "ccc", "ddd");
    // 獲取集合里面的元素?cái)?shù)量
    System.out.println(jedis.scard(key));
    //the number count of the set
    // 獲得兩個(gè)集合的交集,并存儲(chǔ)在一個(gè)關(guān)鍵的結(jié)果集
    jedis.sinterstore("destination", key, key2);
    System.out.println(jedis.smembers("destination"));
    // 獲得兩個(gè)集合的并集,并存儲(chǔ)在一個(gè)關(guān)鍵的結(jié)果集
    jedis.sunionstore("destination", key, key2);
    System.out.println(jedis.smembers("destination"));
    // key1集合中,key2集合沒有的元素,并存儲(chǔ)在一個(gè)關(guān)鍵的結(jié)果集
    jedis.sdiffstore("destination", key, key2);
    System.out.println(jedis.smembers("destination"));
    // 確定某個(gè)元素是一個(gè)集合的成員
    System.out.println(jedis.sismember(key, "aaa"));
    // 從key集合里面隨機(jī)獲取一個(gè)元素
    System.out.println(jedis.srandmember(key));
    // aaa從key移動(dòng)到key2集合
    jedis.smove(key, key2, "aaa");
    System.out.println(jedis.smembers(key));
    //獲取集合中的元素
    System.out.println(jedis.smembers(key2));
    // 刪除并獲取一個(gè)集合里面的元素
    System.out.println(jedis.spop(key));
    // 從集合里刪除一個(gè)或多個(gè)元素
    jedis.srem(key2, "ccc", "ddd");
    System.out.println(jedis.smembers(key2));
}

6. Sorted Sets類型

我們都將redis中的有序集合叫做zsets

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//新增一個(gè)有序集合myzset,并加入一個(gè)元素baidu.com,給它賦予的序號(hào)是1
127.0.0.1:6379> zadd myzset 1 baidu.com
(integer) 1
//向myzset中新增一個(gè)元素360.com,賦予它的序號(hào)是3
127.0.0.1:6379> zadd myzset 3 360.com
(integer) 1
//向myzset中新增一個(gè)元素google.com,賦予它的序號(hào)是2
127.0.0.1:6379> zadd myzset 2 google.com
(integer) 1
//列出myzset的所有元素,同時(shí)列出其序號(hào),可以看出myzset已經(jīng)是有序的了。
127.0.0.1:6379> zrange myzset 0 -1 with scores
1) "baidu.com"
2) "1"
3) "google.com"
4) "2"
5) "360.com"
6) "3"
//只列出myzset的元素
127.0.0.1:6379> zrange myzset 0 -1
1) "baidu.com"
2) "google.com"
3) "360.com"

Java操作代碼為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public void zsetTest() {
    // 清空數(shù)據(jù)
    System.out.println(jedis.flushDB());
    String key = "mysortset";
    Map<string, double=""> scoreMembers = new HashMap<>();
    scoreMembers.put("aaa", 1001.0);
    scoreMembers.put("bbb", 1002.0);
    scoreMembers.put("ccc", 1003.0);
    // 添加數(shù)據(jù)
    jedis.zadd(key, 1004.0, "ddd");
    jedis.zadd(key, scoreMembers);
    // 獲取一個(gè)排序的集合中的成員數(shù)量
    System.out.println(jedis.zcard(key));
    // 返回的成員在指定范圍內(nèi)的有序集合,以0表示有序集第一個(gè)成員,以1表示有序集第二個(gè)成員,以此類推。
    // 負(fù)數(shù)下標(biāo),以-1表示最后一個(gè)成員,-2表示倒數(shù)第二個(gè)成員
    Set<string> coll = jedis.zrange(key, 0, -1);
    System.out.println(coll);
    // 返回的成員在指定范圍內(nèi)的逆序集合
    coll = jedis.zrevrange(key, 0, -1);
    System.out.println(coll);
    // 元素下標(biāo)
    System.out.println(jedis.zscore(key, "bbb"));
    // 刪除元素
    System.out.println(jedis.zrem(key, "aaa"));
    System.out.println(jedis.zrange(key, 0, -1));
    // 給定值范圍內(nèi)的成員數(shù)
    System.out.println(jedis.zcount(key, 1002.0, 1003.0));
}

7. Hash類型

hashes存的是字符串和字符串值之間的映射

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//建立哈希,并賦值
127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34
OK
//列出哈希的內(nèi)容
127.0.0.1:6379> HGETALL user:001
1) "username"
2) "antirez"
3) "password"
4) "P1pp0"
5) "age"
6) "34"
//更改哈希中的某一個(gè)值
127.0.0.1:6379> HSET user:001 password 12345
(integer) 0
//再次列出哈希的內(nèi)容
127.0.0.1:6379> HGETALL user:001
1) "username"
2) "antirez"
3) "password"
4) "12345"
5) "age"
6) "34"

Java操作代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void hashTest() {
    // 清空數(shù)據(jù)
    System.out.println(jedis.flushDB());
    String key = "myhash";
    Map<string, string=""> hash = new HashMap<>();
    hash.put("aaa", "11");
    hash.put("bbb", "22");
    hash.put("ccc", "33");
    // 添加數(shù)據(jù)
    jedis.hmset(key, hash);
    jedis.hset(key, "ddd", "44");
    // 獲取hash的所有元素(key值)
    System.out.println(jedis.hkeys(key));
    // 獲取hash中所有的key對(duì)應(yīng)的value值
    System.out.println(jedis.hvals(key));
    // 獲取hash里所有元素的數(shù)量
    System.out.println(jedis.hlen(key));
    // 獲取hash中全部的域和值,以Map<string, string=""> 的形式返回
    Map<string, string=""> elements = jedis.hgetAll(key);
    System.out.println(elements);
    // 判斷給定key值是否存在于哈希集中
    System.out.println(jedis.hexists(key, "bbb"));
    // 獲取hash里面指定字段對(duì)應(yīng)的值
    System.out.println(jedis.hmget(key, "aaa", "bbb"));
    // 獲取指定的值
    System.out.println(jedis.hget(key, "aaa"));
    // 刪除指定的值
    System.out.println(jedis.hdel(key, "aaa"));
    System.out.println(jedis.hgetAll(key));
    // 為key中的域 field 的值加上增量 increment
    System.out.println(jedis.hincrBy(key, "bbb", 100));
    System.out.println(jedis.hgetAll(key));
}

8. 事務(wù)

事務(wù)是指“一個(gè)完整的動(dòng)作,要么全部執(zhí)行,要么什么也沒有做”。
在聊redis事務(wù)處理之前,要先和大家介紹四個(gè)redis指令,即MULTI、EXEC、DISCARD、WATCH。這四個(gè)指令構(gòu)成了redis事務(wù)處理的基礎(chǔ)。

1.MULTI用來組裝一個(gè)事務(wù);
2.EXEC用來執(zhí)行一個(gè)事務(wù);
3.DISCARD用來取消一個(gè)事務(wù);
4.WATCH用來監(jiān)視一些key,一旦這些key在事務(wù)執(zhí)行之前被改變,則取消事務(wù)的執(zhí)行。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
redis> MULTI //標(biāo)記事務(wù)開始
OK
redis> INCR user_id //多條命令按順序入隊(duì)
QUEUED
redis> INCR user_id
QUEUED
redis> INCR user_id
QUEUED
redis> PING
QUEUED
redis> EXEC //執(zhí)行
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG

Java操作代碼為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void transactionTest() {
    Transaction t = jedis.multi();
    //組裝一個(gè)事務(wù)
    t.set("hello", "world");
    Response<string> response = t.get("hello");
    t.zadd("foo", 1, "barowitch");
    t.zadd("foo", 0, "barinsky");
    t.zadd("foo", 0, "barikoviev");
    Response<set<string>> sose = t.zrange("foo", 0, -1);
    // 返回全部相應(yīng)并以有序集合的方式返回
    System.out.println(response);
    System.out.println(sose);
    t.exec();
    // 此行注意,不能缺少 執(zhí)行
    String foolbar = response.get();
    // Response.get() 可以從響應(yīng)中獲取數(shù)據(jù)
    int soseSize = sose.get().size();
    // sose.get()
    System.out.println(foolbar);
    System.out.println(sose.get());
    System.out.println("集合的size為:" + soseSize);
}

管道操作Java代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void transactionPipelineTest() {
    Pipeline p = jedis.pipelined();
    //開一個(gè)管道
    p.set("fool", "bar");
    p.zadd("foo", 1, "barowitch");
    p.zadd("foo", 0, "barinsky");
    p.zadd("foo", 0, "barikoviev");
    Response<string> pipeString = p.get("fool");
    Response<set<string>> sose = p.zrange("foo", 0, -1);
    System.out.println(pipeString);
    System.out.println(sose);
    p.sync();
    //提交
    System.out.println("==========");
    System.out.println(p.get("fool"));
    System.out.println(p.zrange("foo", 0, -1));
    int soseSize = sose.get().size();
    Set<string> setBack = sose.get();
    System.out.println(soseSize);
    System.out.println(setBack);
    System.out.println(pipeString.get());
}

總結(jié)

以上就是本文關(guān)于Java操作Redis詳細(xì)介紹的全部?jī)?nèi)容,希望對(duì)大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持。

原文鏈接:https://www.2cto.com/kf/201608/541731.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好男人资源在线观看免费的 | 交换朋友夫妇3中文字幕 | 近亲乱中文字幕 | 久久久久综合 | 亚洲视屏在线观看 | 欧美色精品天天在线观看视频 | 国产综合欧美日韩视频一区 | 青青草国产免费国产是公开 | 国产成人精品一区二区 | 国产一区二区三区丶四区 | 四虎影院最新网址 | 蜜汁肉桃全文免费阅读 | 变态人shou交小说 | 黄网在线观看免费网站台湾swag | 久久人妻无码毛片A片麻豆 久久热这里只有 精品 | 青草园网站在线观看 | 向日葵视频app下载18岁以下勿看 | 调教校花浣肠开菊 | 亚洲欧美国产在线 | 激情五色月 | 日本午夜影院 | 性色AV乱码一区二区三区视频 | 波多野结衣教师未删减版 | 干露露视频 性感写真 | 韩日视频在线观看 | 小早川怜子息梦精在线播放 | 明星ai人脸替换造梦在线播放 | 女烈受刑重口小说 | 91小视频在线观看免费版高清 | 欧美日韩精品一区二区三区视频在线 | 91在线亚洲精品一区 | 91精品国产综合久久香蕉 | 亚洲精品视频网 | 青青在线观看 | 黑人艹逼 | 天堂69亚洲精品中文字幕 | 亚洲色图网址 | 欧美日韩视频一区三区二区 | 国产精品香蕉一区二区三区 | 秘书小说阿蛮 | 91久操|