欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java操作Redis詳細介紹

 更新時間:2017年11月23日 10:37:11   投稿:mengwei  
這篇文章主要介紹了Java操作Redis詳細介紹,涉及對key的操作,string數(shù)據(jù)類型,list數(shù)據(jù)類型等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。

1. 簡介

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

2. 對key的操作

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

//對key的測試
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();
	//選擇一個隨機的key
	System.out.println("randomKey的為: " + randomKey);
	jedis.expire("key1", 60);
	//生存時間
	System.out.println(jedis.pttl("key1"));
	//剩下的生存時間
	//移除key的過期時間
	jedis.persist("key1");
	// 獲取key的類型, "string", "list", "set" "none" none表示key不存在
	System.out.println("type的類型為: " + jedis.type("key1"));
	//key的類型
	// 導出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ù)庫中所有 key 。
	// KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
	// KEYS h*llo 匹配 hllo 和 heeeeello 等。
	// KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
	// 特殊符號用 \ 隔開。
	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ù)類型

set mystr "hello world!" //設(shè)置字符串類型
get mystr //讀取字符串類型
 
對字符串進行數(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操作代碼為:

//對string操作的測試
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è)置過期時間
	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"));
	// 一次添加多個key-value對
	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在底層實現(xiàn)上并不是數(shù)組,而是鏈表。

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

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

//新建一個list叫做mylist,并在列表頭部插入元素"1"
127.0.0.1:6379> lpush mylist "1"
//返回當前mylist中的元素個數(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中從編號0到編號1的元素
127.0.0.1:6379> lrange mylist 0 1
1) "0"
2) "1"
//列出mylist中從編號0到倒數(shù)第一個元素
127.0.0.1:6379> lrange mylist 0 -1
1) "0"
2) "1"
3) "2"

Java操作代碼為:

public void listTest() {
	String key = "mylist";
	jedis.del(key);
	//把之前的刪除
	// 隊列添加元素
	jedis.rpush(key, "aaaa");
	jedis.rpush(key, "aaaa");
	jedis.rpush(key, "bbbb");
	jedis.rpush(key, "cccc");
	jedis.rpush(key, "cccc");
	//隊列長度
	System.out.println("lenth: " + jedis.llen(key));
	// 打印隊列,從索引0開始,到倒數(shù)第1個(全部元素)
	System.out.println("all elements: " + jedis.lrange(key, 0, -1));
	// 索引為1的元素
	System.out.println("index of 1: " + jedis.lindex(key, 1));
	// 設(shè)置隊列里面一個元素的值,當index超出范圍時會返回一個error。
	jedis.lset(key, 1, "aa22");
	System.out.println("index of 1: " + jedis.lindex(key, 1));
	// 從隊列的右邊入隊一個元素
	jedis.rpush(key, "-2", "-1");
	// 先-2,后-1入隊列
	System.out.println("all elements: " + jedis.lrange(key, 0, -1));
	// 從隊列的左邊入隊一個或多個元素
	jedis.lpush(key, "second element", "first element");
	// 先second
	// element,后first
	// elementF入隊列
	System.out.println("all elements: " + jedis.lrange(key, 0, -1));
	// 從隊列的右邊出隊一個元素
	System.out.println(jedis.rpop(key));
	// 從隊列的左邊出隊一個元素
	System.out.println(jedis.lpop(key));
	System.out.println("all elements: " + jedis.lrange(key, 0, -1));
	// count > 0: 從頭往尾移除值為 value 的元素,count為移除的個數(shù)。
	// count < 0: 從尾往頭移除值為 value 的元素,count為移除的個數(shù)。
	// count = 0: 移除所有值為 value 的元素。
	jedis.lrem(key, 1, "cccc");
	System.out.println("all elements: " + jedis.lrange(key, 0, -1));
	// 即最右邊的那個元素也會被包含在內(nèi)。 如果start比list的尾部下標大的時候,會返回一個空列表。
	// 如果stop比list的實際尾部大的時候,Redis會當它是最后一個元素的下標。
	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)的操作也很豐富,如添加新元素、刪除已有元素、取交集、取并集、取差集等。

//向集合myset中加入一個新元素"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
//新建一個新的集合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"
//對兩個集合求并集
127.0.0.1:6379> sunion myset yourset 
1) "1"
2) "one"
3) "2"
4) "two"

Java操作代碼:

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");
	// 獲取集合里面的元素數(shù)量
	System.out.println(jedis.scard(key));
	//the number count of the set
	// 獲得兩個集合的交集,并存儲在一個關(guān)鍵的結(jié)果集
	jedis.sinterstore("destination", key, key2);
	System.out.println(jedis.smembers("destination"));
	// 獲得兩個集合的并集,并存儲在一個關(guān)鍵的結(jié)果集
	jedis.sunionstore("destination", key, key2);
	System.out.println(jedis.smembers("destination"));
	// key1集合中,key2集合沒有的元素,并存儲在一個關(guān)鍵的結(jié)果集
	jedis.sdiffstore("destination", key, key2);
	System.out.println(jedis.smembers("destination"));
	// 確定某個元素是一個集合的成員
	System.out.println(jedis.sismember(key, "aaa"));
	// 從key集合里面隨機獲取一個元素
	System.out.println(jedis.srandmember(key));
	// aaa從key移動到key2集合
	jedis.smove(key, key2, "aaa");
	System.out.println(jedis.smembers(key));
	//獲取集合中的元素
	System.out.println(jedis.smembers(key2));
	// 刪除并獲取一個集合里面的元素
	System.out.println(jedis.spop(key));
	// 從集合里刪除一個或多個元素
	jedis.srem(key2, "ccc", "ddd");
	System.out.println(jedis.smembers(key2));
}

