Redis資料庫安裝配置使用

來源:互聯網
上載者:User

標籤:php   緩衝   儲存系統   效能測試   需求   


  Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value類型相對更多,包括string(字串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(雜湊類型)。這些資料類型都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是緩衝在記憶體中。區別的是redis會周期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。中文官方文檔: http://www.redis.cn/documentation.html

安裝Redis
官方網站:http://redis.io/
官方下載:http://redis.io/download可以根據需要下載不同版本
windows版:https://github.com/mythz/redis-windows

  安裝Redis,Redis的代碼遵循ANSI-C編寫,可以在所有POSIX系統(如Linux, *BSD, Mac OS X, Solaris等)上安裝運行。而且Redis並不依賴任何非標準庫,也沒有編譯參數必需添加。redis的安裝出奇的簡單。
下載源碼:wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
解壓安裝:
$ wget http://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make
$ make install
如果make繼續報錯,資訊如下:error: jemalloc/jemalloc.h: No such file or directory
執行 make MALLOC=libc 就行
注意的是,為了防止出意外,make失敗後在make的話,清理一下,執行make clean

Redis 由四個可執行檔在源碼包的src檔案夾中:redis-benchmark、redis-cli、redis-server、redis-stat 這四個檔案,加上一個redis.conf就構成了整個redis的最終可用包。它們的作用如下:
redis-server:Redis伺服器的daemon啟動程式
redis-cli:Redis命令列操作工具。當然,你也可以用telnet根據其純文字協議來操作
redis-benchmark:Redis效能測試工具,測試Redis在你的系統及你的配置下的讀寫效能
redis-stat:Redis狀態偵查工具,可以檢測Redis目前狀態參數及延遲狀況
(redis-benchmark  redis-check-aof  redis-check-dump  redis-cli  redis-sentinel  redis-server)
將命令複製到/usr/local/bin目錄,將設定檔redis.conf複製到/etc/目錄
現在就可以啟動了,redis只有一個啟動參數,就是他的設定檔路徑。

啟動命令如下: redis-server         /etc/redis.conf

  注意,預設複製過去的redis.conf檔案的daemonize參數為no,所以redis不會在後台運行,這時要測試,我們需要重新開一個終端。修改為yes則為後台運行redis。另外設定檔中規定了pid檔案,log檔案和資料檔案的地址,如果有需要先修改,預設log資訊定向到stdout.
添加
vm.overcommit_memory=1
重新整理配置使之生效
sysctl vm.overcommit_memory=1
補充介紹:
**如果記憶體情況比較緊張的話,需要設定核心參數:
echo 1 > /proc/sys/vm/overcommit_memory

核心參數說明如下:
overcommit_memory檔案指定了核心針對記憶體配置的策略,其值可以是0、1、2。
0, 表示核心將檢查是否有足夠的可用記憶體供應用進程使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用進程。
1, 表示核心允許分配所有的實體記憶體,而不管當前的記憶體狀態如何。
2, 表示核心允許分配超過所有實體記憶體和交換空間總和的記憶體
編輯redis.conf設定檔(/etc/redis.conf),按需求做出適當調整,比如:
daemonize  yes  #轉為守護進程,否則啟動時會每隔5秒輸出一行監控資訊
save  60  1000  #減小改變次數,其實這個可以根據情況進行指定
maxmemory  256000000  #分配256M記憶體

下面是redis.conf的主要配置參數的意義:
    daemonize:是否以後台daemon(守護進程)方式運行
    pidfile:pid檔案位置
    port:監聽的連接埠號碼                                                 
    timeout:請求逾時時間
    loglevel:log資訊層級
    logfile:log檔案位置
    databases:開啟資料庫的數量
    save * *:儲存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動儲存快照。可設定多個條件。
    rdbcompression:是否使用壓縮
    dbfilename:資料快照檔案名稱(只是檔案名稱,不包括目錄)
    dir:資料快照的儲存目錄(這個是目錄)
    appendonly:是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高資料抗風險能力,但影響效率。
  appendfsync:appendonlylog如何同步到磁碟(三個選項,分別是每次寫都強制調用fsync、每秒啟用一次fsync、不調用fsync等待系統自己同步)

這時你可以開啟一個終端進行測試了,設定檔中預設的監聽連接埠是6379,沒有啟動先啟動再測試, 命令格式如下:
redis-cli.exe -h 192.168.10.61 -p 6379

[[email protected] ~]#redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[[email protected] ~]# redis-server /etc/redis.conf
[[email protected] ~]# redis-cli
redis 127.0.0.1:6379> quit

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

redis目前提供四種資料類型:string,list,set及zset(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資料類型的說明請見: http://code.google.com/p/redis/wiki/Hashes

每種資料類型都提供了相應的操作方法,要使用這些方法,首先要安裝redis的PHP擴充\php_redis-5.5-vc11-ts-x86我的是PHP5.5版本要對應,在PHP設定檔中添加
extension=php_igbinary.dll
extension=php_redis.dll


重新啟動apache,phpinfo()查看得到結果如下即可。


編寫PHP代碼串連redis伺服器,完成簡易操作:
<?php
$redis = new Redis(); #執行個體化redis類  
$redis->connect(‘192.168.1.251‘); #串連伺服器  
$redis->set(‘key‘, ‘hello ‘); #調用方法,設定string類型值  
$redis->append(‘key‘, ‘world‘); #修改string類型值  
echo $redis->get(‘key‘);  #擷取redis key的值,並輸出顯示   
echo $redis->type(‘key‘); #擷取key 的資料類型  
echo $redis->echo(‘will close...‘);# 輸出字串  
$redis->close(); #關閉串連

下面羅列一些Redis類的一些屬性及方法
a)串連redis server:
connect :串連server
pconnect :長串連
auth :許可權驗證
select :選擇DB
close : 關閉串連
setOption : 設定 client 選項
getOption : 擷取client選項
ping : ping redis server
echo : 輸出 字串

注意,如果頻繁操作redis,不停地connect 和close會很耗效能的,這個時候,建議用pconnect 建立個長串連
b)字串讀寫函數
    append  :在值的後面追加值
    decr :遞減一個key的值
    incr :遞增一個key的值
    get :擷取一個值
    set :設定一個值
    getSet :設定值,並返回老值
    mGet :批量擷取值
    mSet :大量設定值
    strlen :擷取值長度
