Jedis API 使用
Jedis 是 Redis 官方推薦的 Java 客戶端,它提供了一套豐富的 API 來操作 Redis 服務器。通過 Jedis API,開發者可以方便地在 Java 應用程序中執行 Redis 的命令來實現數據的增刪查改以及各種復雜的數據結構操作。
以下是一些基本的 Jedis API 示例和它們對應的功能:
常用操作
-
連接 Redis
Jedis jedis = new Jedis("localhost", 6379); // 創建一個與Redis實例的連接,默認端口是6379
-
字符串(String)操作
設置/獲取值:
jedis.set("key", "value"); // 設置鍵值對 String value = jedis.get("key"); // 獲取鍵對應的值
-
哈希表(Hash)操作
添加/獲取哈希表中的字段值:
jedis.hset("hashKey", "field", "value"); // 向哈希表添加字段 Map<String, String> map = jedis.hgetAll("hashKey"); // 獲取整個哈希表的內容
-
列表(List)操作
在列表頭部或尾部插入元素:
jedis.lpush("listKey", "item1"); // 在列表左側添加元素 List<String> list = jedis.lrange("listKey", 0, -1); // 獲取列表內所有元素
-
集合(Set)操作
添加/查詢集合成員:
jedis.sadd("setKey", "member1"); // 將元素添加到集合中 Set<String> members = jedis.smembers("setKey"); // 獲取集合中所有成員
-
有序集合(Sorted Set/ZSet)操作
添加帶分數的成員并排序:
jedis.zadd("zsetKey", 1.0, "member1"); // 根據分數添加成員 Set<String> sortedMembers = jedis.zrangeByScore("zsetKey", 0, Double.MAX_VALUE); // 根據分數范圍獲取成員
除此之外,Jedis 還提供了事務、發布訂閱、Lua 腳本、鍵空間通知等高級功能的API支持。為了確保資源的有效管理,使用完 Jedis 實例后需要調用?jedis.close()
?方法關閉連接。
隨著 Redis 版本更新和新特性的增加,Jedis API 也在不斷擴展和完善,以適應更多的應用場景。
具體測試步驟
1. 新建 maven 項目
配置 pom.xml ,添加 Jedis 依賴
<dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.3</version></dependency>
</dependencies>
2. 編寫測試類
測試是否能夠連通
先測試是否能連通本地redis (window )
/*** 訪問本機*/
public class Test {public static void main(String[] args) {//127.0.0.1 訪問的window 上的 redisJedis jedis = new Jedis("127.0.0.1",6379);jedis.auth("zhang");String name = jedis.get("name");System.out.println(name);}
}
注意: 如果 redis 配置了身份驗證,可以使用 jedis.auth("") 指定密碼即可。
3. 訪問配置
a. 測試linux 連通
/*** 1. 防火墻和端口* 2. 修改配置,允許其他站點訪問*/
public class TestLinuxRedis {public static void main(String[] args) {Jedis jedis = new Jedis("192.168.184.140",6379);String name = jedis.get("name");System.out.println(name);}
}
注意:默認情況下,連接會超時和失敗。
原因:
linux 防火墻或端口問題。可以通過關閉防火墻或開放端口解決
如果開放后,默認仍是無法訪問的,因為 redis 默認只允許本機訪問。需要修改配置文件 redis.conf
a) 方式一: 修改 bind 127.0.0.1 改為 bind 0.0.0.0
b) 方式二:注釋掉 bind 127.0.0.1 同時 修改保護模式為 : protected-mode no
b. 關閉防火墻
[root@localhost bin]# systemctl stop firewalld
c. 再測試,通過!
再次開啟防火墻,又不能通過,所以再單獨開放 6379 端口即可
[root@zhangpeng bin]# systemctl start firewalld
[root@zhangpeng bin]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@zhangpeng bin]# firewall-cmd --reload
開啟防火墻命令:
* firewall-cmd --zone=public --add-port=6379/tcp --permanent
* firewall-cmd --reload** # 配置立即生效
4. 問題總結
* 1. 出現 connect timed out 連接超時問題
* a. 檢查防火墻和端口是否開放
* b. redis 保護問題,查看配置文件 redis.conf 文件
* bind 127.0.0.1 -::1 注釋掉
* protected-mode no
* c. 重新啟動,先shutdown,再啟動
* 2. 注意:不能向從節點中寫數據的
* redis.clients.jedis.exceptions.JedisDataException:
* READONLY You can't write against a read only replica.