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