Redis 起步

小亮520cl發表於2015-09-06
http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html

Rdis和JQuery一樣是純粹為應用而產生的,這裡記錄的是在CentOS 5.7上學習入門文章:

1.Redis簡介

redis Redis是一個key-value儲存系統。和Memcached類似,但是解決了斷電後資料完全丟失的情況,而且她支援更多無化的value型別,除了和string外,還支援lists(連結串列)、sets(集合)和zsets(有序集合)幾種資料型別。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。

2.Redis的效能

下面是官方的bench-mark資料:

  • The test was done with 50 simultaneous clients performing 100000 requests.
  • The value SET and GET is a 256 bytes string.
  • The Linux box is running Linux 2.6, it’s Xeon X3320 2.5Ghz.
  • Text executed using the loopback interface (127.0.0.1).

    Results: about 110000 SETs per second, about 81000 GETs per second.

更多詳細資料請見官方bench-mark page()

3.安裝Redis

Redis的程式碼遵循ANSI-C編寫,可以在所有POSIX系統(如Linux, *BSD, Mac OS X, Solaris等)上安裝執行。而且Redis並不依賴任何非標準庫,也沒有編譯引數必需新增。redis的安裝出奇的簡單,這可能也是他風靡的一個原因,讓人很容易上手,不像某些東西,編譯階段就能讓人完全絕望。

先去官網下載原始碼:

wget 

解壓:

tar –zxvf redis-2.4.6.tar.gz

編譯

需要說明的事,redis的安裝非常簡單,已經有現成的Makefile檔案,直接執行make命令即可。

make

make install

Redis 由四個可執行檔案:redis-benchmarkredis-cliredis-serverredis-stat 這四個檔案,加上一個redis.conf就構成了整個redis的最終可用包。它們的作用如下:

  • redis-server:Redis伺服器的daemon啟動程式
  • redis-cli:Redis命令列操作工具。當然,你也可以用telnet根據其純文字協議來操作
  • redis-benchmark:Redis效能測試工具,測試Redis在你的系統及你的配置下的讀寫效能
  • redis-stat:Redis狀態檢測工具,可以檢測Redis當前狀態引數及延遲狀況

現在就可以啟動redis了,redis只有一個啟動引數,就是他的配置檔案路徑。

redis-server /etc/redis.conf

注意,預設複製過去的redis.conf檔案的daemonize引數為no,所以redis不會在後臺執行,這時要測試,我們需要重新開一個終端。修改為yes則為後臺執行redis。另外配置檔案中規定了pid檔案,log檔案和資料檔案的地址,如果有需要先修改,預設log資訊定向到stdout.

下面是redis.conf的主要配置引數的意義:

  1. redis.conf配置選項如下
    daemonize 是否以後臺程式執行,預設為no
    pidfile 如以後臺程式執行,則需指定一個pid,預設為/var/run/redis.pid
    bind 繫結主機IP,預設值為127.0.0.1(註釋)
    port 監聽埠,預設為6379
    timeout 超時時間,預設為300(秒)
    loglevel 日誌記錄等級,有4個可選值,debug,verbose(預設值),notice,warning
    logfile 日誌記錄方式,預設值為stdout
    databases 可用資料庫數,預設值為16,預設資料庫為0
    save  指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案。這個可以多個條件配合,比如預設配置檔案中的設定,就設定了三個條件。
    save 900 1 900秒(15分鐘)內至少有1個key被改變
    save 300 10  300秒(5分鐘)內至少有300個key被改變
    save 60 10000  60秒內至少有10000個key被改變
    rdbcompression 儲存至本地資料庫時是否壓縮資料,預設為yes
    dbfilename 本地資料庫檔名,預設值為dump.rdb
    dir 本地資料庫存放路徑,預設值為 ./
    slaveof  當本機為從服務時,設定主服務的IP及埠(註釋)
    masterauth  當本機為從服務時,設定主服務的連線密碼(註釋)
    requirepass 連線密碼(註釋)
    maxclients 最大客戶端連線數,預設不限制(註釋)
    maxmemory  設定最大記憶體,達到最大記憶體設定後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,任到達最大記憶體設定,將無法再進行寫入操作。(註釋)
    appendonly 是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設值為no
    appendfilename 更新日誌檔名,預設值為appendonly.aof(註釋)
    appendfsync 更新日誌條件,共有3個可選值。no表示等作業系統進行資料快取同步到磁碟,always表示每次更新操作後手動呼叫fsync()將資料寫到磁碟,everysec表示每秒同步一次(預設值)。
    vm-enabled 是否使用虛擬記憶體,預設值為no
    vm-swap-file 虛擬記憶體檔案路徑,預設值為/tmp/redis.swap,不可多個Redis例項共享
    vm-max-memory 將所有大於vm-max-memory的資料存入虛擬記憶體,無論vm-max-memory設定多小,所有索引資料都是記憶體儲存的(Redis的索引資料 就是keys),也就是說,當vm-max-memory設定為0的時候,其實是所有value都存在於磁碟。預設值為0。

    #當dump  .rdb資料庫的時候是否壓縮資料物件
    rdbcompression yes
    #dump資料庫的資料儲存的檔名
    dbfilename dump.rdb
    #Redis的工作目錄
    dir /var/lib/redis/
    ###########  Replication #####################
    #Redis的複製配置
    # slaveof
    # masterauth

    ############## SECURITY ###########
    # requirepass foobared

    ############### LIMITS ##############
    #最大客戶端連線數
    maxclients 128
    #最大記憶體使用率
    maxmemory 

    ########## APPEND ONLY FILE MODE #########
    #是否開啟日誌功能
    appendonly no
    # 重新整理日誌到disk的規則
    # appendfsync always
    appendfsync everysec
    # appendfsync no
    ################ VIRTUAL MEMORY ###########
    #是否開啟VM功能
    vm-enabled no
    # vm-enabled yes
    vm-swap-file logs/redis.swap
    vm-max-memory 0
    vm-page-size 32
    vm-pages 134217728
    vm-max-threads 4
    ############# ADVANCED CONFIG ###############
    glueoutputbuf yes
    hash-max-zipmap-entries 64
    hash-max-zipmap-value 512
    #是否重置Hash表
    activerehashing yes

    Redis官方文件對VM的使用提出了一些建議: 當你的key很小而value很大時,使用VM的效果會比較好.因為這樣節約的記憶體比較大. 當你的key不小時,可以考慮使用一些非常方法將很大的key變成很大的value,比如你可以考慮將key,value組合成一個新的value. 最好使用linux ext3 等對稀疏檔案支援比較好的檔案系統儲存你的swap檔案. vm-max-threads這個引數,可以設定訪問swap檔案的執行緒數,設定最好不要超過機器的核數.如果設定為0,那麼所有對swap檔案的操作都是序列的.可能會造成比較長時間的延遲,但是對資料完整性有很好的保證.

