Jedis零基礎入門及操作Redis中的數(shù)據(jù)結(jié)構(gòu)詳解
Jedis簡介及其入門
Jedis簡介
redis是當今基本所有互聯(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)在的應用中使用的非常廣泛。
redis主要的作用在于:
- 提供緩存服務,存儲訪問頻率高的熱數(shù)據(jù)防止穿透到數(shù)據(jù)庫
- 在分布式系統(tǒng)中可以作為實現(xiàn)分布式鎖的一種實現(xiàn)方案
那jedis就是集成了redis的一些命令操作,封裝了redis的java客戶端。提供了連接池管理。一般不直接使用jedis,而是在其上在封裝一層,作為業(yè)務的使用
總結(jié):Jedis: 一款java操作redis數(shù)據(jù)庫的工具。
Jedis的操作入門
導入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);
//設置連接redis的密碼 沒密碼,就不寫
// jedis.auth("");
//操作
jedis.set("username", "zhangsan");
//關閉連接
jedis.close();
}
}先啟動redis服務端,再運行代碼
運行結(jié)束以后,username就存在了redis中

Jedis操作Redis中的數(shù)據(jù)結(jié)構(gòu)
字符串類型 string
代碼如下,set與get默認的就是操作字符串類型
@Test
public void JedisStringTest() {
// 建立連接,如果無參,默認主機名為localhost,port為6379
Jedis jedis = new Jedis();
// 設置連接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);
//關閉連接
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();
// 設置連接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);
//關閉連接
jedis.close();
}
運行結(jié)果:

哈希類型 map
代碼如下:
@Test
public void JedisHashTest(){
//建立連接
Jedis jedis = new Jedis("localhost", 6379);
// 設置連接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());
}
//關閉連接
jedis.close();
}
運行結(jié)果:

列表類型 list
代碼如下:
@Test
public void JedisListTest(){
//建立連接
Jedis jedis = new Jedis("localhost",6379);
//設置連接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);
//關閉連接
jedis.close();
}運行結(jié)果如下:

集合類型 set
代碼如下:
@Test
public void JedisSetTest(){
// 建立連接
Jedis jedis = new Jedis("localhost",6379);
// 設置連接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);
}
// 關閉連接
jedis.close();
}獲取結(jié)果沒有重復的值:

有序集合類型 sortedset
代碼如下,使用zadd添加數(shù)據(jù)的時候需要設置數(shù)據(jù)的排序分數(shù):
@Test
public void JedisSortedSetTest(){
// 建立連接
Jedis jedis = new Jedis("localhost",6379);
// 設置連接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());
}
//關閉連接
jedis.close();
}運行結(jié)果如下:

到此這篇關于Jedis零基礎入門及操作Redis中的數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹到這了,更多相關Jedis操作Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
idea一鍵部署SpringBoot項目jar包到服務器的實現(xiàn)
我們在開發(fā)環(huán)境部署項目一般通過idea將項目打包成jar包,然后連接linux服務器,將jar手動上傳到服務中,本文就來詳細的介紹一下步驟,感興趣的可以了解一下2023-12-12
關于MyBatis中SqlSessionFactory和SqlSession簡解
這篇文章主要介紹了MyBatis中SqlSessionFactory和SqlSession簡解,具有很好的參考價值,希望大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
基于java時區(qū)轉(zhuǎn)換夏令時的問題及解決方法
下面小編就為大家分享一篇基于java時區(qū)轉(zhuǎn)換夏令時的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
Spring?Cloud?Alibaba負載均衡實現(xiàn)方式
這篇文章主要為大家介紹了Spring?Cloud?Alibaba負載均衡實現(xiàn)方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
如何用Java將數(shù)據(jù)庫的數(shù)據(jù)生成pdf返回給前端用戶下載
本文詳細介紹了使用SpringBoot、iText庫、MyBatis等技術從數(shù)據(jù)庫中選取數(shù)據(jù)并生成PDF文件的后端處理流程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-09-09
JSON數(shù)據(jù)轉(zhuǎn)換成Java對象的方法
就目前來講,將Java對象轉(zhuǎn)換成JSON對象還是相當簡單的,但是 將JSON對象轉(zhuǎn)換成Java對象,就相對比較復雜了些2014-03-03

