本篇文章給大家帶來了關于redis的相關知識,其中主要整理了jedis基本使用的相關問題,包括了jedis基本操作、jedis連接池的使用等等內容,下面一起來看一下,希望對大家有幫助。
推薦學習:redis
1.Jedis的介紹
Jedis = Java + redis
Redis不僅可以使用命令來操作,現在基本上主流的語言都有API支持,比如Java、C#、C++、PHP、Node.js、Go等。在官方網站里列一些Java的客戶端,有Jedis、Redisson、Jredis、JDBC-Redis等其中官方推薦使用Jedis和Redisson。
使用Jedis操作redis需要導入jar包如下:
2.Jedis基本操作
? ? ? ? 2.1Jedis對象常用API
注:每個方法就是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() |
關閉連接 |
? ? ? ? 2.2Jedis的基本操作
操作步驟:
創建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(); } }
3.Jedis連接池的使用
? ? ? ? 3.1Jedis連接池的基本概念
jedis連接資源的創建與銷毀是很消耗程序性能,所以jedis為我們提供了jedis的連接池技術,jedis
連接池在創建時初始化一些連接對象存儲到連接池中,使用jedis連接資源時不需要自己創建jedis對
象,而是從連接池中獲取一個資源進行redis的操作。使用完畢后,不需要銷毀該jedis連接資源,
而是將該資源歸還給連接池,供其他請求使用。?
? ? ? ? 3.2Jedis連接池API
JedisPoolConfig配置類 |
功能說明 |
JedisPoolConfig() |
創建一個配置對象,使用無參構造方法就可以了 |
void setMaxTotal() |
設置連接池最大的連接數 |
void setMaxWaitMillis() |
設置得到連接對象Jedis最長等待時間 |
JedisPool連接池類 |
說明 |
JedisPool(配置對象,服務器名,端口號) |
創建連接池 參數1:上面的配置對象,參數2:服務器名,參數3:6379 |
Jedis getResource() |
從連接池中得到一個Jedis連接對象 |
void close() |
連接池關閉方法,通常不關閉連接池 |
? ? ? ? 3.3JedisPool的基本使用
需求:
使用連接池優化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(); } }
4.案例:編寫jedis連接池工具類
? ? ? ? 4.1相應API的學習
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")); } }
? ? ? ? 4.2連接池工具類的實現
需求:
實現連接池工具類,通過工具類得到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