這時你可以開啟一個終端進行測試了,配置檔案中預設的監聽埠是6379

我們可以開啟一個Redis客戶端進行測試

[root@SNDA-192-168-1-114 ~]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused 
not connected> exit 
[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf 
[root@SNDA-192-168-1-114 ~]# redis-cli 
redis 127.0.0.1:6379> quit

4.redis資料結構

redis 的作者antirez曾稱其為一個資料結構伺服器(data structures server),這是一個非常準確的表述,redis的所有功能就是將資料以其固有的幾種結構儲存,並提供給使用者操作這幾種結構的介面。我們可以想象我們在各種語言中的那些固有資料型別及其操作。

redis目前提供四種資料型別:string,list,setzset(sorted set)和Hash

  • string是最簡單的型別,你可以理解成與Memcached一模一個的型別,一個key對應一個value,其上支援的操作與Memcached的操作類似。但它的功能更豐富。
  • list是一個連結串列結構,主要功能是push、pop、獲取一個範圍的所有值等等。操作中key理解為連結串列的名字。
  • set是集合,和我們數學中的集合概念相似,對集合的操作有新增刪除元素,有對多個集合求交併差等操作。操作中key理解為集合的名字。
  • zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在新增修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。
  • Hash資料型別允許使用者用Redis儲存物件型別,Hash資料型別的一個重要優點是,當你儲存的資料物件只有很少幾個key值時,資料儲存的記憶體消耗會很小.更多關於Hash資料型別的說明請見: 

在官網上給出了所有支援的介面列表,並副副附有詳細的介紹,地址:

另外,作者還提供了一個非常貼心的web命令列模擬頁面,供初學者試用redis,地址:

5.redis資料儲存

redis的儲存分為記憶體儲存、磁碟儲存和log檔案三部分,配置檔案中有三個引數對其進行配置。

save seconds updatessave配置,指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案。這個可以多個條件配合,比如預設配置檔案中的設定,就設定了三個條件。

appendonly yes/no appendonly配置,指出是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為redis本身同步資料檔案是按上面的save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。

appendfsync no/always/everysec appendfsync配置,no表示等作業系統進行資料快取同步到磁碟,always表示每次更新操作後手動呼叫fsync()將資料寫到磁碟,everysec表示每秒同步一次。

6.redis主從配置

redis支援master-slave的主從配置,配置方法是在從機的配置檔案中指定slaveof引數為主機的ip和port即可

7.redis起步(連結整理)

專案首頁,下方是各種語言支援列表:

作者在wiki中給出了一個非常好的例子,以使我們可以快速上手,地址:

同時作者推薦的另一個教程,地址:

一個redis愛好者建立的相關問題討論網站:

為什麼使用 Redis及其產品定位

Redis記憶體使用最佳化與儲存

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1792060/,如需轉載,請註明出處,否則將追究法律責任。

相關文章