關(guān)于Jedis的用法以及Jedis使用Redis事務(wù)
我們要使用java來操作redis
什么是Jedis?
什么是Jedis 是Redis官方推薦的java連接開發(fā)工具!使用Java操作Redis 中間件!(就是一個(gè)jar包)如果你要使用java操作redis,那么一定要對Jedis十分的熟悉!
測試
1、導(dǎo)入對應(yīng)的依賴
<!-- 導(dǎo)入jedis的包 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.2.2</version> </dependency> <!-- fastjson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.50</version> </dependency>
2、編碼測試
- 連接redis數(shù)據(jù)庫
- 操作命令
- 斷開連接!
public class TestPing { public static void main(String[] args) { //1、new Jedis對象即可 Jedis jedis = new Jedis("127.0.0.1",6379); //Jedis所有的命令就是我們之前學(xué)習(xí)的指令! System.out.println(jedis.ping());; } }
輸出:說明連接成功
PONG
jedis所有方法和redis里的所有命令一模一樣,沒有任何改變,在redis上能操作的,使用jedis同樣可以操作
String
執(zhí)行結(jié)果:
string的其他方法:
list
執(zhí)行結(jié)果:
set
執(zhí)行結(jié)果:
hash
執(zhí)行結(jié)果:
zset
也是一樣,在linux上執(zhí)行的命令就是jedis的方法
所有的api命令,就是我們學(xué)習(xí)的指令,一一對應(yīng),一個(gè)都沒有變化!
事務(wù)
1、在java中使用redis的事務(wù):
package com.uno; import com.alibaba.fastjson.JSONObject; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class TestTx { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); JSONObject jsonObject = new JSONObject(); jsonObject.put("hello","world"); jsonObject.put("name", "UNO"); String result = jsonObject.toJSONString(); //1、開啟事務(wù) Transaction multi = jedis.multi(); //jedis.watch(result); //加樂觀鎖,監(jiān)視 try { //2、命令入隊(duì) multi.set("user1", result); multi.set("user2",result); //3、執(zhí)行,這三個(gè)步驟也都是和linux中操作redis命令一模一樣 multi.exec(); } catch (Exception e) { //當(dāng)出現(xiàn)錯(cuò)誤,放棄事務(wù) multi.discard(); throw new RuntimeException(e); } finally { System.out.println(jedis.get("user1")); System.out.println(jedis.get("user2")); //關(guān)閉連接 jedis.close(); } } }
執(zhí)行結(jié)果:成功
{"name":"UNO","hello":"world"}
{"name":"UNO","hello":"world"}
2、如果出現(xiàn)錯(cuò)誤:
package com.uno; import com.alibaba.fastjson.JSONObject; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class TestTx { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.flushDB(); //先清理一下數(shù)據(jù)庫,免得被上面的代碼在redis設(shè)置的值影響 JSONObject jsonObject = new JSONObject(); jsonObject.put("hello","world"); jsonObject.put("name", "UNO"); String result = jsonObject.toJSONString(); //1、開啟事務(wù) Transaction multi = jedis.multi(); // jedis.watch(result); //加樂觀鎖,監(jiān)視 try { //2、命令入隊(duì) multi.set("user1", result); multi.set("user2",result); int i = 1/0; //手動(dòng)設(shè)置一個(gè)運(yùn)行時(shí)異常,看是不是會(huì)出現(xiàn)運(yùn)行時(shí)異常,然后被catch捕獲 //3、執(zhí)行,這三個(gè)步驟也都是和linux中操作redis命令一模一樣 multi.exec(); } catch (Exception e) { //放棄事務(wù) multi.discard(); throw new RuntimeException(e); } finally { System.out.println(jedis.get("user1")); System.out.println(jedis.get("user2")); //關(guān)閉連接 jedis.close(); } } }
執(zhí)行結(jié)果:出現(xiàn)運(yùn)行時(shí)異常,被catch捕獲,在catch中放棄事務(wù),就是都不執(zhí)行
null
null
Exception in thread "main" java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
at com.uno.TestTx.main(TestTx.java:28)
Caused by: java.lang.ArithmeticException: / by zero
at com.uno.TestTx.main(TestTx.java:22)
注意事項(xiàng):jedis連不上遠(yuǎn)程服務(wù)器
用Jedis連接阿里云等服務(wù)器上的redis
一. 配置redis.conf
1.設(shè)置訪問redis的密碼:requirepass 要設(shè)置密碼
2.注釋bind 127.0.0.1
(重啟redis-server服務(wù),進(jìn)入redis后要先驗(yàn)證密碼,用這個(gè)命令:auth 密碼 ,然后ping一下看有沒有配置成功)
二 . idea訪問時(shí)添加auth密碼
Jedis jedis = new Jedis("服務(wù)器的外網(wǎng)ip",6379); jedis.auth("redis的密碼"); System.out.println(jedis.ping()); (輸出PONG的話就成功了)
題外話:為什么事務(wù)transaction簡稱為TX
transaction的讀法是/træn’zæk??n/
x的讀法是/?ks/
所以tx分別代表:t - tran; x-saction
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于javaMybatis存進(jìn)時(shí)間戳的問題
這篇文章主要介紹了javaMybatis存進(jìn)時(shí)間戳的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java創(chuàng)建線程三種方式的優(yōu)缺點(diǎn)
今天小編就為大家分享一篇關(guān)于Java創(chuàng)建線程三種方式的優(yōu)缺點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12基于Java實(shí)現(xiàn)經(jīng)典蜘蛛紙牌游戲
《蜘蛛紙牌》(Ancient?Spider)?是由Oberon?Games開發(fā)的一款休閑益智類游戲。本文將利用Java語言實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下2022-05-05SpringBoot使用開發(fā)環(huán)境application.properties問題
這篇文章主要介紹了SpringBoot使用開發(fā)環(huán)境application.properties問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07springboot中@Async默認(rèn)線程池導(dǎo)致OOM問題
這篇文章主要介紹了springboot中@Async默認(rèn)線程池導(dǎo)致OOM問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06基于SpringBoot實(shí)現(xiàn)圖片上傳與顯示
這篇文章主要為大家詳細(xì)介紹了基于SpringBoot實(shí)現(xiàn)圖片上傳與顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08利用idea生成webservice客戶端超詳解步驟(wsdl文件的使用)
這篇文章主要給大家介紹了關(guān)于利用idea生成webservice客戶端超詳解步驟,第一次接觸webservice,從采坑到采坑,算是了解了一些,明白了一些,文中通過代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12Java中@ConditionalOnProperty注解使用
在Spring?Boot中,@ConditionalOnProperty注解是一種方便的工具,用于根據(jù)應(yīng)用程序配置文件中的屬性值來控制Bean的創(chuàng)建和加載,本文就來介紹一下Java中@ConditionalOnProperty注解使用,感興趣的可以了解一下2023-11-11Java 十進(jìn)制轉(zhuǎn)二、八、十六進(jìn)制的字符串
本文主要介紹了十進(jìn)制轉(zhuǎn)二進(jìn)制;十進(jìn)制轉(zhuǎn)八進(jìn)制;十進(jìn)制轉(zhuǎn)十六進(jìn)制的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02