1. 程式人生 > >Java中使用Jedis操作Redis—Redis快速入門

Java中使用Jedis操作Redis—Redis快速入門

     這裡先說Java中使用Jedis操作Redis,稍後會整理Redis快速入門來詳細介紹Redis(跟著專案走會更容易理解)。

Java連線Redis:

在Java程式中使用Redis之前,我們需要先確保在機器上安裝了Redis服務及Java Redis驅動程式,並且你的機器上能夠正常使用Java環境。

 1、Java的安裝配置參考-Java開發環境配置-(略)

 2、安裝Redis服務

 1)、下載Redis:

Redis 官網 :http://redis.io/

 下載頁面:http://redis.io/download

 官方文件:http://redis.io/documentation

 Windows_64位 版本下載:https://github.com/ServiceStack/redis-windows/tree/master/downloads

點選開啟連結

2)、配置Redis:

下載完成後,在C盤【Program Files】目錄下新建資料夾【Redis】,右鍵解壓redis ZIP包,把所有檔案解壓到Redis資料夾中。

 

檔案介紹:

redis-benchmark.exe #基準測試

redis-check-aof.exe # aof

redischeck-dump.exe # dump

redis-cli.exe # 客戶端

redis-server.exe # 伺服器

redis.windows.conf # 配置檔案

 3)、啟動Redis:

 進入cmd作業系統視窗

 使用【redis-server.exe redis.windows.conf

】啟動redis服務。

 服務啟動成功狀態

 

啟動redis服務的doc視窗,不用關閉,因為服務需要一直執行,關閉服務,直接關閉視窗就行。

 4)、測試Redis:

 新開啟一個doc視窗,用自帶的客戶端工具進行測試命令【redis-cli.exe】,啟動redis客戶端,如下

 

3、下載Java redis驅動包(jedis.jar),確保下載最新驅動包,專案中引入jar包

 1)、首先在專案下建立一個資料夾,儲存我們的jar包

 在專案名上右擊,依次點選【new】-->【folder】,開啟新建資料夾視窗。

 2)、輸入資料夾名稱【lib】,點選【ok】,我們通常在lib資料夾中存放從外部引入的jar包。

 3)、找到我們要引入的jar包,拖進lib資料夾中或者複製,開啟選擇框,我們選擇預設的【copy fiels】,點選【OK】關閉。

 4)、此時,專案中看到的jar包只是複製到專案下,還不能使用

 再在專案名稱上右擊,依次選擇【Build Path】-->【Configure Build Path...】。

 5)、在開啟的視窗中,先選擇【Libraries】頁,再從右邊的按鈕中點選【Add JARs...】

 6)、在開啟的視窗中,我們依次展開本專案的lib資料夾,然後選擇我們剛才複製到專案中的jar包,然後點選【OK】關閉視窗。

 7)、此時,我們在剛才開啟的【Libraries】頁可以看到我們引入的jar包的名稱,點選【OK】確認關閉視窗。

 8)、現在,我們就可以在專案中使用這個jar包了。

Java連線到Redis伺服器:

參考以下示例程式碼:

 package redis;

 import redis.clients.jedis.Jedis;

 public class RedisTest {

   public static void main(String[] args) {

   Jedis jedis = new Jedis("localhost");

   System.out.println("Connection to server sucessfully");

   System.out.println("Server is running:"+jedis.ping());

   }

 }

現在,編譯並執行上面的程式來測試與Redis伺服器的連線,可以根據需要更改路徑,假設jedis.jar的當前版本在當前路徑中可以使用。執行上面程式碼,將生成以下結果:

$javac RedisTest.java

 $java RedisTest

 Connection to server sucessfully

 Server is running:PONG

各個功能函式示例

Redis Java字串示例