6. Sorted Sets類型

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

//新增一個有序集合myzset,并加入一個元素baidu.com,給它賦予的序號是1
127.0.0.1:6379> zadd myzset 1 baidu.com 
(integer) 1
//向myzset中新增一個元素360.com,賦予它的序號是3
127.0.0.1:6379> zadd myzset 3 360.com 
(integer) 1
//向myzset中新增一個元素google.com,賦予它的序號是2
127.0.0.1:6379> zadd myzset 2 google.com 
(integer) 1
//列出myzset的所有元素,同時列出其序號,可以看出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操作代碼為:

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);
	// 獲取一個排序的集合中的成員數(shù)量
	System.out.println(jedis.zcard(key));
	// 返回的成員在指定范圍內(nèi)的有序集合,以0表示有序集第一個成員,以1表示有序集第二個成員,以此類推。
	// 負數(shù)下標,以-1表示最后一個成員,-2表示倒數(shù)第二個成員
	Set<string> coll = jedis.zrange(key, 0, -1);
	System.out.println(coll);
	// 返回的成員在指定范圍內(nèi)的逆序集合
	coll = jedis.zrevrange(key, 0, -1);
	System.out.println(coll);
	// 元素下標
	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存的是字符串和字符串值之間的映射

//建立哈希,并賦值
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"
//更改哈希中的某一個值
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操作代碼:

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對應的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里面指定字段對應的值
	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. 事務

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

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

redis> MULTI //標記事務開始
OK
redis> INCR user_id //多條命令按順序入隊
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操作代碼為:

public void transactionTest() {
	Transaction t = jedis.multi();
	//組裝一個事務
	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);
	// 返回全部相應并以有序集合的方式返回
	System.out.println(response);
	System.out.println(sose);
	t.exec();
	// 此行注意,不能缺少 執(zhí)行
	String foolbar = response.get();
	// Response.get() 可以從響應中獲取數(shù)據(jù)
	int soseSize = sose.get().size();
	// sose.get()
	System.out.println(foolbar);
	System.out.println(sose.get());
	System.out.println("集合的size為:" + soseSize);
}

管道操作Java代碼:

public void transactionPipelineTest() {
	Pipeline p = jedis.pipelined();
	//開一個管道
	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詳細介紹的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持。

相關(guān)文章

  • 詳談Java中BigDecimal的一個除法異常

    詳談Java中BigDecimal的一個除法異常

    下面小編就為大家分享一篇詳談Java中BigDecimal的一個除法異常,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • Spring Boot的應用啟動與關(guān)閉的方法

    Spring Boot的應用啟動與關(guān)閉的方法

    本篇文章主要介紹了Spring Boot的應用啟動與關(guān)閉的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java異常退出條件的判斷示例代碼

    Java異常退出條件的判斷示例代碼

    這篇文章主要介紹了Java異常退出條件的判斷示例代碼,涉及常見異常退出條件等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Springboot配置圖片虛擬映射示例代碼

    Springboot配置圖片虛擬映射示例代碼

    這篇文章主要給大家介紹了關(guān)于Springboot配置圖片虛擬映射的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用springboot具有一定的參考學習價值,需要的朋友可以參考下
    2021-11-11
  • 使用Spring?Batch實現(xiàn)大數(shù)據(jù)處理的操作方法

    使用Spring?Batch實現(xiàn)大數(shù)據(jù)處理的操作方法

    通過使用Spring?Batch,我們可以高效地處理大規(guī)模數(shù)據(jù),本文介紹了如何配置和實現(xiàn)一個基本的Spring?Batch作業(yè),包括讀取數(shù)據(jù)、處理數(shù)據(jù)和寫入數(shù)據(jù)的全過程,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 基于SpringBoot?使用?Flink?收發(fā)Kafka消息的示例詳解

    基于SpringBoot?使用?Flink?收發(fā)Kafka消息的示例詳解

    這篇文章主要介紹了基于SpringBoot?使用?Flink?收發(fā)Kafka消息,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • WebSocket實現(xiàn)Web聊天室功能

    WebSocket實現(xiàn)Web聊天室功能

    這篇文章主要為大家詳細介紹了WebSocket實現(xiàn)Web聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 值得Java程序猿閱讀的書籍

    值得Java程序猿閱讀的書籍

    這篇文章主要推薦了一些值得Java程序猿閱讀的書籍,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Maven如何解決添加依賴之后沒有加載jar包報錯問題

    Maven如何解決添加依賴之后沒有加載jar包報錯問題

    這篇文章主要介紹了Maven如何解決添加依賴之后沒有加載jar包報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java開發(fā)接口吞吐量提升10多倍技巧

    java開發(fā)接口吞吐量提升10多倍技巧

    這篇文章主要為大家介紹了java開發(fā)技巧之接口吞吐量提升10多倍的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論