Redis初探

最近接觸阿里的dubbo, 之前也沒有遇到過集群的項目。突然想到緩存該如何處理,如果使用EHCache就是單點(diǎn)緩存了無法解決緩存同步的問題。所以研究下redis和memcached來看看可不可以解決問題。memcached后面也會繼續(xù)更新。

一、 Redis簡介

上學(xué)時,每當(dāng)一開學(xué)老師講起書本開頭的各種歷史原因簡介的時候,就感覺非常輕松,所以一般所有人都不會認(rèn)真聽,殊不知這是大體了解一門課的最重要的時刻。

Redis(REmote DIctionary Server)是一個由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ù)器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。

Redis 與其他 key - value 緩存產(chǎn)品有以下三個特點(diǎn):

  • Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進(jìn)行使用。
  • Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
  • Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

二、Redis安裝

  1. Window 下安裝
    地址:https://github.com/dmajkic/redis/downloads
    根據(jù)實(shí)際情況將64位或32位解壓到相應(yīng)的位置。我的解壓路徑是E:\Tool\redis。
    接著開啟redis-server端
    cmd
    e:
    cd Tool\redis\64bit
    redis-server.exe redis.conf //開啟redis服務(wù),使用本目錄下redis.conf文件配置
    server端不要關(guān)閉,繼續(xù)client端
    cmd //開啟另一個窗口
    e:
    cd Tool\redis\64bit
    redis-cli.exe -h 127.0.0.1 -p 6379
    ping //redis 127.0.0.1:6379 > ping
    //pong 返回正確
    windows下安裝完畢。

  2. Linux下安裝
    下載地址:http://redis.io/download,下載最新版本。

     wget http://download.redis.io/releases/redis-3.0.7.tar.gz
     tar xzf redis-3.0.7.tar.gz
     cd redis-3.0.7
     make
     cd src
     ./redis-server redis.conf   //啟動服務(wù)
    

    服務(wù)端啟動成功。啟動redis服務(wù)進(jìn)程后,就可以使用測試客戶端程序redis-cli和redis服務(wù)交互了。

       cd src
       ./redis-cli
       ping    // 127.0.0.1:6379> ping
               // PONG
    

    連接成功。

如果需要在遠(yuǎn)程 redis 服務(wù)上執(zhí)行命令,同樣我們使用的也是 redis-cli 命令。
語法如下:
$ redis-cli -h host -p port -a password

三、Redis配置

linux下的用戶會發(fā)現(xiàn)啟動服務(wù)之后并不是以守護(hù)進(jìn)程方式來運(yùn)行, 且沒有密碼隨意登錄等。下面就了解一下Redis的配置文件來修改這些設(shè)定。配置文件位于 Redis 安裝目錄下,文件名為 redis.conf。
redis.conf 配置項說明如下:
1). Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過該配置項修改,使用yes啟用守護(hù)進(jìn)程

    daemonize no

2). 當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時,Redis默認(rèn)會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定

    pidfile /var/run/redis.pid

3). 指定Redis監(jiān)聽端口,默認(rèn)端口為6379,作者在自己的一篇博文中解釋了為什么選用6379作為默認(rèn)端口,因為6379在手機(jī)按鍵上MERZ對應(yīng)的號碼,而MERZ取自意大利歌女Alessia Merz的名字
port 6379
4). 綁定的主機(jī)地址

    bind 127.0.0.1

5).當(dāng) 客戶端閑置多長時間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能

    timeout 300

6). 指定日志記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認(rèn)為verbose

    loglevel verbose

7). 日志記錄方式,默認(rèn)為標(biāo)準(zhǔn)輸出,如果配置Redis為守護(hù)進(jìn)程方式運(yùn)行,而這里又配置為日志記錄方式為標(biāo)準(zhǔn)輸出,則日志將會發(fā)送給/dev/null

    logfile stdout

8). 設(shè)置數(shù)據(jù)庫的數(shù)量,默認(rèn)數(shù)據(jù)庫為0,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫id

    databases 16

9). 指定在多長時間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個條件配合

    save <seconds> <changes> //Redis默認(rèn)配置文件中提供了三個條件:
    save 900 1
    save 300 10
    save 60 10000
   // 分別表示900秒(15分鐘)內(nèi)有1個更改,300秒(5分鐘)內(nèi)有10個更改以及60秒內(nèi)有10000個更改。 

10). 指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù),默認(rèn)為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時間,可以關(guān)閉該選項,但會導(dǎo)致數(shù)據(jù)庫文件變的巨大

    rdbcompression yes

11). 指定本地數(shù)據(jù)庫文件名,默認(rèn)值為dump.rdb

    dbfilename dump.rdb

12). 指定本地數(shù)據(jù)庫存放目錄

    dir ./

13). 設(shè)置當(dāng)本機(jī)為slav服務(wù)時,設(shè)置master服務(wù)的IP地址及端口,在Redis啟動時,它會自動從master進(jìn)行數(shù)據(jù)同步

    slaveof <masterip> <masterport>**

14). 當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時,slav服務(wù)連接master的密碼

    masterauth <master-password>**

15). 設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認(rèn)關(guān)閉

    requirepass foobared

16). 設(shè)置同一時間最大客戶端連接數(shù),默認(rèn)無限制,Redis可以同時打開的客戶端連接數(shù)為Redis進(jìn)程可以打開的最大文件描述符數(shù),如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息

    maxclients 128

17). 指定Redis最大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,Redis會先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達(dá)最大內(nèi)存設(shè)置,將無法再進(jìn)行寫入操作,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制,會把Key存放內(nèi)存,Value會存放在swap區(qū)

    maxmemory <bytes>

18). 指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會在斷電時導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中。默認(rèn)為no

    appendonly no

19). 指定更新日志文件名,默認(rèn)為appendonly.aof

    appendfilename appendonly.aof

20). 指定更新日志條件,共有3個可選值:
no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快)
always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折衷,默認(rèn)值)

    appendfsync everysec

21).最后,也可以用客戶端在連接上之后,使用命令設(shè)置和查看配置信息

    redis 127.0.0.1:6379> CONFIG GET *   //全部獲取

CONFIG SET 命令基本語法:

    redis 127.0.0.1:6379> CONFIG SET 名稱 新值

總結(jié):

以上Redis服務(wù)已經(jīng)設(shè)置完畢了,下一篇我們會講《Redis使用》。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • redis是一個以key-value存儲的非關(guān)系型數(shù)據(jù)庫。有五種數(shù)據(jù)類型,string、hashes、list、s...
    林ze宏閱讀 1,111評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,653評論 19 139
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴(kuò)展、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,727評論 0 36
  • 安全性 設(shè)置客戶端連接后進(jìn)行任何其他指令前需要使用的密碼。 警告:因為redis 速度相當(dāng)快,所以在一臺比較好的服...
    OzanShareing閱讀 1,950評論 1 7
  • 這是一本讓我印象最深的亦舒的小說,初二看完之后,一直不忍心再看,今天凌晨失眠的時候終于翻出來又看了一遍,清流...
    紅豆抹茶味兒閱讀 220評論 0 0

友情鏈接更多精彩內(nèi)容