package redis;

 import redis.clients.jedis.Jedis;

 public class RedisStringTest {

    public static void main(String[] args) {

      //Connecting to Redis server on localhost

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server sucessfully");

      //set the data in redis string

      jedis.set("tutorial-name", "Redis tutorial");

      //get the stored data and print it

      System.out.println("Stored string in redis: "+jedis.get("tutorial-name"));

    }
 }

 執行上面程式,將生成以下結果:

 $javacRedisStringTest.java

 $javaRedisStringTest

 Connection to server sucessfully

 Stored string in redis: Redis tutorial

Redis Java列表示例

package redis;

 import java.util.List;

 import redis.clients.jedis.Jedis;

 public class RedisListTest {

    public static void main(String[] args) {

      //Connection to Redis server on localhost

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server sucessfully");

      //store data in redis list

      jedis.lpush("tutorial-list", "Redis");

      jedis.lpush("tutorial-list", "Mongodb");

      jedis.lpush("tutorial-list", "Mysql");

      //get the stored data and print it

      List<String> list = jedis.lrange("tutorial-list", 0, 5);

      for(int i=0;i<list.size();i++){

       System.out.println("List of storedin redis: "+list.get(i));

      }

    }

 }

 執行上面程式碼,將生成以下結果:

$javac RedisListTest.java

 $java RedisListTest

 Connection to server sucessfully

 List of stored in redis: Mysql

 List of stored in redis: Mongodb

 List of stored in redis: Redis

Redis Java鍵示例

package redis;

 import java.util.Iterator;

 import java.util.Set;

 import redis.clients.jedis.Jedis;

 public class RedisKeyTest {

    public static void main(String[] args) {

      //Connection to Redis server on localhost

      Jedis jedis = new Jedis("localhost");

      System.out.println("Connection to server successfully");

      //清空資料

      System.out.println("清空庫中所有資料:"+jedis.flushDB());

      //判斷key是否存在

      System.out.println("判斷key999鍵是否存在:"+jedis.exists("key999"));

      System.out.println("新增key001,value001鍵值對:"+jedis.set("key001", "value001"));

      System.out.println("判斷key001是否存在:"+jedis.exists("key001"));

      System.out.println("新增key002,value002鍵值對:"+jedis.set("key002", "value002"));

      //輸出系統中所有的key

      Set<String> keys = jedis.keys("*");

      Iterator<String> it = keys.iterator();

      while(it.hasNext()){

       String key = it.next();

       System.out.println("keys: "+key);

      }

      //刪除某個key,若key不存在,則忽略該命令。

      System.out.println("系統中刪除key002: " +jedis.del("key002"));

      System.out.println("判斷key002是否存在:"+jedis.exists("key002"));

    }

 }

 執行上面程式,將生成下面結果:

 Connection to server successfully

 清空庫中所有資料:OK

 判斷key999鍵是否存在:false

 新增key001,value001鍵值對:OK

 判斷key001是否存在:true

 新增key002,value002鍵值對:OK

 keys: key002

 keys: key001

 系統中刪除key002: 1

 判斷key002是否存在:false

Redis快速入門

Redis是一個開源、高階的鍵值儲存和一個適用的解決方案,用於構建高效能,可擴充套件的Web應用程式。

 Redis有三個主要特點,使它優越於其他鍵值資料儲存系統:

 1、Redis將其資料庫完全儲存在記憶體中,僅使用磁碟進行持久化。

 2、與其他鍵值資料儲存相比,Redis有一組相對豐富的資料型別。

 3、Redis可以將資料複製到任意數量的從機中。

Redis優點:

1、異常快-Redis非常快,每秒可執行大約110000次的設定(set)操作,每秒大約可執行81000次的讀取/獲取(get)操作。

 2、支援豐富的資料型別-Redis支援開發人員常用的大多數資料型別,例如列表、集合、排序集、雜湊等。這使得Redis很容易被用來解決各種問題,因為我們知道哪些問題可以更好地使用哪些資料型別來處理解決。

 3、操作具有原子性-所有的Redis操作都是原子操作,這確保如果兩個客戶端併發訪問,Redis伺服器能接收更新的值。

 4、多實用工具-Redis是一個多實用工具,可用於多種用例,如:快取,訊息佇列,應用程式中任何短期資料,例如web應用程式中的會話,網頁命中計數等。

