Redis的安裝及在Java中的使用
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統(tǒng)。
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
Redis 優(yōu)勢
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
豐富的數(shù)據(jù)類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
Redis與其他key-value存儲有什么不同?
Redis有著更為復雜的數(shù)據(jù)結(jié)構(gòu)并且提供對他們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員透明,無需進行額外的抽象。
Redis運行在內(nèi)存中但是可以持久化到磁盤,所以在對不同數(shù)據(jù)集進行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點是,相比在磁盤上相同的復雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡單,這樣Redis可以做很多內(nèi)部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因為他們并不需要進行隨機訪問。
安裝Redis
Window 下安裝
下載地址:https://github.com/MicrosoftArchive/redis/releases。
Redis 支持 32 位和 64 位。這個需要根據(jù)你系統(tǒng)平臺的實際情況選擇,這里我們下載 Redis-x64-xxx.zip壓縮包到 C 盤,解壓后,將文件夾重新命名為 redis。
打開一個 cmd 窗口 使用 cd 命令切換目錄到 C:\redis 運行:
redis-server.exe redis.windows.conf
如果想方便的話,可以把 redis 的路徑加到系統(tǒng)的環(huán)境變量里,這樣就無需再輸路徑了,后面的那個 redis.windows.conf 可以省略,如果省略,會啟用默認的。
這時候另啟一個 cmd 窗口,原來的不要關閉,不然就無法訪問服務端了。
切換到 redis 目錄下運行:
redis-cli.exe -h 127.0.0.1 -p 6379
測試一下。設置鍵值對:
set myKey abc
取出鍵值對:
get myKey
Ubuntu下安裝
在 Ubuntu 系統(tǒng)安裝 Redis 可以使用以下命令:
$sudo apt-get update
$sudo apt-get install redis-server
啟動 Redis
$ redis-server
查看 redis 是否啟動?
$ redis-cli
以上命令將打開以下終端:
redis 127.0.0.1:6379>
127.0.0.1 是本機 IP ,6379 是 redis 服務端口。現(xiàn)在我們輸入 PING 命令。
redis 127.0.0.1:6379> ping
PONG
以上說明我們已經(jīng)成功安裝了redis。
在Java中使用Redis
在maven項目中添加以下依賴:
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
連接到 redis 服務
import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String[] args) {
//連接本地的 Redis 服務
Jedis jedis = new Jedis("localhost");
System.out.println("連接成功");
//查看服務是否運行
System.out.println("服務正在運行: "+jedis.ping());
}
}
編譯運行以上Java程序:
連接成功
服務正在運行: PONG
Redis Java String(字符串) 實例
//設置 redis 字符串數(shù)據(jù)
jedis.set("ccbkey", "www.ccb.com");
System.out.println("ccbkey存儲的字符串為: " + jedis.get("ccbkey"));
運行結(jié)果:
ccbkey存儲的字符串為: www.ccb.com
Redis Java List(列表) 實例
//存儲數(shù)據(jù)到列表中
jedis.lpush("site-list", "CCB");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
// 獲取存儲的數(shù)據(jù)并輸出
List<String> list = jedis.lrange("site-list", 0, 2);
for (int i = 0; i < list.size(); i++) {
System.out.println("列表項為: " + list.get(i));
}
運行結(jié)果:
列表項為: Taobao
列表項為: Google
列表項為: CCB
Redis Java Keys 實例
// 獲取所有鍵并輸出
Set<String> keys = jedis.keys("*");
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
System.out.println("鍵為"+key);
}
運行結(jié)果:
鍵為site-list
鍵為ccbkey