標籤:
php dll:
https://github.com/phpredis/phpredis/downloads
redis遠端連線
vim redis.conf
requirepass {***} #設定密碼
#重啟redis
kill {redis pid}
redis-server
#php auth驗證
$connect = $redis->connect($cfg[‘host‘], $cfg[‘port‘], $cfg[‘timeout‘]);
$cfg[‘password‘] && $redis->auth($cfg[‘password‘]);
------------------------------------------------------------------------------
[添加redis擴充]
1、安裝phpredis
wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz
上傳phpredis-2.2.4.tar.gz到/usr/local/src目錄
cd /usr/local/src #進入軟體包存放目錄
tar zxvf phpredis-2.2.4.tar.gz #解壓
cd phpredis-2.2.4 #進入安裝目錄
/usr/local/php/bin/phpize #用phpize產生configure設定檔
./configure --with-php-config=/usr/local/php/bin/php-config #配置
make #編譯
make install #安裝
安裝完成之後,出現下面的安裝路徑
/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
2、配置php支援
vi /usr/local/php/etc/php.ini #編輯設定檔,在最後一行添加以下內容
extension="redis.so"
:wq! #儲存退出
3 重啟服務
sudo service nginx restart
sudo /etc/init.d/php-fpm restart
---------------------------------------redis設定檔詳解---------------------------------------
redis是一款開源的、高效能的鍵-值儲存(key-value store),和memcached類似,redis常被稱作是一款key-value記憶體儲存系統或者記憶體資料庫,同時由於它支援豐富的資料結構,又被稱為一種資料結構伺服器(data structure server)。
編譯完redis,它的設定檔在源碼目錄下 redis.conf ,將其拷貝到工作目錄下即可使用,下面具體解釋redis.conf中的各個參數:
1 daemonize no
預設情況下,redis 不是在後台啟動並執行,如果需要在後台運行,把該項的值更改為yes。
2 pidfile /var/run/redis.pid
當Redis 在後台啟動並執行時候,Redis 預設會把pid 檔案放在/var/run/redis.pid,你可以配置到其他地址。當運行多個redis 服務時,需要指定不同的pid 檔案和連接埠
3 port
監聽連接埠,預設為6379
4 #bind 127.0.0.1
指定Redis 只接收來自於該IP 位址的請求,如果不進行設定,那麼將處理所有請求,在生產環境中為了安全最好設定該項。預設注釋掉,不開啟
5 timeout 0
設定用戶端串連時的逾時時間,單位為秒。當用戶端在這段時間內沒有發出任何指令,那麼關閉該串連
6 tcp-keepalive 0
指定TCP串連是否為長串連,"偵探"訊號有server端維護。預設為0.表示禁用
7 loglevel notice
log 等級分為4 級,debug,verbose, notice, 和warning。生產環境下一般開啟notice
8 logfile stdout
配置log 檔案地址,預設使用標準輸出,即列印在命令列終端的視窗上,修改為記錄檔目錄
9 databases 16
設定資料庫的個數,可以使用SELECT 命令來切換資料庫。預設使用的資料庫是0號庫。預設16個庫
10
save 900 1
save 300 10
save 60 10000
儲存資料快照的頻率,即將資料持久化到dump.rdb檔案中的頻度。用來描述"在多少秒期間至少多少個變更操作"觸發snapshot資料儲存動作
預設設定,意思是:
if(在60 秒之內有10000 個keys 發生變化時){
進行鏡像備份
}else if(在300 秒之內有10 個keys 發生了變化){
進行鏡像備份
}else if(在900 秒之內有1 個keys 發生了變化){
進行鏡像備份
}
11 stop-writes-on-bgsave-error yes
當持久化出現錯誤時,是否依然繼續進行工作,是否終止所有的用戶端write請求。預設設定"yes"表示終止,一旦snapshot資料儲存故障,那麼此server為唯讀服務。如果為"no",那麼此次snapshot將失敗,但下一次snapshot不會受到影響,不過如果出現故障,資料只能恢複到"最近一個成功點"
12 rdbcompression yes
在進行資料鏡像備份時,是否啟用rdb檔案壓縮手段,預設為yes。壓縮可能需要額外的cpu開支,不過這能夠有效減小rdb檔案的大,有利於儲存/備份/傳輸/資料恢複
13 rdbchecksum yes
讀取和寫入時候,會損失10%效能
14 rdbchecksum yes
是否進行校正和,是否對rdb檔案使用CRC64校正和,預設為"yes",那麼每個rdb檔案內容的末尾都會追加CRC校正和,利於第三方校正工具檢測檔案完整性
14 dbfilename dump.rdb
鏡像備份檔案的檔案名稱,預設為 dump.rdb
15 dir ./
資料庫鏡像備份的檔案rdb/AOF檔案放置的路徑。這裡的路徑跟檔案名稱要分開配置是因為Redis 在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成時,再把該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中
16 # slaveof <masterip> <masterport>
設定該資料庫為其他資料庫的從資料庫,並為其指定master資訊。
17 masterauth
當主要資料庫串連要求輸入密碼驗證時,在這裡指定
18 slave-serve-stale-data yes
當主master伺服器掛機或主從複製在進行時,是否依然可以允許客戶訪問可能到期的資料。在"yes"情況下,slave繼續向用戶端提供唯讀服務,有可能此時的資料已經到期;在"no"情況下,任何向此server發送的資料請求服務(包括用戶端和此server的slave)都將被告知"error"
19 slave-read-only yes
slave是否為"唯讀",強烈建議為"yes"
20 # repl-ping-slave-period 10
slave向指定的master發送ping訊息的時間間隔(秒),預設為10
21 # repl-timeout 60
slave與master通訊中,最大空閑時間,預設60秒.逾時將導致串連關閉
22 repl-disable-tcp-nodelay no
slave與master的串連,是否禁用TCP nodelay選項。"yes"表示禁用,那麼socket通訊中資料將會以packet方式發送(packet大小受到socket buffer限制)。
可以提高socket通訊的效率(tcp互動次數),但是小資料將會被buffer,不會被立即發送,對於接受者可能存在延遲。"no"表示開啟tcp nodelay選項,任何資料都會被立即發送,及時性較好,但是效率較低,建議設為no
23 slave-priority 100
適用Sentinel模組(unstable,M-S叢集管理和監控),需要額外的設定檔支援。slave的權重值,預設100.當master失效後,Sentinel將會從slave列表中找到權重值最低(>0)的slave,並提升為master。如果權重值為0,表示此slave為"觀察者",不參與master選舉
24 # requirepass foobared
設定用戶端串連後進行任何其他指定前需要使用的密碼。警告:因為redis 速度相當快,所以在一台比較好的伺服器下,一個外部的使用者可以在一秒鐘進行150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解。
25 # rename-command CONFIG 3ed984507a5dcd722aeade310065ce5d (方式:MD5(‘CONFIG^!‘))
重新命名指令,對於一些與"server"控制有關的指令,可能不希望遠程用戶端(非管理使用者)連結隨意使用,那麼就可以把這些指令重新命名為"難以閱讀"的其他字串
26 # maxclients 10000
限制同時串連的客戶數量。當串連數超過這個值時,redis 將不再接收其他串連請求,用戶端嘗試串連時將收到error 資訊。預設為10000,要考慮系統檔案描述符限制,不宜過大,浪費檔案描述符,具體多少根據具體情況而定
27 # maxmemory <bytes>
redis-cache所能使用的最大記憶體(bytes),預設為0,表示"無限制",最終由OS實體記憶體大小決定(如果實體記憶體不足,有可能會使用swap)。此值盡量不要超過機器的實體記憶體尺寸,從效能和實施的角度考慮,可以為實體記憶體3/4。此配置需要和"maxmemory-policy"配合使用,當redis中記憶體資料達到maxmemory時,觸發"清除策略"。在"記憶體不足"時,任何write操作(比如set,lpush等)都會觸發"清除策略"的執行。在實際環境中,建議redis的所有物理機器的硬體設定保持一致(記憶體一致),同時確保master/slave中"maxmemory""policy"配置一致。
當記憶體滿了的時候,如果還接收到set 命令,redis 將先嘗試剔除設定過expire 資訊的key,而不管該key 的到期時間還沒有到達。在刪除時,
將按照到期時間進行刪除,最早將要被到期的key 將最先被刪除。如果帶有expire 資訊的key 都刪光了,記憶體還不夠用,那麼將返回錯誤。這樣,redis 將不再接收寫請求,只接收get 請求。maxmemory 的設定比較適合於把redis 當作於類似memcached的緩衝來使用。
28 # maxmemory-policy volatile-lru
記憶體不足"時,資料清除策略,預設為"volatile-lru"。
volatile-lru ->對"到期集合"中的資料採取LRU(近期最少使用)演算法.如果對key使用"expire"指令指定了到期時間,那麼此key將會被添加到"到期集合"中。將已經到期/LRU的資料優先移除.如果"到期集合"中全部移除仍不能滿足記憶體需求,將OOM.
allkeys-lru ->對所有的資料,採用LRU演算法
volatile-random ->對"到期集合"中的資料採取"隨即選取"演算法,並移除選中的K-V,直到"記憶體足夠"為止. 如果如果"到期集合"中全部移除全部移除仍不能滿足,將OOM
allkeys-random ->對所有的資料,採取"隨機選取"演算法,並移除選中的K-V,直到"記憶體足夠"為止
volatile-ttl ->對"到期集合"中的資料採取TTL演算法(最小存活時間),移除即將到期的資料.
noeviction ->不做任何幹擾操作,直接返回OOM異常
另外,如果資料的到期不會對"應用系統"帶來異常,且系統中write操作比較密集,建議採取"allkeys-lru"
29 # maxmemory-samples 3
預設值3,上面LRU和最小TTL策略並非嚴謹的策略,而是大約估算的方式,因此可以選擇取樣值以便檢查
29 appendonly no
預設情況下,redis 會在後台非同步把資料庫鏡像備份到磁碟,但是該備份是非常耗時的,而且備份也不能很頻繁。所以redis 提供了另外一種更加高效的Database Backup及災難恢複方式。開啟append only 模式之後,redis 會把所接收到的每一次寫操作請求都追加到appendonly.aof 檔案中,當redis 重新啟動時,會從該檔案恢複出之前的狀態。但是這樣會造成appendonly.aof 檔案過大,所以redis 還支援了BGREWRITEAOF 指令,對appendonly.aof 進行重新整理。如果不經常進行資料移轉操作,推薦生產環境下的做法為關閉鏡像,開啟appendonly.aof,同時可以選擇在訪問較少的時間每天對appendonly.aof 進行重寫一次。
另外,對master機器,主要負責寫,建議使用AOF,對於slave,主要負責讀,挑選出1-2台開啟AOF,其餘的建議關閉
30 # appendfilename appendonly.aof
aof檔案名稱字,預設為appendonly.aof
31
# appendfsync always
appendfsync everysec
# appendfsync no
設定對appendonly.aof 檔案進行同步的頻率。always 表示每次有寫操作都進行同步,everysec 表示對寫操作進行累積,每秒同步一次。no不主動fsync,由OS自己來完成。這個需要根據實際業務情境進行配置
32 no-appendfsync-on-rewrite no
在aof rewrite期間,是否對aof新記錄的append暫緩使用檔案同步策略,主要考慮磁碟IO開支和請求阻塞時間。預設為no,表示"不暫緩",新的aof記錄仍然會被立即同步
33 auto-aof-rewrite-percentage 100
當Aof log增長超過指定比例時,重寫log file, 設定為0表示不自動重寫Aof 日誌,重寫是為了使aof體積保持最小,而確保儲存最完整的資料。
34 auto-aof-rewrite-min-size 64mb
觸發aof rewrite的最小檔案尺寸
35 lua-time-limit 5000
lua指令碼啟動並執行最大時間
36 slowlog-log-slower-than 10000
"慢動作記錄"記錄,單位:微秒(百萬分之一秒,1000 * 1000),如果操作時間超過此值,將會把command資訊"記錄"起來.(記憶體,非檔案)。其中"操作時間"不包括網路IO開支,只包括請求達到server後進行"記憶體實施"的時間."0"表示記錄全部操作
37 slowlog-max-len 128
"慢動作記錄"保留的最大條數,"記錄"將會被隊列化,如果超過了此長度,舊記錄將會被移除。可以通過"SLOWLOG <subcommand> args"查看慢記錄的資訊(SLOWLOG get 10,SLOWLOG reset)
38
hash-max-ziplist-entries 512
hash類型的資料結構在編碼上可以使用ziplist和hashtable。ziplist的特點就是檔案儲存體(以及記憶體儲存)所需的空間較小,在內容較小時,效能和hashtable幾乎一樣.因此redis對hash類型預設採取ziplist。如果hash中條目的條目個數或者value長度達到閥值,將會被重構為hashtable。
這個參數指的是ziplist中允許儲存的最大條目個數,,預設為512,建議為128
hash-max-ziplist-value 64
ziplist中允許條目value值最大位元組數,預設為64,建議為1024
39
list-max-ziplist-entries 512
list-max-ziplist-value 64
對於list類型,將會採取ziplist,linkedlist兩種編碼類別型。解釋同上。
40 set-max-intset-entries 512
intset中允許儲存的最大條目個數,如果達到閥值,intset將會被重構為hashtable
41
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
zset為有序集合,有2中編碼類別型:ziplist,skiplist。因為"排序"將會消耗額外的效能,當zset中資料較多時,將會被重構為skiplist。
42 activerehashing yes
是否開啟頂層資料結構的rehash功能,如果記憶體允許,請開啟。rehash能夠很大程度上提高K-V存取的效率
43
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
用戶端buffer控制。在用戶端與server進行的互動中,每個串連都會與一個buffer關聯,此buffer用來隊列化等待被client接受的響應資訊。如果client不能及時的消費響應資訊,那麼buffer將會被不斷積壓而給server帶來記憶體壓力.如果buffer中積壓的資料達到閥值,將會導致串連被關閉,buffer被移除。
buffer控制類型包括:normal -> 普通串連;slave ->與slave之間的串連;pubsub ->pub/sub類型串連,此類型的串連,往往會產生此種問題;因為pub端會密集的發布訊息,但是sub端可能消費不足.
指令格式:client-output-buffer-limit <class> <hard> <soft> <seconds>",其中hard表示buffer最大值,一旦達到閥值將立即關閉串連;
soft表示"容忍值",它和seconds配合,如果buffer值超過soft且期間達到了seconds,也將立即關閉串連,如果超過了soft但是在seconds之後,buffer資料小於了soft,串連將會被保留.
其中hard和soft都設定為0,則表示禁用buffer控制.通常hard值大於soft.
44 hz 10
Redis server執行背景工作的頻率,預設為10,此值越大表示redis對"間歇性task"的執行次數越頻繁(次數/秒)。"間歇性task"包括"到期集合"檢測、關閉"空閑逾時"的串連等,此值必須大於0且小於500。此值過小就意味著更多的cpu周期消耗,後台task被輪詢的次數更頻繁。此值過大意味著"記憶體敏感"性較差。建議採用預設值。
45
# include /path/to/local.conf
# include /path/to/other.conf
額外載入設定檔。
redis相關操作