Redis與其他鍵值儲存系統:

1、Redis是鍵值資料庫系統的不同進化路線,它的值可以包含更復雜的資料型別,可在這些資料型別上定義原子操作。

 2、Redis是一個記憶體資料庫,但在磁碟資料庫上是持久的,因此它代表了一個不同的權衡,在這種情況下,在不能大於儲存器(記憶體)的資料集的限制下實現非常高的寫和讀速度。

 3、記憶體資料庫的另一個優點,它與磁碟上的相同資料結構相比,複雜資料結構在記憶體中儲存表示更容易操作,因此,Redis可以做很少的內部複雜性。

Redis環境安裝與配置

Server端安裝

1、下載

 Windows_64位 版本下載:https://github.com/ServiceStack/redis-windows/tree/master/downloads

 2、安裝

 1)、下載後,在C盤【Program Files】目錄下新建資料夾【Redis】,右鍵解壓redis ZIP包,把所有檔案解壓到Redis資料夾中。

 幾個exe程式的功能:

 redis-benchmark.exe效能測試,用以模擬同時由N個客戶端傳送M個 SETs/GETs 查詢 (類似於 Apache 的ab 工具)

redis-check-aof.exe:更新日誌檢查

 redis-check-dump.exe本地資料庫檢查

 redis-cli.exe客戶端

 redis-server.exe服務端

 2)、將路徑新增至系統環境變數

 3)、cmd下啟動redis-server

 注:由於此處未指定配置檔案,系統採用預設引數

 3、下載對應的配置檔案

 由上面cmd輸出可知當前版本,原頁面上開啟所有釋出版本,找到對應版本。

 下載zip檔案,拷貝出redis.conf配置檔案至安裝目錄。

 注:如果配置檔案的版本和當前exe程式的版本不匹配,很容易由於引數不一致導致server端無法啟動。

 4、通過指定的配置檔案啟動服務

 5、客戶端訪問測試

 另啟動一個cmd視窗。

Redis配置

在Redis中,Redis的根目錄,有一個配置檔案(redis.conf)。當然我們可以通過Redis CONFIG命令獲取和設定所有的Redis配置。

 語法:

 以下是Redis中的CONFIG命令的基本語法

 redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

 示例:

 redis 127.0.0.1:6379> CONFIG GET loglevel

 1) "loglevel"

 2) "notice"

 要獲取所有配置設定,請使用*代替CONFIG_SETTING_NAME

 示例:

 redis 127.0.0.1:6379> CONFIG GET *

 1) "dbfilename"

 2) "dump.rdb"

 3) "requirepass"

 4) ""

 5) "masterauth"

 ......

 編輯配置:

要更新配置,可以直接編輯redis.conf檔案,也可以通過CONFIG set命令更新配置。

 語法:

以下是CONFIG SET命令的基本語法。

 redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

 示例:

redis 127.0.0.1:6379> CONFIG SET loglevel "notice" 

 OK 

 redis 127.0.0.1:6379> CONFIG GET loglevel  

 1) "loglevel" 

 2) "notice"

Redis資料型別

Redis支援5中資料型別。

1、字串

Redis的字串是一個位元組序列。Redis的字串是二進位制安全的,這意味著它們的長度不由任何特殊的終止字元決定。因此,可以在一個字串中儲存高達512兆位元組的任何內容。

 示例:

 redis 127.0.0.1:6379> set name "zifuchuan.com" 

 OK 

 redis 127.0.0.1:6379> get name 

 "zifuchuan.com"

 注:set和get是Redis命令,name是Redis中使用的鍵,zifuchuan.com是儲存在redis中的字串的值。Redis命令不區分大小寫,如set/SET/Set都是同一個命令。字串值的最大長度為512MB。

2、雜湊/雜湊

