1. 程式人生 > >Redis的簡單配置與使用

Redis的簡單配置與使用

一、認識Redis

1、NoSQL概述
認識Redis之前應該先了解下NoSQL

(1)NoSQL=Not only SQL(是讀“N”“o”SQL,而不是”NO”SQL),是一種非關係型資料庫。

(2)為什麼需要用到NoSQL?

  • High Performance:高併發讀寫
  • High Storage: 高效率的資料儲存與訪問
  • High Scalability && High Availability :高擴充套件性與高可用性

(3)NoSQL的產品:CouchDB、HBaseRedismongoDB……

(4)NoSQL資料庫的四大分類:

  • 鍵值儲存:典型的為Redis,但是資料缺少結構化
  • 列儲存:HBase、Riak等
  • 文件資料庫:mongoDB,查詢效率低
  • 圖形資料庫:InfoGrid、Neo4j,是圖結構

2、Redis概述

(1)Redis是由C語言開發的開源高效能的鍵值對資料庫,提供了很多的資料型別(字串、列表、雜湊、有序集合、集合型別)。

(2)應用場景

  • 資料快取
  • 任務佇列(秒殺、搶購等現實應用)
  • 資料過期處理
  • 網站訪問統計
  • 分散式cluster叢集架構中session分離

二、Redis安裝與配置

1、準備工作

  • 搭建環境:VMWare虛擬機器+CentOS的Linux系統(建議Redis搭建在Linux伺服器中)
  • SSH客戶端:Secure CRT
  • 上傳伺服器檔案客戶端:FileZilla
  • CentOS需要gcc環境:編譯Redis C語言的原始檔的環境

2、安裝過程

這是需要已經安裝好了虛擬機器,並且能成功裝上能夠CentOS,能夠與本機Windos分享網路,即CentOS能聯網。但是這裡介紹的是斷網下的Redis安裝。

(1)下載redis壓縮包官網Download Redis:redis-xxx.tar.gz
選擇穩定Stable版本
這裡寫圖片描述

(2)CentOS配置Redis

1、首先檢視CentOS伺服器主機的IP地址,用來連線伺服器。輸入命令:ip add

這裡寫圖片描述
得到IP地址192.168.42.128
接下來登入伺服器傳檔案。利用FileZilla上傳Redis壓縮包到root目錄下:開啟FileZilla

這裡寫圖片描述

這裡寫圖片描述

2、 連線伺服器192.168.42.128,輸入Linux伺服器登入帳號與密碼

這裡寫圖片描述
登入之後輸入解壓tar壓縮包命令

tar zxvf redis-4.0.2.tar.gz

之後可以在root目錄下檢視解壓後的檔案redis-4.0.2
這裡寫圖片描述
輸入命令進入redis-4.0.2目錄下並編譯make

cd redis-4.0.2/
make

之後繼續在該目錄下輸入命令安裝,將安裝的檔案放到目錄/usr/local/redis下

make install PREFIX=/usr/local/redis

3、修改redis.conf配置檔案:進入目錄/usr/local/redis/bin

cd /usr/local/redis/bin

然後修改redis.conf檔案,先將redis.conf配置檔案copy到目錄/usr/local/redis下

cd redis-4.0.2/
cp redis.conf /usr/local/redis

之後進入/usr/local/redis目錄下修改conf

cd /usr/local/redis
vi redis.conf

進入vim 修改redis.conf中的引數,daemonize引數為yes –>按Esc->冒號:wq–>儲存退出
這裡寫圖片描述

4、啟動redis伺服器
進入bin目錄

cd /usr/local/redis/bin  

載入配置檔案啟動redis伺服器

./redis-server  redis.conf

之後檢視redis是否啟動成功

ps aux|grep redis  

出現如下的資訊就說明redis啟動成功了
這裡寫圖片描述
其中4281是我的redis伺服器程序號,6379是預設的埠號

5、啟動redis客戶端,測試redis

進入bin目錄

cd /usr/local/redis/bin  

啟動客戶端

./redis-cli  

就會出現127.0.0.1:6379,之後測試redis功能:

這裡寫圖片描述

三、Jedis:Java環境下連線Redis

1、下載兩個jar包:我用的Eclipse+Maven
關於具體的Maven如何導包可以參考Maven下匯入jar包的幾種方式
這裡寫圖片描述

2、編寫程式碼

(1)單例項的測試

public class JedisDemo {

    /**
     * 第一種簡單的方式: 單例項的測試
     * @author Lijian
     */
    @Test
    public void test1(){

        //1、設定IP地址與埠
        Jedis jedis = new Jedis("192.168.42.128",6379);
        //2、儲存資料
        jedis.set("name","Lijian");
        //3、獲取資料
        System.out.println( jedis.get("name")); 
        //4、關閉資源
        jedis.close();

    }


}

最後測試的結果會出錯,顯示如下所示:連線超時
這裡寫圖片描述
這是因為Linux伺服器未對埠6379開放,要進行下面的配置iptables防火牆命令才可以。

vim /etc/sysconfig/iptables

但是Centos6與7都沒有iptables。如下圖
這裡寫圖片描述

vim /etc/sysconfig/iptables

在插入狀態下移動到埠為22(22埠已經開放)的行,然後按yy進行復制,p為貼上,修改22為6379,或者複製下列語句

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

這裡寫圖片描述

之後重啟iptables.service,設定為開機啟動

systemctl restart iptables.service #重啟防火牆使配置生效

systemctl enable iptables.service #設定防火牆開機啟動

但是最後測試單例項時,仍然出現如下如何的錯誤

DENIED Redis is running in protected mode because protected mode is enabled........

這是因為redis.conf配置中的protect-mode保護模式為yes,我們可以關掉保護模式為no
進入redis客戶端的目錄

/usr/local/redis/bin/redis-cli 

開啟客戶端redis-cli

config set protected-mode "no"

這裡寫圖片描述

最後執行成功

這裡寫程式碼片

(2)測試連線池連線方式

    @Test
    public void test2(){
        //1、獲得連線池的配置物件
        JedisPoolConfig config = new JedisPoolConfig();
        //2、設定最大連線數:
        config.setMaxTotal(100);
        //3、設定最大空閒連線數
        config.setMaxIdle(100);
        //4、獲得連線池
        JedisPool jedisPool = new JedisPool(config, "192.168.42.128",6379);
        //5、獲得核心物件
        Jedis jedis =null;
        try{
        //6、通過連線池獲得連線
            jedis=jedisPool.getResource();
        //7、設定資料
            jedis.set("student", "Xiaoming");
            String value = jedis.get("student");
            System.out.println(value);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(jedis != null){
                jedis.close();
            }
            if(jedisPool !=null){
                jedisPool.close();
            }

        }


    }

最後執行成功
這裡寫圖片描述

3、配置過程中注意的事項
(1)redis.conf中的bind引數:預設為

bind 127.0.0.1

若改為bind 0.0.0.0,就可以從其他的客戶端訪問伺服器,不光只是本機。

(2)Linux系統預設的防火牆是firewall,而不是iptables

參考資料: