標籤:redis php擴充 使用者認證
一、Redis簡介
redis 是一個高效能的key-value資料庫。redis的出現,很大程度補償了memcached這類keyvalue儲存的不足,在部分場合可以對關聯式資料庫起到很好的補充作用。它跟memcached類似,不過資料可以持久化,而且支援的資料類型很豐富。有字串,鏈表,集合和有序集合。支援在伺服器端計算集合的並,交和補集(difference)等,還支援多種排序功能。所以Redis也可以被看成是一個資料結構伺服器。
Redis的所有資料都是儲存在記憶體中,然後不週期性通過非同步方式儲存到磁碟上(這稱為“半持久化模式”);也可以把每一次資料變化都寫入到一個append only file(aof)裡面(這稱為“全持久化模式”)。它提供Python,Ruby,Erlang,PHP用戶端,使用很方便。問題是這個項目還很新,可能還不足夠穩定,而且沒有在實際的一些大型系統應用的執行個體。此外,缺乏mc中批量get也是比較大的問題,始終批量擷取跟多次擷取的網路開銷是不一樣的。
二、Redis的安裝
官網地址:http://www.redis.io/
Redis:http://www.redis.io/download
1、編譯安裝
# wget http://download.redis.io/releases/redis-2.8.17.tar.gz# tar xf redis-2.8.17.tar.gz # cd redis-2.8.17# make# make test # make install
[[email protected] redis-2.8.17]# make testcd src && make testmake[1]: Entering directory `/root/redis/redis-2.8.17/src‘You need tcl 8.5 or newer in order to run the Redis testmake[1]: *** [test] 錯誤 1make[1]: Leaving directory `/root/redis/redis-2.8.17/src‘make: *** [test] 錯誤 2解決方案:http://www.linuxfromscratch.org/blfs/view/cvs/general/tcl.html////////////////////////沒有明白這個包為什麼會這麼安裝,那麼麻煩///////////////////////# tar xf tcl8.6.2-src.tar.gz # cd tcl8.6.2# export SRCDIR=`pwd` &&cd unix &&./configure --prefix=/usr --without-tzdata --mandir=/usr/share/man $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&make &&sed -e "s#$SRCDIR/unix#/usr/lib#" -e "s#$SRCDIR#/usr/include#" -i tclConfig.sh &&sed -e "s#$SRCDIR/unix/pkgs/tdbc1.0.1#/usr/lib/tdbc1.0.0#" -e "s#$SRCDIR/pkgs/tdbc1.0.1/generic#/usr/include#" -e "s#$SRCDIR/pkgs/tdbc1.0.1/library#/usr/lib/tcl8.6#" -e "s#$SRCDIR/pkgs/tdbc1.0.1#/usr/include#" -i pkgs/tdbc1.0.1/tdbcConfig.sh &&sed -e "s#$SRCDIR/unix/pkgs/itcl4.0.1#/usr/lib/itcl4.0.0#" -e "s#$SRCDIR/pkgs/itcl4.0.1/generic#/usr/include#" -e "s#$SRCDIR/pkgs/itcl4.0.1#/usr/include#" -i pkgs/itcl4.0.1/itclConfig.sh &&unset SRCDIR# make install &&make install-private-headers &&ln -v -sf tclsh8.6 /usr/bin/tclsh &&chmod -v 755 /usr/lib/libtcl8.6.so# mkdir -v -p /usr/share/doc/tcl-8.6.2 &&cp -v -r ../html/* /usr/share/doc/tcl-8.6.2////////////////////////////////////////////////////////////////////////////////////////////////
2、拷貝redis設定檔
# mkdir /etc/redis# cp /root/redis/redis-2.8.17/redis.conf /etc/redis/
3、建立redis服務啟動使用者
# useradd -s /sbin/nologin redis
4、簡單的修改常用的配置選項
# vim /etc/redis/redis.conf daemonize yes #redis以守護進程的方式運行,no表示不以守護進程的方式運行(會佔用一個終端)timeout 300 #用戶端閑置多長時間後中斷連線,預設為0關閉此功能loglevel verbose #設定redis記錄層級logfile stdout #設定記錄檔的輸出方式,如果以守護進程的方式運行redis並且日誌輸出設定為stdout,那麼日誌資訊就輸出到/dev/null裡面去了
5、提供redis的SysV指令碼
注意:用這個指令碼管理之前,需要先配置下面的核心參數,否則Redis指令碼在重啟或停止redis時,將會報錯,並且不能自動在停止服務前同步資料到磁碟上
# echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf此參數可用的值為0,1,20表示當使用者空間請求更多的記憶體時,核心嘗試估算出可用的記憶體1表示核心允許超量使用記憶體直到記憶體用完為止2表示整個記憶體位址空間不能超過swap+(vm.overcommit_ratio)%的RAM值# sysctl -p #立刻生效
# vim /etc/init.d/redis
#!/bin/bash # # Init file for redis # # chkconfig: - 80 12 # description: redis daemon # # processname: redis # config: /etc/redis.conf # pidfile: /var/run/redis.pid source /etc/init.d/functions#BIN="/usr/local/bin" BIN="/usr/local/bin"CONFIG="/etc/redis/redis.conf"PIDFILE="/var/run/redis.pid"### Read configuration [ -r "$SYSCONFIG" ] && source "$SYSCONFIG"RETVAL=0prog="redis-server"desc="Redis Server"start() { if [ -e $PIDFILE ];then echo "$desc already running...." exit 1 fi echo -n $"Starting $desc: " daemon $BIN/$prog $CONFIG RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog return $RETVAL}stop() { echo -n $"Stop $desc: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE return $RETVAL}restart() { stop start}case "$1" in start) start ;; stop) stop ;; restart) restart ;; condrestart) [ -e /var/lock/subsys/$prog ] && restart RETVAL=$? ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" RETVAL=1esacexit $RETVAL
增加為服務列表並設定開機啟動
# chmod +x /etc/init.d/redis # chkconfig --add redis# chkconfig --level 345 redis on
6、啟動redis服務
# redis-server# redis-server /etc/redis/redis.conf &# service redis start
7、查看redis服務監聽的地址和連接埠
# netstat -tnlp |grep redistcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 25350/redis-server
三、用戶端測試Redis服務
第一種方法:通過redis用戶端命令redis-cli# redis-cli # redis-cli -h 192.168.1.127 -p 6379127.0.0.1:6379> set name zhengyanshengOK127.0.0.1:6379> get name"zhengyansheng"127.0.0.1:6379> quit# redis-cli set mykey ‘hello world!‘OK# redis-cli get mykey"hello world!"# redis-cli type mykeystring# redis-cli strlen mykey(integer) 12
第二種方法:通過telnet方法# telnet 127.0.0.1 6379Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is ‘^]‘.set test "Welcome to BeiJing." +OKget test$19Welcome to BeiJing.strlen test:19quit+OKConnection closed by foreign host.
四、phpredis擴充安裝
1、下載phpredis擴充包
wget https://github.com/nicolasff/phpredis/archive/master.zip
2、安裝phpredis擴充
# unzip phpredis-master.zip # cd phpredis-master# /usr/local/php/bin/phpize # ./configure --with-php-config=/usr/local/php/bin/php-config # make # make install
#安裝完成後會輸出一下資訊,提示redis.so產生的目錄路徑Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
3、添加redis擴充
# vim /usr/local/php/etc/php.ini 添加一行extension = "redis.so"
4、重啟nginx服務
# service nginx restart
5、訪問phpinfo查看redis擴充的詳細資料
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/4C/7E/wKiom1Q-gEeB_aOQAABpXOd0WbI218.jpg" title="1.png" alt="wKiom1Q-gEeB_aOQAABpXOd0WbI218.jpg" />
四、Redis的使用者認證
redis沒有實現存取控制這個功能,但是它提供了一個輕量級的認證方式,可以編輯redis.conf配置來啟用認證。
Redis的使用者認證有兩種方法
1、臨時的使用者認證口令
2、永久的使用者認證口令
臨時設定Redis使用者認證,重新啟動Redis服務後就會失效[[email protected] ~]# redis-cli 127.0.0.1:6379> config set requirepass zhengyanshengOK127.0.0.1:6379> config get requirepass(error) NOAUTH Authentication required.127.0.0.1:6379> auth zhengyanshengOK127.0.0.1:6379> config get requirepass1) "requirepass"2) "zhengyansheng"127.0.0.1:6379> quit#重啟Redis服務[[email protected] ~]# service redis restartStop Redis Server: [確定]Starting Redis Server: [確定]#再次認證是否還要認證?[[email protected] ~]# redis-cli127.0.0.1:6379> set name tomcatOK127.0.0.1:6379> get name"tomcat"127.0.0.1:6379> quit
永久設定Redis使用者,重啟動Redis服務後依然生效1、設定Redis密碼# vim /etc/redis/redis.conf requirepass zhengyansheng132600719872、重新載入Redis服務# service redis restart3、登陸Redis訪問測試# redis-cli 127.0.0.1:6379> set name zhengyansheng(error) NOAUTH Authentication required. #錯誤:提示沒有認證通過127.0.0.1:6379> auth zhengyansheng13260071987 #採用認證方式OK127.0.0.1:6379> set name zhengyanshengOK127.0.0.1:6379> get name"zhengyansheng"127.0.0.1:6379> quit
五、與Memcache的比較
memcache和redis都是記憶體型資料庫,資料儲存在記憶體中,通過tcp直接存取,memcached優勢是速度快,並發高,缺點是資料類型有限,查詢功能不強,一般用作緩衝。在我們團隊的項目中,一開始用的是memcached,後來用redis替代。
相比memcached:
1、redis具有持久化機制,可以定期將記憶體中的資料持久化到硬碟上。
2、redis具備binlog功能,可以將所有操作寫入日誌,當redis出現故障,可依照binlog進行資料恢複。
3、redis支援virtual memory,可以限定記憶體使用量大小,當資料超過閾值,則通過類似LRU的演算法把記憶體中的最不常用資料儲存到硬碟的分頁檔中。
4、redis原生支援的資料類型更多,使用的想象空間更大。
5、前面有位朋友所提及的一致性雜湊,用在redis的sharding中,一般是在負載非常高需要水平擴充時使用。我們還沒有用到這方面的功能,一般的項目,單機足夠支撐並發了。redis 3.0將推出cluster,功能更加強大
六、redis-clie的命令列參數
SET 建立一個key;GET 擷取一個key的值;DEL ***一個key;TYPE 擷取一個key的類型;EXISTS 判斷一個key是否存在,0:存在,1,不存在;KEYS 擷取給定模糊比對的key;EXPIRE 設定一個key到期的秒數;PERSTST ***一個key到期的秒數;PEXPIRE 設定一個key到期的毫秒數;RENAME 將一個key重新命名;RENAMENX 將一個key重新命名,且新的key必須是不存在的可以;TTL 擷取key的有效時間;
本文出自 “鄭彥生” 部落格,請務必保留此出處http://467754239.blog.51cto.com/4878013/1564581
第一天Redis安裝配置