php與redis使用經驗分享
一、安裝
1、redis的下載及安裝:
引用
mkdir /usr/local/redis
cd /usr/local/redis
wget http://redis.googlecode.com/files/redis-2.4.2.tar.gz
tar xzf redis-2.4.2.tar.gz
cd redis-2.4.2
make
./src/redis-server
2、redis測試命令:
src/redis-cliredis> set foo barOKredis> get foo“bar”;
3、接下來需要進行redis配置:
引用
daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel verbose
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/var
slave-serve-stale-data yes
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
vm-enabled no
vm-swap-file /tmp/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
activerehashing yes
4、Redis中文配置文檔:
引用
1,是否以後台進程運行,預設為no,生產環境中肯定要設定成yes,並設定為自動啟動
daemonize no
2,如以後台進程運行,則需指定一個pid,預設為/var/run/redis.pid
pidfile /var/run/redis.pid
3,監聽連接埠,預設為6379
port 6379
4,綁定主機IP,預設值為127.0.0.1(注釋),生產環境中一般是內外網的IP
bind 127.0.0.1
5,逾時時間,預設為300(秒)
timeout 300
6,日誌記錄等級,有4個可選值,debug,verbose(預設值),notice,warning
loglevel verbose
7,日誌記錄方式,預設值為stdout
logfile stdout
8,可用資料庫數,預設值為16,預設資料庫為0
databases 16
9,指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案。這個可以多個條件配合,比如預設設定檔中的設定,就設定了三個條件。
900秒(15分鐘)內至少有1個key被改變
save 900 1
300秒(5分鐘)內至少有10個key被改變
save 300 10
10,儲存至本機資料庫時是否壓縮資料,預設為yes
rdbcompression yes
11,本機資料庫檔案名稱,預設值為dump.rdb
dbfilename /root/redis_db/dump.rdb
12,本機資料庫存放路徑,預設值為 ./
dir /root/redis_db/
13,當本機為從服務時,設定主服務的IP及連接埠(注釋)
slaveof
14,當本機為從服務時,設定主服務的串連密碼(注釋)
masterauth
15,串連密碼(注釋)
requirepass foobared
16,最大用戶端串連數,預設不限制(注釋)
maxclients 128
17,設定最大記憶體,達到最大記憶體設定後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理後,任到達最大記憶體設定,將無法再進行寫入操作。(注釋)
maxmemory
18,是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設值為no
appendonly yes
19,更新記錄檔名,預設值為appendonly.aof(注釋)
appendfilename /root/redis_db/appendonly.aof
20,更新日誌條件,共有3個可選值。no表示等作業系統進行資料緩衝同步到磁碟,always表示每次更新操作後手動調用fsync()將資料寫到磁碟,everysec表示每秒同步一次(預設值)。
appendfsync everysec
21,是否使用虛擬記憶體,預設值為no
vm-enabled yes
22,虛擬記憶體檔案路徑,預設值為/tmp/redis.swap,不可多個Redis執行個體共用
vm-swap-file /tmp/redis.swap
23,將所有大於vm-max-memory的資料存入虛擬記憶體,無論vm-max-memory設定多小,所有索引資料都是記憶體儲存的 (Redis的索引資料就是keys),也就是說,當vm-max-memory設定為0的時候,其實是所有value都存在於磁碟。預設值為0。
vm-max-memory 0
24,虛擬記憶體檔案以Block Storage,每塊32bytes
vm-page-size 32
25,虛擬內在檔案的最大數
vm-pages 134217728
26,可以設定訪問swap檔案的線程數,設定最好不要超過機器的核心數,如果設定為0,那麼所有對swap檔案的操作都是串列的.可能會造成比較長時間的延遲,但是對資料完整性有很好的保證.
vm-max-threads 4
27,把小的輸出緩衝放在一起,以便能夠在一個TCP packet中為用戶端發送多個響應,具體原理和真實效果我不是很清楚。所以根據注釋,你不是很確定的時候就設定成yes
glueoutputbuf yes
28,在redis 2.0中引入了hash資料結構。當hash中包含超過指定元素個數並且最大的元素沒有超過臨界時,hash將以一種特殊的編碼方式(大大減少記憶體使用量)來儲存,這裡可以設定這兩個臨界值
hash-max-zipmap-entries 64
29,hash中一個元素的最大值
hash-max-zipmap-value 512
30,開啟之後,redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低記憶體的使用。當你的使 用情境中,有非常嚴格的即時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這麼嚴格的即時性要求,可以設定 為yes,以便能夠儘可能快的釋放記憶體
activerehashing yes
5、php-Redis模組安裝:
如果你的機器上沒有phpize,則需要先安裝php-devel這個包
sudo apt-get install php-devel
引用
cd /usr/local/src
wget --no-check-certificate http://github.com/owlient/phpredis/tarball/master -O phpredis.tar.gz
tar zxvf phpredis.tar.gz
cd phpredis*
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
sudo make install
安裝完成以後重啟web服務
6、Redis的介面管理工具
一個PHP版的Redis WEB可視化管理軟體
這裡可以下載https://github.com/ErikDubbelboer/phpRedisAdmin/downloads
放到web目錄裡既可以訪問
7、php代碼的使用
$redis = new Redis();$redis->connect('127.0.0.1', 6379);$redis->set('key', 'val');echo $redis->get('key');