注意:如果能用大量操作盡量用批量,減少頻繁串連redis資料庫效能
c)hash讀寫函數
    hDel :刪除一個多個域
    hExists :判斷一個hash域是否存在
    hGet :擷取hash域的值
    hGetAll :擷取所有域值
    hIncrBy :自增長一個hash int域的值
    hKeys :擷取hash 所有域
    hLen :擷取域個數
    hMGet :批量擷取域的值
    hMSet :大量設定域的值
    hSet :設定域的值
    hVals:得到所有域的值
d)list讀寫函數
    lInsert:插入元素
    lLen:list長度
    lPop:移除並擷取第一個顏色
    lPush:插入一個元素
    lRem:移除元素
    lSet:設定元素值
e)set
    sAdd:增加一個或多個成員
    sIsMember:是否包含
    sMembers:得到成員
    sMove:移動成員
    sPop:移除成員
    sRandMember:得到隨機成員
    sRem:刪除
f)sorted set
    zAdd:增加一個或多個
    zCard:成員個數
    zIncrBy:遞增成員score
    zRange:返回索引範圍內的成員
    zRangeByScore :返回score範圍內的成員
    zScore:擷取成員score
    zRem:移除一個或多個成員

更多資訊請參考:https://github.com/nicolasff/phpredis

