1. 程式人生 > >Redis的安裝及單機Redis測試

Redis的安裝及單機Redis測試

*1.什麼是redis*
Redis是用C語言開發的一個開源的高效能鍵值對(key-value)資料庫。它通過提供多種鍵值資料型別來適應不同場景下的儲存需求,目前為止Redis支援的鍵值資料型別如
下:
字串型別
雜湊型別
列表型別
集合型別
有序集合型別。

2.redis的應用場景
快取(資料查詢、短連線、新聞內容、商品內容等等)。(最多使用)
分散式叢集架構中的session分離。
聊天室的線上好友列表。
任務佇列。(秒殺、搶購、12306等等)
應用排行榜。
網站訪問統計。
資料過期處理(可以精確到毫秒)

3.Redis的安裝
redis是C語言開發,建議在linux上執行,本教程使用Centos6.4作為安裝環境。
安裝redis需要先將官網下載的原始碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++
版本說明
本教程使用redis3.0版本。3.0版本主要增加了redis叢集功能。

原始碼下載
從官網下載
http://download.redis.io/releases/redis-3.0.0.tar.gz
將redis-3.0.0.tar.gz拷貝到/usr/local下

解壓原始碼
tar -zxvf redis-3.0.0.tar.gz
進入解壓後的目錄進行編譯
cd /usr/local/redis-3.0.0
make
安裝到指定目錄,如 /usr/local/redis
cd /usr/local/redis-3.0.0
make PREFIX=/usr/local/redis install

redis.conf
redis.conf是redis的配置檔案,redis.conf在redis原始碼目錄。
注意修改port作為redis程序的埠,port預設6379。

拷貝配置檔案到安裝目錄下
進入原始碼目錄,裡面有一份配置檔案 redis.conf,然後將其拷貝到安裝路徑下
cd /usr/local/redis
mkdir conf
cp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin

安裝目錄bin下的檔案列表
這裡寫圖片描述
這裡寫圖片描述

redis3.0新增的redis-sentinel是redis叢集管理工具可實現高可用。

配置檔案目錄:
這裡寫圖片描述

4.redis啟動
4.1.前端模式啟動
直接執行bin/redis-server將以前端模式啟動,前端模式啟動的缺點是ssh命令視窗關閉則redis-server程式結束,不推薦使用此方法。如下圖:
這裡寫圖片描述

4.2.後端模式啟動
修改redis.conf配置檔案, daemonize yes 以後端模式啟動。

執行如下命令啟動redis:
cd /usr/local/redis
./bin/redis-server ./redis.conf

redis預設使用6379埠。
這裡寫圖片描述

也可更改redis.conf檔案,修改埠號:
這裡寫圖片描述

5.通過jedis連線redis單機

5.1.jar包
pom座標:

redis.clients
jedis
2.7.0

jar包如下:

這裡寫圖片描述
5.2.單例項連線
通過建立單例項jedis物件連線redis服務,如下程式碼:
// 單例項連線redis
@Test
public void testJedisSingle() {

    Jedis jedis = new Jedis("192.168.101.3", 6379);
    jedis.set("name", "bar");
    String name = jedis.get("name");
    System.out.println(name);
    jedis.close();

}

5.3 外部連線不上redis的解決方法
由於linux防火牆預設開啟,redis的服務埠6379並不在開放規則之內,所有需要將此埠開放訪問或者關閉防火牆。
關閉防火牆命令:sevice iptables stop
如果是修改防火牆規則,可以修改:/etc/sysconfig/iptables檔案

5.4 使用連線池連線
通過單例項連線redis不能對redis連線進行共享,可以使用連線池對redis連線進行共享,提高資源利用率,使用jedisPool連線redis服務,如下程式碼:

   @Test
    public void pool() {
        JedisPoolConfig config = new JedisPoolConfig();
        //最大連線數
        config.setMaxTotal(30);
        //最大連線空閒數
        config.setMaxIdle(2);

        JedisPool pool = new JedisPool(config, "192.168.101.3", 6379);
        Jedis jedis = null;

        try  {
            jedis = pool.getResource();

            jedis.set("name", "yxg");
            String name = jedis.get("name");
            System.out.println(name);
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if(jedis != null){
                //關閉連線
                jedis.close();
            }
        }

    }

詳細的連線池配置引數參考下節jedis和spring整合中applicationContext.xml的配置內容。

5.4.jedis與spring整合
配置spring配置檔案applicationContext.xml

<?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="true" />
        <!-- 在空閒時檢查有效性, 預設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.25.145"/>
        <constructor-arg name="port" value="6379"/>
    </bean>


測試程式碼:

private ApplicationContext applicationContext;

@Before 
public void init() {
    applicationContext = new ClassPathXmlApplicationContext(
            "classpath:applicationContext.xml");
}

@Test
public void testJedisPool() {
JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
        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();
        }
    }
}