Jedis零基礎(chǔ)入門及操作Redis中的數(shù)據(jù)結(jié)構(gòu)詳解
Jedis簡介及其入門
Jedis簡介
redis是當(dāng)今基本所有互聯(lián)網(wǎng)產(chǎn)品都在使用的一種提供鍵值對形式的內(nèi)存數(shù)據(jù)庫。之所以說是內(nèi)存數(shù)據(jù)庫,是因為redis基于內(nèi)存的讀取和寫入相比傳統(tǒng)的數(shù)據(jù)庫基于磁盤IO快上數(shù)倍。于是乎redis在現(xiàn)在的應(yīng)用中使用的非常廣泛。
redis主要的作用在于:
- 提供緩存服務(wù),存儲訪問頻率高的熱數(shù)據(jù)防止穿透到數(shù)據(jù)庫
- 在分布式系統(tǒng)中可以作為實現(xiàn)分布式鎖的一種實現(xiàn)方案
那jedis就是集成了redis的一些命令操作,封裝了redis的java客戶端。提供了連接池管理。一般不直接使用jedis,而是在其上在封裝一層,作為業(yè)務(wù)的使用
總結(jié):Jedis: 一款java操作redis數(shù)據(jù)庫的工具。
Jedis的操作入門
導(dǎo)入Jedis的依賴
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.4.0</version> </dependency>
建立測試類進行使用
package com.yyl.firstdemo; import org.junit.jupiter.api.Test; import redis.clients.jedis.Jedis; public class JedisTest { @Test public void ConnectionTest(){ //建立連接 Jedis jedis = new Jedis("localhost", 6379); //設(shè)置連接redis的密碼 沒密碼,就不寫 // jedis.auth(""); //操作 jedis.set("username", "zhangsan"); //關(guān)閉連接 jedis.close(); } }
先啟動redis服務(wù)端,再運行代碼
運行結(jié)束以后,username就存在了redis中
Jedis操作Redis中的數(shù)據(jù)結(jié)構(gòu)
字符串類型 string
代碼如下,set與get默認的就是操作字符串類型
@Test public void JedisStringTest() { // 建立連接,如果無參,默認主機名為localhost,port為6379 Jedis jedis = new Jedis(); // 設(shè)置連接redis的密碼 // jedis.auth("123456"); // 操作數(shù)據(jù) // set存儲數(shù)據(jù) jedis.set("username", "yangminghui"); // get獲取數(shù)據(jù) String name = jedis.get("username"); System.out.println(name); //關(guān)閉連接 jedis.close(); }
運行結(jié)果:
在操作字符串時,也可以指定數(shù)據(jù)的保存時間,超過指定時間之后,數(shù)據(jù)自動刪除,比如發(fā)送驗證碼,該驗證碼在指定的時間內(nèi)有效,可以通過這種方式實現(xiàn)。
使用setex函數(shù)
存儲具有時間限制的數(shù)據(jù)
參數(shù)如下:
- 第一個參數(shù)key,是存儲的鍵
- 第二個有效期,以秒為單位
- 第三個參數(shù)value,是要存儲的值
例如:
jedis.setex("yang", 10, "666");
存儲鍵為yang
,值為666
的數(shù)據(jù),有效期為10s,10s之后自動刪除
代碼如下:
@Test public void JedisStringSetexTest() throws InterruptedException { // 建立連接,如果無參,默認主機名為localhost,port為6379 Jedis jedis = new Jedis(); // 設(shè)置連接redis的密碼 // jedis.auth("123456"); // 操作數(shù)據(jù) // setex存儲具有時間限制的數(shù)據(jù) // 第一個參數(shù)key,第二個有效期,以秒為單位,第三個參數(shù)value jedis.setex("username", 3,"yangminghui"); // get獲取數(shù)據(jù) String name = jedis.get("username"); System.out.println(name); Thread.sleep(4000); String name2 = jedis.get("username"); System.out.println(name2); //關(guān)閉連接 jedis.close(); }
運行結(jié)果:
哈希類型 map
代碼如下:
@Test public void JedisHashTest(){ //建立連接 Jedis jedis = new Jedis("localhost", 6379); // 設(shè)置連接redis的密碼 // jedis.auth("123456"); //操作數(shù)據(jù) //hset存儲數(shù)據(jù) jedis.hset("myhash", "username", "yangminghui"); jedis.hset("myhash", "password", "666666"); jedis.hset("myhash", "sex", "male"); //hget獲取數(shù)據(jù) String password = jedis.hget("myhash", "password"); System.out.println("password"+password); System.out.println("---------------------------------"); //hgetall獲取所有,得到map集合 Map<String, String> map = jedis.hgetAll("myhash"); //遍歷map集合 Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> entry : entrySet) { System.out.println(entry.getKey()+":"+entry.getValue()); } //關(guān)閉連接 jedis.close(); }
運行結(jié)果:
列表類型 list
代碼如下:
@Test public void JedisListTest(){ //建立連接 Jedis jedis = new Jedis("localhost",6379); //設(shè)置連接redis的密碼 // jedis.auth("123456"); //操作數(shù)據(jù) //lpush向列表的左邊添加數(shù)據(jù) jedis.lpush("mylist", "a","b","c"); //rpush,向列表的右邊添加數(shù)據(jù) jedis.rpush("mylist", "d","e"); //獲取數(shù)據(jù),第一個參數(shù)為鍵,第二個參數(shù)為起始值,第三個參數(shù)為結(jié)束值,-1表示到最后一個 List<String> list = jedis.lrange("mylist", 0, -1); for (String string : list) { System.out.println(string); } System.out.println("--------------"); //刪除并且返回最左邊的元素 String value1 = jedis.lpop("mylist"); System.out.println(value1); System.out.println("--------------"); //刪除并且返回最右邊的元素 String value2 = jedis.rpop("mylist"); System.out.println(value2); System.out.println("--------------"); //再次獲取 List<String> list2 = jedis.lrange("mylist", 0, -1); System.out.println(list2); //關(guān)閉連接 jedis.close(); }
運行結(jié)果如下:
集合類型 set
代碼如下:
@Test public void JedisSetTest(){ // 建立連接 Jedis jedis = new Jedis("localhost",6379); // 設(shè)置連接redis的密碼 // jedis.auth("123456"); //操作數(shù)據(jù) //sadd添加數(shù)據(jù) jedis.sadd("myset", "b","a","d","a"); // smembers獲取元素 Set<String> set = jedis.smembers("myset"); for (String string : set) { System.out.println(string); } // 關(guān)閉連接 jedis.close(); }
獲取結(jié)果沒有重復(fù)的值:
有序集合類型 sortedset
代碼如下,使用zadd添加數(shù)據(jù)的時候需要設(shè)置數(shù)據(jù)的排序分數(shù):
@Test public void JedisSortedSetTest(){ // 建立連接 Jedis jedis = new Jedis("localhost",6379); // 設(shè)置連接redis的密碼 // jedis.auth("123456"); //操作數(shù)據(jù) //zadd添加數(shù)據(jù) jedis.zadd("mysort", 50, "yang"); jedis.zadd("mysort", 12, "yu"); jedis.zadd("mysort", 22 , "wang"); //zrange獲取元素,第一個參數(shù)鍵,第二個起始位置,第三個參數(shù)結(jié)束位置 Set<String> set = jedis.zrange("mysort", 0, -1); for (String string : set) { System.out.println(string); } System.out.println("-------------"); //帶分數(shù)獲取 Set<Tuple> set2 = jedis.zrangeWithScores("mysort", 0, -1); for (Tuple tuple : set2) { System.out.println(tuple.getElement()+":"+tuple.getScore()); } //關(guān)閉連接 jedis.close(); }
運行結(jié)果如下:
到此這篇關(guān)于Jedis零基礎(chǔ)入門及操作Redis中的數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)Jedis操作Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud Admin健康檢查 郵件、釘釘群通知的實現(xiàn)
這篇文章主要介紹了Spring Cloud Admin健康檢查 郵件、釘釘群通知的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Java SimpleDateFormat線程安全問題原理詳解
這篇文章主要介紹了Java SimpleDateFormat線程安全問題原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05java Split 實現(xiàn)去除一個空格和多個空格
這篇文章主要介紹了java Split 實現(xiàn)去除一個空格和多個空格,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10