推薦學習:
Jedis = Java + Redis
Redis不僅可以使用命令來操作,現在基本上主流的語言都有API支援,比如Java、C#、C++、PHP、Node.js、Go等。在官方網站裡列一些Java的使用者端,有Jedis、Redisson、Jredis、JDBC-Redis等其中官方推薦使用Jedis和Redisson。
使用Jedis操作redis需要匯入jar包如下:
注:每個方法就是redis中的命令名,方法的引數就是命令的引數
方法 | 功能 |
new Jedis(host, port) | 建立Jedis的連線,引數:主機名,埠號6379 |
set(key,value) | 新增一個字串的鍵和值 |
get(key) | 得到指定鍵的值 |
del(key) | 刪除指定鍵和值 |
hset(key,field,value) | 新增一個hash型別的鍵-欄位-值 |
hget(key,field) | 通過hash鍵-欄位得到它的值 |
lpush(key,values) | 從左邊新增一個list型別的鍵和元素 |
lpop(key) | 從左邊彈出一個元素 |
rpop(key) | 從右邊彈出一個元素 |
close() | 關閉連線 |
操作步驟:
建立Jedis物件,指定伺服器地址和埠號
向伺服器寫入
set字串型別的資料,person=張三
lpush新增list型別的資料,cities=珠海,深圳,廣州
從伺服器中讀取上面的資料列印輸出
get得到字串的值
lrange得到list所有的列表元素
關閉Jedis物件,釋放資源
通過使用者端檢視資料庫中是否有資料
控制檯輸出:
資料庫中
程式碼:
package com.itheima.jedis; import redis.clients.jedis.Jedis; import java.util.List; /** * 使用Jedis向redis中新增string和list,讀取它們的值 */ public class Demo1 { public static void main(String[] args) { //建立Jedis連線物件 Jedis jedis = new Jedis("localhost", 6379); //新增string型別 jedis.set("person", "張三"); //新增list型別 jedis.lpush("cities", "廣州","上海","東莞"); //讀取string型別 String person = jedis.get("person"); //讀取list型別 List<String> cities = jedis.lrange("cities", 0, -1); //輸出到控制器上 System.out.println("person:" + person); System.out.println("cities:" + cities); //關閉連線物件 jedis.close(); } }
jedis連線資源的建立與銷燬是很消耗程式效能,所以jedis為我們提供了jedis的連線池技術,jedis
連線池在建立時初始化一些連線物件儲存到連線池中,使用jedis連線資源時不需要自己建立jedis對
象,而是從連線池中獲取一個資源進行redis的操作。使用完畢後,不需要銷燬該jedis連線資源,
而是將該資源歸還給連線池,供其他請求使用。
JedisPoolConfig設定類 | 功能說明 |
JedisPoolConfig() | 建立一個設定物件,使用無參構造方法就可以了 |
void setMaxTotal() | 設定連線池最大的連線數 |
void setMaxWaitMillis() | 設定得到連線物件Jedis最長等待時間 |
JedisPool連線池類 | 說明 |
JedisPool(設定物件,伺服器名,埠號) | 建立連線池 引數1:上面的設定物件,引數2:伺服器名,引數3:6379 |
Jedis getResource() | 從連線池中得到一個Jedis連線物件 |
void close() | 連線池關閉方法,通常不關閉連線池 |
需求:
使用連線池優化jedis操作
開發步驟
建立連線池設定物件,設定最大連線數10,設定使用者最大等待時間2000毫秒
通過設定物件做為引數,建立連線池物件
從連線池裡面獲取jedis連線物件,執行redis命令。
執行redis命令sadd寫入set集合型別的資料:students=白骨精,孫悟空,豬八戒
執行redis命令smembers讀取集合中的資料
輸出讀取的資料
關閉連線物件(通常連線池不關閉)
執行效果
執行程式碼
package com.itheima.jedis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.util.Set; /** * 建立Jedis連線池 */ public class Demo2 { public static void main(String[] args) { //1) 建立連線池設定物件,設定最大連線數10,設定使用者最大等待時間2000毫秒 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(10); config.setMaxWaitMillis(2000); //2) 通過設定物件做為引數,建立連線池物件 JedisPool pool = new JedisPool(config, "localhost", 6379); //3) 從連線池裡面獲取jedis連線物件,執行redis命令。 Jedis jedis = pool.getResource(); //4) 執行redis命令sadd寫入set集合型別的資料:students=白骨精,孫悟空,豬八戒 jedis.sadd("students", "白骨精", "孫悟空", "豬八戒"); //5) 執行redis命令smembers讀取集合中的資料 Set<String> students = jedis.smembers("students"); //6) 輸出讀取的資料 System.out.println(students); //7) 關閉連線物件(通常連線池不關閉) jedis.close(); pool.close(); } }
java.util.ResourceBundle類是專門用於:讀取類路徑下Properties組態檔的類
java.util.ResourceBundle類 | 功能 |
static ResourceBundle getBundle("設定基名") | 通過自己的靜態方法建立ResourceBundle物件 引數:放在src下.properties檔案。引數中不用寫擴充套件名,只要有主名就可以了 |
String getString("鍵名") | 通過鍵得到值 |
案例:得到druid.properties中的url屬性
package com.itheima.jedis; import java.util.ResourceBundle; /** * 讀取屬性檔案 */ public class Demo3 { public static void main(String[] args) { //得到資源繫結物件 ResourceBundle bundle = ResourceBundle.getBundle("druid"); System.out.println(bundle.getString("url")); } }
需求:
實現連線池工具類,通過工具類得到Jedis連線物件,設定引數寫在屬性檔案中
呼叫工具類,對Redis資料庫進行操作
執行效果:
實現步驟:
在src目錄下建立連線池的工具類: jedis.properties
建立靜態成員變數JedisPool物件
在靜態程式碼塊中,讀取src下的組態檔,得到ResourceBundle物件
得到上面的四個引數,其中host是字串型別,其它引數要轉成整數型別
範例化設定物件,範例化連線池物件
編寫靜態方法getJedis()返回Jedis物件
建立hash物件:鍵employee,新增欄位名:name,值:NewBoy;欄位名: salary,值:3000
使用hgetall讀取hash物件輸出
關閉jedis物件
jedis.properties組態檔
# 主機名 host=localhost # 埠號 port=6379 # 最大連線數 maxTotal=20 # 最長等待時間 maxWaitMillis=3000
JedisUtils.java
package com.itheima.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.util.ResourceBundle; /** * 連線池工具類 */ public class JedisUtils { //建立一個連線物件 private static JedisPool pool; static { //建立連線池的設定物件 JedisPoolConfig config = new JedisPoolConfig(); //設定最大連線數和最長等待時間 ResourceBundle bundle = ResourceBundle.getBundle("jedis"); //得到組態檔中的屬性值 String host = bundle.getString("host"); int port = Integer.parseInt(bundle.getString("port")); int maxTotal = Integer.parseInt(bundle.getString("maxTotal")); int maxWaitMillis = Integer.parseInt(bundle.getString("maxWaitMillis")); //設定設定物件的引數 config.setMaxTotal(maxTotal); config.setMaxWaitMillis(maxWaitMillis); //建立連線池物件 pool = new JedisPool(config, host, port); } /** * 得到redis連線物件 * @return */ public static Jedis getJedis() { return pool.getResource(); } }
使用工具類:
package com.itheima.jedis; import com.itheima.utils.JedisUtils; import redis.clients.jedis.Jedis; import java.util.Map; /** * 使用工具類 */ public class Demo4 { public static void main(String[] args) { //從工具類中得到Jedis物件 Jedis jedis = JedisUtils.getJedis(); //建立hash物件:鍵employee,新增欄位名:name,值:NewBoy;欄位名: salary,值:3000 jedis.hset("employee", "name","NewBoy"); jedis.hset("employee", "salary","3000"); //使用hgetall讀取hash物件輸出 Map<String, String> employee = jedis.hgetAll("employee"); System.out.println(employee); //關閉jedis物件 jedis.close(); } }
推薦學習:
以上就是Redis學習之Jedis的基本使用的詳細內容,更多請關注TW511.COM其它相關文章!