Redis雜湊/雜湊(Hashes)是鍵值對的集合。是字串欄位和字串值之間的對映。因此它們用於表示物件。

 示例:

 redis 127.0.0.1:6379> HMSET ukey username "gaosure" password "gaosure123" points 200

 redis 127.0.0.1:6379> HMGET ukey username

 1) "gaosure"

 注:雜湊/雜湊資料型別用於儲存包含使用者的基本資訊的使用者物件。這裡的HMSET是Redis命令,ukey是鍵的名稱。

3、列表

Redis列表只是字串列表,按插入順序排序。可以向Redis列表的頭部或尾部新增元素。

 示例:

 redis 127.0.0.1:6379> lpush alist redis 

 (integer) 1 

 redis 127.0.0.1:6379> lpush alist mongodb 

 (integer) 2 

 redis 127.0.0.1:6379> lpush alist sqlite 

 (integer) 3 

 redis 127.0.0.1:6379> lrange alist 0 10  

 1) "sqlite" 

 2) "mongodb" 

 3) "redis"

 注:列表的最大長度為2^32 - 1個元素(4294967295,每個列表可容納超過40億個元素)。

4、集合

Redis集合是字串的無序集合。在Redis中,您可以新增,刪除和測試成員存在的時間O(1)複雜性。

 示例:

 redis 127.0.0.1:6379> sadd yiibailist redis 

 (integer) 1 

 redis 127.0.0.1:6379> sadd yiibailist mongodb 

 (integer) 1 

 redis 127.0.0.1:6379> sadd yiibailist sqlite 

 (integer) 1 

 redis 127.0.0.1:6379> sadd yiibailist sqlite 

 (integer) 0 

 redis 127.0.0.1:6379> smembers yiibailist  

 1) "mongodb

 2) "redis

 3) "sqlite"

注:在上面的示例中,sqlite被添加了兩次,但是由於集合的唯一屬性,所以它只算新增一次。一個集合中的最大成員數量為2^32 - 1(即4294967295,每個集合中元素數量可達40億個)個。

5、可排序集合

Redis可排序集合類似於Redis集合,是不重複的字元集合。 不同之處在於,排序集合的每個成員都與分數相關聯,這個分數用於按最小分數到最大分數來排序的排序集合。雖然成員是唯一的,但分數值可以重複。

 示例:

 redis 127.0.0.1:6379> zadd yiibaiset 0 redis

 (integer) 1 

 redis 127.0.0.1:6379> zadd yiibaiset 0 mongodb

 (integer) 1 

 redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite

 (integer) 1 

 redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite

 (integer) 0 

 redis 127.0.0.1:6379> ZRANGEBYSCORE yiibaiset 0 1000  

 1) "mongodb" 

 2) "redis" 

 3) "sqlite"

 注:因為 ‘sqlite‘ 的排序值是 1 ,其它兩個元素的排序值是 0 ,所以 ‘sqlite‘ 排在最後一個位置上。

Redis命令

Redis命令是用於Redis伺服器上執行一些操作。

 要在Redis伺服器上執行命令,需要一個Redis客戶端。Redis客戶端在Redis包中有提供,這個包在前面安裝過程就有安裝。

 Redis客戶端基本語法:redis-cli

 要啟動Redis客戶端,請開啟終端並鍵入命令redis-cli。這樣講連線到本地的Redis伺服器,現在可以執行任何的Redis命令了。

 連線到在本地機器上執行的Redis伺服器並執行PING命令,該命令檢查伺服器是否正在執行

在遠端伺服器上執行命令

 要在遠端伺服器上執行命令,需要通過客戶端redis-cli連線到伺服器

 語法:

 redis-cli -h host -p port -a password

 示例:

 以下示例顯示如何連線到Redis遠端伺服器,在主機(host)127.0.0.1,埠(port)6379上執行,並使用密碼為 mypass。

 redis-cli -h 127.0.0.1 -p 6379 -a "mypass" 

 redis 127.0.0.1:6379> 

 redis 127.0.0.1:6379> PING  

 PONG

 

 已在主機(host)上:

 

Redis鍵命令

