redis 介紹部署php
官網:http://www.redis.io/
http://www.redis.cn/
http://blog.nosqlfan.com/mysql
Remote Dictionary Server(Redis)是一個基於key-value鍵值對的持久化數據庫存儲系統,redis和大名鼎鼎的memcached緩存服務很像,可是redis支持的數據類型更加豐富,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)等。
這些數據類型都是支持push/php、add/remove及取交集、並集和差集以及更加豐富的操做,並且這些操做都是原子性的,在此基礎上,redis還支持各類不一樣的排序,與memcached緩存服務同樣,爲了保證效率,數據都是緩存在內存中提供服務,和memcached不一樣的是,redis持久化緩存服務還會週期性把更新的數據寫到磁盤已經把修改的操做記錄追加到文件裏記錄,比memcached更有優點的是,redis還支持主從同步,這點很相似關係型數據庫mysql。
redis的出如今必定程度上彌補了memcached這類key-value內存緩存服務不足,在部分場合上能夠對關係型數據庫起到很好的補充做用。linux
1.redis優勢
性能很高:redis能支持超過10萬每秒的讀寫評論
豐富的數據類型:redis支持二進制的strings,lists,hashes,set已經ordered set等數據類型操做
原子:redis的全部操做都是原子性的,同時redis還支持對幾個操做全並後的原子性操做
豐富的特性:
主從複製:redis支持異機主從複製
2.數據類型:
string 字符串類型
list(鏈表)
set(集合)
zset(有序集合
hash 哈希c++
3.redis的應用場景
傳統的mysql+memcached的網站架構遇到的問題
mysql數據庫其實是合適進行海量數據存儲的,加上經過memcached將熱點數據存放到內存cache裏,達到加速數據訪問的目的,絕大部分公司都曾經使用過這樣的架構,但隨着業務數量的不斷增長,和訪問量的持續增長,不少問題就會暴露出來redis
1.安裝gcc環境
yum install gcc-c++sql
2.下載源碼包並解壓
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz
cd redis-3.2.9數據庫
3.安裝ruby2.4.1並編譯(必定要安裝大於2.2.2的ruby,要否則redis在make的時候會報錯)
wget http://ftp.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
tar -zxvf ruby-2.4.1.tar.gz
cd ruby-2.4.1
mkdir -p /usr/local/ruby
./configure --prefix=/usr/local/ruby
make && make install
ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby緩存
4.安裝
make
make install PREFIX=/usr/local/redis
cp redis.conf /usr/local/redis/bin/redis.conf
chmod /usr/local/redis/bin/redis.confruby
5.啓動redis
./redis-server redis.conf架構
6.驗證
./redis-cli -p 6379
127.0.0.1:6379> set ab 123
OK
127.0.0.1:6379> get ab
"123"
1.在/usr/local/下面建立redis-cluster目錄
mkdir -p /usr/local/redis-cluster
2.複製/usr/local/redis/bin目錄到redis-cluster裏面並重命名爲redis1
cd /usr/local
cp -r redis/bin redis-cluster/redis1
3.redis1,redis2,redis3,redis4,redis5,redis6(必須6個節點以上才能建立集羣)
分別修改成redis-7001.conf,redis-7002.conf 依次到redis-7006.conf
以redis-7001爲例:
daemonize yes
port 7001
logfile "./redis-7001.log"
protected-mode no
pidfile /var/run/redis_7001.pid
cluster-enabled yes
appendonly yes
4.將redis-trib.rb復到制redis-cluster目錄裏面
cp /root/redis-3.2.4/src/redis-trib.rb ./redis-cluster
5.安裝gem
yum install rubygems -y
6.安裝ruby的redis包
gem install redis
7.分別進入redis1,redis2,redis3,redis4,redis5,redis6裏面執行
./redis-server redis-7001.conf
8.用redis-trib.rb構建集羣
cd /usr/local/redis-cluster/
./redis-trib.rb create --replicas 1 172.16.0.100:7001 172.16.0.100:7002 172.16.0.100:7003 172.16.0.100:7004 172.16.0.100:7005 172.16.0.100:7006
9.驗證集羣是否成功
./redis-cli -h 172.16.0.100 -c -p 7002
> set hello helloword > get hello
#是否做爲守護進程運行
daemonize yes
#如之後臺進程運行,則需指定一個pid,默認爲/var/run/redis.pid
pidfile redis.pid
#綁定主機IP,默認值爲127.0.0.1
#bind 127.0.0.1
#Redis默認監聽端口
port 6379
#客戶端閒置多少秒後,斷開鏈接,默認爲300(秒)
timeout 300
#日誌記錄等級,有4個可選值,debug,verbose(默認值),notice,warning
loglevel verbose
#指定日誌輸出的文件名,默認值爲stdout,也可設爲/dev/null屏蔽日誌
logfile stdout
#可用數據庫數,默認值爲16,默認數據庫爲0
databases 16
#保存數據到disk的策略
#當有一條Keys數據被改變是,900秒刷新到disk一次
save 900 1
#當有10條Keys數據被改變時,300秒刷新到disk一次
save 300 10
#當有1w條keys數據被改變時,60秒刷新到disk一次
save 60 10000
#當dump .rdb數據庫的時候是否壓縮數據對象
rdbcompression yes
#本地數據庫文件名,默認值爲dump.rdb
dbfilename dump.rdb
#本地數據庫存放路徑,默認值爲 ./
dir /var/lib/redis/
########### Replication #####################
#Redis的複製配置
# slaveof <masterip> <masterport> 當本機爲從服務時,設置主服務的IP及端口
# masterauth <master-password> 當本機爲從服務時,設置主服務的鏈接密碼
#鏈接密碼
# requirepass foobared
#最大客戶端鏈接數,默認不限制
# maxclients 128
#最大內存使用設置,達到最大內存設置後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,任到達最大內存設置,將沒法再進行寫入操做。
# maxmemory <bytes>
#是否在每次更新操做後進行日誌記錄,若是不開啓,可能會在斷電時致使一段時間內的數據丟失。由於redis自己同步數據文件是按上面save條件來同步的,因此有的數據會在一段時間內只存在於內存中。默認值爲no
appendonly no
#更新日誌文件名,默認值爲appendonly.aof
#appendfilename
#更新日誌條件,共有3個可選值。no表示等操做系統進行數據緩存同步到磁盤,always表示每次更新操做後手動調用fsync()將數據寫到磁盤,everysec表示每秒同步一次(默認值)。
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否開啓VM功能,默認值爲no
vm-enabled no
# vm-enabled yes
#虛擬內存文件路徑,默認值爲/tmp/redis.swap,不可多個Redis實例共享
vm-swap-file /tmp/redis.swap
#將全部大於vm-max-memory的數據存入虛擬內存,不管vm-max-memory設置多小,全部索引數據都是內存存儲的 (Redis的索引數據就是keys),也就是說,當vm-max-memory設置爲0的時候,實際上是全部value都存在於磁盤。默認值爲0。
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文件的操做都是串行的.可能會形成比較長時間的延遲,可是對數據完整性有很好的保證.