redis.conf配置參數:
1)daemonize on|yes
redis預設不是以守護進程的方式運行,可以通過該配置項修改,使用yes時,啟用守護進程
2)pidfile /var/run/redis_6379.pid
redis以守護進程方式運行時,系統預設會把pid寫入/var/run/redis.pid,可以通過pidfile指定pid檔案
3)port 6379
redis預設監聽6379連接埠,可以通過port指定redis要監聽的連接埠
4)bind 127.0.0.1
綁定主機地址
5)unixsocket /tmp/redis.sock
指定redis監聽的unix socket 路徑
6)timeout 300
當用戶端閑置多長時間,關閉串連,單位秒
7)loglevel verbose|debug|notice|warning
指定日誌記錄層級,預設是verbose
8)logfile /var/log/redis_6379.log
日誌記錄檔案,預設是標準輸出stdout,如果redis以守護進程方式運行,logfile 配置為stdout時,logs將要輸出到/dev/null
9)syslog-enabled no|yes
當配置為yes時,日誌輸出到系統日誌,預設是no

10)syslog-ident redis
指定syslog的標示符
11)syslog-facility local0
指定syslog裝置(facility),必須是user或則local0到local7
12)databases 16
設定redis中資料庫的個數,預設資料庫是DB 0,可以通過select <dbid>,選擇使用的資料庫。dbis大於等於0,小於等於databases -1 【這裡是16-1】
13)save <seconds> <changes>
指定多長時間內,有多少次更新操作時,將資料同步到資料庫檔案,可以多個條件配合,系統預設配置如下:
    save 900 1 #900秒 1個修改  
    save 300 10 #300秒 10個更新  
    save 60 10000<span style="white-space:pre"> </span>#60秒 10000個更新  
注意,如果不持久化【不把資料寫入磁碟】,注釋掉save即可。
14)rdbcompression yes|no
資料dump到資料檔案時,系統是否壓縮string對象資料,系統預設是yes。如果為了節省cpu,可以設定為no,此時資料檔案比用LZF壓縮時要大
15)dbfilename dump.rdb
指定資料庫檔案名,預設是dump.rdb
16)dir /var/lib/redis/6379
指定本機資料庫存放目錄
17)slaveof <masterip> <masterport>
當本機是slave服務時,設定master服務的ip和連接埠
18)masterauth <master-password>
當master服務設定了密碼時,slave服務串連master的密碼。如果配置不對,slave服務要求將被拒絕
19)slave-serve-stale-data yes|no
當slave和master之間的串連斷開或slave正在於master同步時,如果有slave請求,當slave-serve-stale-data配置為yes時,slave可以相應用戶端請求;當為no時,slave將要響應錯誤,預設是yes
20)requirepass foobared
設定redis串連密碼
21)maxclients 128
設定同一時間用戶端最大串連數,預設是無限制。如果設定maxclients 0 時,表示不限制
22)maxmemory <bytes>
指定redis最大記憶體限制,redis在啟動時,會把資料載入到記憶體中,達到最大記憶體後,redis會先清除已到期或將到期的key,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀操作
23)maxmemory-policy
volatile-lru|allkeys-lru|volatile-random|allkeys->random|volatile-ttl|noeviction
當redis使用記憶體達到最大時,使用哪種策略移除記憶體中資料
24)appendonly no|yes
指定是否在每次更新操作後進行日誌記錄,預設配置是no,即在採用非同步方式把資料寫入到磁碟,如果不開啟,可能會在斷電時導致部分資料丟失
25)appendfilename appendonly.aof
指定更新記錄檔名【aof日誌】,預設為appendonly.aof
26)appendfsync everysec|no|aways
指定更新日誌條件,no表示等作業系統進行資料緩衝同步到磁碟的aof檔案(快)always表示每次更新操作後手動調用fsync將資料寫到磁碟的aof檔案(慢,安全)
everysec,表示每秒同步一次(拆中,預設值)
27)slowlog-log-slower-than 10000
配置記錄慢日誌的條件,單位是微妙,當是負值時,關閉慢日誌記錄,當是0時,記錄所有操作
28)slowlog-max-len 1024
配置記錄慢查詢的最大條數
29)hash-max-zipmap-entries 512
配置最大元素數,當超過該配置資料時,redis採用特殊hash演算法
30)hash-max-zipmap-value 64
配置最大元素值,當草果配置值時,採用特殊hash演算法
31)activerehashing yes
指定是否啟用充值hash,預設開啟

可以通過下面命令使用設定檔redis.conf啟動redis服務
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

Redis資料庫安裝配置使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.