Redis的鍵命令用於管理Redis中的鍵。以下是使用鍵命令的語法。

 語法:

 redis 127.0.0.1:6379> COMMAND KEY_NAME

 示例:

 redis 127.0.0.1:6379> SET akey redis

 OK 

 redis 127.0.0.1:6379> DEL akey

 (integer) 1

 127.0.0.1:6379> GET akey

 (nil)

 注:在上面的例子中,DEL是Redis的刪除命令,而akey是鍵的名稱。如果鍵被刪除,則命令的輸出將為(integer) 1,否則為(integer) 0。

 下表列出了與鍵相關的一些基本命令。

編號 命令 描述
1 DEL key 此命令刪除一個指定鍵(如果存在)。
2 DUMP key
此命令返回儲存在指定鍵的值的序列化版本。
3 EXISTS key
此命令檢查鍵是否存在。
4 EXPIRE key seconds
設定鍵在指定時間秒數之後到期/過期。
5 EXPIREAT key timestamp
設定在指定時間戳之後鍵到期/過期。這裡的時間是Unix時間戳格式。
6 PEXPIRE key milliseconds
設定鍵的到期時間(以毫秒為單位)。
7 PEXPIREAT key milliseconds-timestamp
以Unix時間戳形式來設定鍵的到期時間(以毫秒為單位)。
8 KEYS pattern
查詢與指定模式匹配的所有鍵。
9 MOVE key db
將鍵移動到另一個數據庫。
10 PERSIST key
刪除指定鍵的過期時間,得永生。
11 PTTL key
獲取鍵的剩餘到期時間。
12 RANDOMKEY
從Redis返回一個隨機的鍵。
13 RENAME key newkey
更改鍵的名稱。
14 PTTL key
獲取鍵到期的剩餘時間(以毫秒為單位)。
15 RENAMENX key newkey 如果新鍵不存在,重新命名鍵。
16 TYPE key 返回儲存在鍵中的值的資料型別。

 Redis字串命令

Redis字串命令用於管理Redis中的字串值。以下是使用Redis字串命令的語法。

 redis 127.0.0.1:6379> COMMAND KEY_NAME

 示例:

redis 127.0.0.1:6379> SET mykey "redis" 

 OK 

 redis 127.0.0.1:6379> GET mykey 

 "redis"

 在上面的例子中,SET和GET是redis中的命令,而mykey是鍵的名稱。

下表列出了一些用於在Redis中管理字串的基本命令。

編號 命令 描述說明
1 SET key value
此命令設定指定鍵的值。
2 GET key
獲取指定鍵的值。
3 GETRANGE key start end
獲取儲存在鍵上的字串的子字串。
4 GETSET key value
設定鍵的字串值並返回其舊值。
5 GETBIT key offset
返回在鍵處儲存的字串值中偏移處的位值。
6 MGET key1 [key2..]
獲取所有給定鍵的值。
7 SETBIT key offset value
儲存在鍵上的字串值中設定或清除偏移處的位。
8 SETEX key seconds value
使用鍵和到期時間來設定值。
9 SETNX key value
設定鍵的值,僅當鍵不存在時。
10 SETRANGE key offset value
在指定偏移處開始的鍵處覆蓋字串的一部分。
11 STRLEN key
獲取儲存在鍵中的值的長度。
12 MSET key value [key value …]
為多個鍵分別設定它們的值。
13 MSETNX key value [key value …]
為多個鍵分別設定它們的值,僅當鍵不存在時。
14 PSETEX key milliseconds value
設定鍵的值和到期時間(以毫秒為單位)。
15 INCR key
將鍵的整數值增加1。
16 INCRBY key increment
將鍵的整數值按給定的數值增加。
17 INCRBYFLOAT key increment
將鍵的浮點值按給定的數值增加。
18 DECR key
將鍵的整數值減1。
19 DECRBY key decrement
按給定數值減少鍵的整數值。
20 APPEND key value
將指定值附加到鍵。

 Redis連線命令

下表列出了與Redis連線相關的一些基本命令。

序號 命令 說明