redis系列文章:
redis系列(一)- 安裝與啓動
redis系列(二)- 語法與命令php
Redis是NoSql的一種,在弄清楚Redis是個什麼玩意以前,先了解下NoSql是什麼。前端
NoSql,全名:Not Only Sql,是一種非關係型數據庫,它不能替代關係弄數據庫,只是關係型數據庫的一個補充,是能夠解決高併發、高可用、高擴展、大數據存儲等一系列問題而產生的數據庫解決方案。java
NoSql有如下4種分類:鍵值(Key-Value)存儲數據庫、列存儲數據庫、文檔型數據庫、圖形(Graph)數據庫。而Redis屬於第一種:鍵值(Key-Value)存儲數據庫。linux
Redis是使用c語言開發的一個高性能鍵值數據庫,即經過一些鍵值類型來存儲數據。Redis支持的鍵值類型有:String字符類型、map散列類型、list列表類型、set集合類型、sortedset有序集合類型。c++
redis的應用場景以下:緩存(數據查詢、短鏈接、新聞內容、商品內容等等)、分佈式集羣架構中的session分離、聊天室的在線好友列表、任務隊列。(秒殺、搶購、12306等等)、應用排行榜、網站訪問統計、數據過時處理(能夠精確到毫秒)。其中,做爲緩存的應用場景是最多的。git
通常redis安裝於linux服務器,故本例介紹的是Linux下的安裝,若是你的電腦是window或mac,請自行百度安裝方法。github
本例使用的Linux系統是CentOS6.7,諸如Ubuntu等Linux操做系統的操做命令或許存在個別差別,請自行學習瞭解。redis
能夠到redis的官網找到各個Redis版本的下載地址,如:download.redis.io/releases/re…spring
使用Xshell等服務器終端鏈接軟件鏈接上Linux後,進行如下操做:sql
下載redis:
wget http://download.redis.io/releases/redis-3.0.0.tar.gz複製代碼
使用ll命令查看當前目錄下全部文件
能夠看到redis-3.0.0.tar.gz就是剛剛下載的redis壓縮包,如今對其解壓:
tar -zxvf redis-3.0.0.tar.gz複製代碼
再使用ll命令查看當前目錄下全部文件
進入redis源碼:
cd redis-3.0.0複製代碼
經過ll命令能夠看到Redis源碼目錄下的全部文件,接下來就須要對源碼進行編譯了:
make複製代碼
使用make命令編譯Redis須要c語言環境,CentOS自帶c語言環境,如果使用其餘Linux系統中沒有c語言環境,則須要安裝,如yum安裝: yum install gcc-c++
編譯事後,就是安裝了,安裝Redis的命令以下:
make install PREFIX=/usr/local/redis複製代碼
該命令中,前面的"make install PREFIX="是固定的,而"/usr/local/redis"是Redis的安裝目錄,通常就這麼寫,如若須要安裝在其餘地方,只需將此路徑更換便可。
最後,查看Redis是否安裝成功:
cd /usr/local/redis/複製代碼
使用ll命令,能夠看到bin文件夾,說明Redis已經安裝成功。
Redis有兩種啓動,分別是:前端啓動、後端啓動。要啓動Redis,就須要到Redis的bin目錄下執行啓動命令,先看看bin目錄結構:
[root@localhost bin]# ./redis-server複製代碼
能夠看到Redis的啓動端口爲6379(默認),進程id是5979,同時,前端啓動Redis後,終端將進入Redis控制檯,沒辦法繼續別的Linux命令,即這個終端窗口就"廢了",只能輸入Redis本身的命令。
強制關閉:Ctrl+c
正常關閉:[root@localhost bin]# ./redis-cli shutdown複製代碼
下面對這兩個命令進行對比:
須要注意一點,一旦前端啓動的關閉命令執行,則redis控制檯關閉,redis服務也會停掉。
後端啓動是咱們開發中絕對會用到的方式,但在使用後端啓動命令以後,須要作以下幾步配置:
[root@localhost bin]# vim redis.conf 複製代碼
Linux的vim編輯器指令請自行學習,這裏就說vim中幾個最經常使用的指令:
i:進入編輯模式。
esc:退出編輯模式,進入瀏覽模式(進入vim編輯器,默認就是瀏覽模式)。
:wq:保存修改並退出vim編輯器。
通過上面幾步配置後,之後就無需再配置,下面就能夠經過命令讓redis後臺啓動了。
[root@localhost bin]# ./redis-server redis.conf複製代碼
能夠發現後端啓動命令就只是比前端啓動命令多了" redis.conf",意思很明確,就是讓redis根據這個配置文件的配置運行罷了,同時也能夠看到,在啓動完redis後臺,終端不會進入redis控制檯,這就是將redis運行後臺了,咱們能夠查查看系統如今是否是有redis的進程:
[root@localhost bin]# ps -aux | grep redis複製代碼
能夠看到redis是運行着的,端口是6379,進程id是6087。
強制關閉:[root@localhost bin]# kill -9 進程id
正常關閉:[root@localhost bin]# ./redis-cli shutdown複製代碼
由於後端啓動redis,沒辦法像前端啓動redis那樣直接ctrl+c強制關閉redis,若是須要強制關閉,那隻能經過殺死進程的方式中止redis。而正常關閉redis的命令與前端關閉同樣,這裏就很少說廢話。
項目中,建議使用正常關閉。由於redis做爲緩存來使用的話,將數據存儲到內存中,若是使用正常關閉,則會將內存數據持久化到本地以後,再關閉。若是強制關閉,則不會進行持久化操做,可能會形成部分數據丟失。
在前面介紹redis安裝目錄下bin目錄的結構時,就已經標記出了redis的客戶端,它就是redis-cli。這個客戶端有兩個經常使用的功能:
啓動客戶端命令:
[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379複製代碼
若是使用的ip地址與端口都是默認的,則上述命令能夠這麼寫:
[root@localhost bin]# ./redis-cli複製代碼
使用默認配置:默認的ip【127.0.0.1】,默認的port【6379】
ctrl+c
127.0.0.1:6379> quit複製代碼
要關閉該客戶端,使用上述兩個命令中任意一個都可,都不會影響redis數據的保存。
有一個redis的圖形界面客戶端軟件,名爲redis-destop-manager。這是該軟件的下載頁面,支持Windows、Mac OS X、Linux,請根據本身的電腦系統選擇下載,這裏以windows爲例,簡單說下這軟件的使用,安裝很簡單,一路下一步便可,安裝後打開該應用。
redis不只可使用命令來操做,目前基本上主流的語言都有客戶端支持,好比:java、C、C#、C++、php、Node.js、Go等。
在官方網站裏有一些Java的客戶端,如:Jedis、Redisson、Jredis、JDBC-Redis等,其中官方推薦使用Jedis和Redisson。 在企業中用的最多的就是Jedis。
Jedis託管在github上,點擊打開。
@Test
public void jedisClient() {
// 建立Jedis
Jedis jedis = new Jedis("192.168.128.128", 6379);
// 經過Jedis賦值
jedis.set("s2", "222");
// 經過Jedis取值
String s2 = jedis.get("s2");
System.out.println(s2);
// 關閉Jedis
jedis.close();
}複製代碼
@Test
public void jedisPool() {
// JedisPool
JedisPool jedisPool = new JedisPool("192.168.128.128", 6379);
// 經過鏈接池獲取jedis對象
Jedis jedis = jedisPool.getResource();
String s2 = jedis.get("s2");
System.out.println(s2);
// 關閉jedis客戶端
jedis.close();
// 關閉鏈接池
jedisPool.close();
}複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 鏈接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大鏈接數 -->
<property name="maxTotal" value="30" />
<!-- 最大空閒鏈接數 -->
<property name="maxIdle" value="10" />
<!-- 每次釋放鏈接的最大數目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 釋放鏈接的掃描間隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 鏈接最小空閒時間 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 鏈接空閒多久後釋放, 當空閒時間>該值 且 空閒鏈接>最大空閒鏈接數 時直接釋放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 獲取鏈接時的最大等待毫秒數,小於零:阻塞不肯定的時間,默認-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在獲取鏈接的時候檢查有效性, 默認false -->
<property name="testOnBorrow" value="false" />
<!-- 在空閒時檢查有效性, 默認false -->
<property name="testWhileIdle" value="true" />
<!-- 鏈接耗盡時是否阻塞, false報異常,ture阻塞直到超時, 默認true -->
<property name="blockWhenExhausted" value="false" />
</bean>
<!-- redis單機 經過鏈接池 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool"
destroy-method="close">
<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
<constructor-arg name="host" value="192.168.128.128" />
<constructor-arg name="port" value="6379" />
</bean>
</beans>複製代碼
@Test
public void testJedisPool() {
JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
Jedis jedis = null;
try {
jedis = pool.getResource();
jedis.set("name", "lisi");
String name = jedis.get("name");
System.out.println(name);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (jedis != null) {
// 關閉鏈接
jedis.close();
}
}
}複製代碼
redis默認建立16個數據庫,若是須要修改數量庫的建立數量,能夠修改redis.conf配置文件中databases的值爲改變。
redis默認使用下標爲0的數據庫,如若須要切換數據庫,能夠在redis控制檯中,使用"select 下標號"選擇數據庫。
127.0.0.1:6379> select 15複製代碼
若是你用Xshell之類的終端軟件沒法鏈接服務器,請查看Linux系統是否開放22端口,可經過修改iptable攔截規則開放22端口,如果使用阿里雲服務器,則須要修改安全組規則,具體步驟網上一堆,請本身搜索學習修改。