技術調研評估報告_Redis_第1頁
技術調研評估報告_Redis_第2頁
技術調研評估報告_Redis_第3頁
技術調研評估報告_Redis_第4頁
技術調研評估報告_Redis_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、confidentialiflytek, 1999-2011 page 1 of 10 技術調研評估報告版本 redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 2 of 10 修訂歷史記錄日期版本說明作者redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 3 of 10 目錄1.引言 . 41.1目的 . 41.2背景 . 41.3定義 . 41.4參考資料 . 41.5過程簡介 . 41.5.1對象 . 41.5.2工期 . 42.

2、調研過程 . 42.1準備工作 . 42.1.1操作系統(tǒng) . 42.1.2linux常用命令熟悉 . 42.2技術選型: redis. 42.2.1redis的特點. 42.2.2redis與memcache比較. 52.2.3redis的適用場景. 52.3redis及相關環(huán)境搭建. 52.3.1redis安裝配置. 52.3.2lamp和phpreidsadmin搭建 . 82.4redis性能測試 . 102.5redis優(yōu)化 . 102.5.1分區(qū):redis-sharding . 102.5.2調整系統(tǒng)內核參數(shù) . 102.5.3虛擬內存 . 102.5.4虛擬內存 . 錯誤!未定義

3、書簽。3.調研結果評估 . 104.后續(xù)工作 . 104.1建議 . 104.2評價 . 10redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 4 of 10 技術調研評估報告1. 引言1.1目的技術選型:為什么選擇redis ;redis 及相關環(huán)境的搭建;redis 性能測試。1.2背景ossp消息推送對sql server造成很大壓力,優(yōu)化時進行技術選型。1.3定義1.4參考資料redis 官網(wǎng): http:/www.redis.io/nosqlfan:http:/ 計劃完成時間2012-09-19實際完成

4、時間2012-09-212.調研過程2.1準備工作2.1.1操作系統(tǒng)centos 6.0 64位。2.1.2linux 常用命令熟悉cd,chrgp,chown,find,configure,mkdir,rm,tar,wget,yum,make&make install。2.2技術選型: redis 2.2.1redis 的特點性能高: redis 能支持超過100k+每秒的讀寫頻率。豐富的數(shù)據(jù)類型:redis 支持二進制的strings,lists,hashes,sets及 ordered sets數(shù)據(jù)類型操作。原子: redis 的所有操作都是原子性的,同時redis 還支持幾個操

5、作全并后的原子性操作。事務: redis 支持簡單的事務,但是并不保證acid 性質,只是一些基本的命令打包執(zhí)行。提redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 5 of 10 供的 watch 功能能夠對一個key 進行 watch, 然后執(zhí)行transcation,在這個過程中如果,如果watachd 的值發(fā)生了變化,那么transcation會發(fā)現(xiàn)并拒絕執(zhí)行。豐富的特性:redis 還支持 publish/subcrible,通知, key 過期等特性。單線程: redis 使用的是單線程的io 復用模

6、型,無法有效的利用多核心服務器。2.2.2redis 與 memcached 比較1 redis 是單線程, memcached是多線程。單線程不能發(fā)揮多核的優(yōu)勢,但memcached的多線程也會帶來其他一些問題,比如cache coherency和鎖的問題,從而影響性能。2 memcached使用預分配的內存池,redis 使用現(xiàn)場申請內存的方式來存儲數(shù)據(jù)。3 memcached不支持持久化和復制功能。redis 支持數(shù)據(jù)保持在硬盤中,重啟的時候可以再次加載使用。redis 的持久化參見: http:/ memcached提供了 cas 命令,可以保證多個并發(fā)操作同一份數(shù)據(jù)的一致性問題。re

7、dis 沒有提供類似的命令。5 memcached只支持簡單的key-value存儲, redis 支持更復雜的數(shù)據(jù)類型,可以把redis 理解為一個數(shù)據(jù)結構服務器。6 redis 除了提供存儲之外相比memcached提供了更多的特性。比如聚合計算,pubsub,scripting等。7 redis 支持數(shù)據(jù)備份,即master-slave模式的數(shù)據(jù)備份。8 在 redis 中并不是所有的數(shù)據(jù)都存在內存中,這是和memcached相比一個最大的去區(qū)別。redis 只會緩存所有key 信息。如果redis 發(fā)現(xiàn)內存的使用量超過一定的閾值,將觸發(fā)swap 操作,將內存中的數(shù)據(jù)swap 到硬盤中去

8、。9 redis 支持批量的插入和讀取。2.2.3redis 的適用場景1 redis 使用最佳方式是全部數(shù)據(jù)in-memory,對于少量的數(shù)據(jù),高速讀寫訪問。同時提供數(shù)據(jù)落地功能。2 redis 更多的使用場景是作為memcached的替代者來使用的。3 當需要除key/value之外更多數(shù)據(jù)類型支持的時候,使用redis 更合適。4 當存儲數(shù)據(jù)不能被剔除的時候,使用redis 更適合。2.2.4redis 在項目中的使用場景1.消息系統(tǒng)中采用redis 存儲選取后的系統(tǒng)消息。redis 支持的批量存儲和讀取比較適合接口在讀取要求。2.灰度控制中將權限信息存儲在redis 中。2.3redi

9、s 及相關環(huán)境搭建2.3.1redis 安裝配置1.下載 redis 最新版本 2.2.14( 讀者自己選擇版本 ) rootlocalhost # cd /usr/local/src rootlocalhost # wget http:/ 2.編譯安裝 redis rootlocalhost # tar xvzf xzvf redis-2.2.14.tar.gz /解壓rootlocalhost # cd redis-2.2.14 rootlocalhost # make make命令執(zhí)行完成后,會在src 目錄下生成5 個可執(zhí)行文件,分別是redis-server、redis-cli 、r

10、edis-benchmark、redis-check-aof、 redis-check-dump,它們的作用如下: redis-server:redis服務器 daemon啟動程序。redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 6 of 10 redis-cli:redis命令行操作工具。當然你也可以用telnet根據(jù)其純文本協(xié)議操作。redis-benchmark:redis性能測試工具,測試redis 在你的系統(tǒng)及你的配置下的讀寫性能。redis-check-aof:更新日志檢查。redis-check-

11、dump:用于本地數(shù)據(jù)檢查。rootlocalhost # make prefix=/usr/local install /安裝3.配置 redis rootlocalhost # mkdir /etc/redis rootlocalhost # cp redis.conf /etc/redis/redis.conf rootlocalhost # mkdir /var/lib/redis 4.redis-conf配置參數(shù)#是否作為守護進程運行daemonize yes #如以后臺進程運行,則需指定一個pid ,默認為 /var/run/redis.pid pidfile redis.pid

12、#綁定主機ip ,默認值為 #bind #redis 默認監(jiān)聽端口port 6379 #客戶端閑置多少秒后,斷開連接,默認為300(秒)timeout 300 #日志記錄等級,有4 個可選值, debug,verbose (默認值),notice,warning loglevel verbose #指定日志輸出的文件名,默認值為stdout ,也可設為 /dev/null屏蔽日志logfile stdout #可用數(shù)據(jù)庫數(shù),默認值為16,默認數(shù)據(jù)庫為0 databases 16 #保存數(shù)據(jù)到disk 的策略#當有一條keys 數(shù)據(jù)被改變是,900 秒刷新到

13、disk一次save 900 1 #當有 10 條 keys 數(shù)據(jù)被改變時,300 秒刷新到disk 一次save 300 10 #當有 1w 條 keys 數(shù)據(jù)被改變時,60 秒刷新到disk一次save 60 10000 #當 dump .rdb數(shù)據(jù)庫的時候是否壓縮數(shù)據(jù)對象rdbcompression yes #本地數(shù)據(jù)庫文件名,默認值為dump.rdb dbfilename dump.rdb #本地數(shù)據(jù)庫存放路徑,默認值為 ./ dir /var/lib/redis/ # replication # #redis 的復制配置# slaveof 當本機為從服務時,設置主服務的ip 及端口#

14、 masterauth 當本機為從服務時,設置主服務的連接密碼#連接密碼# requirepass foobared #最大客戶端連接數(shù),默認不限制# maxclients 128 #最大內存使用設置,達到最大內存設置后,redis 會先嘗試清除已到期或即將到期的key,當redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 7 of 10 此方法處理后,任到達最大內存設置,將無法再進行寫入操作。# maxmemory #是否在每次更新操作后進行日志記錄,如果不開啟,可能會在斷電時導致一段時間內的數(shù)據(jù)丟失。因為red

15、is本身同步數(shù)據(jù)文件是按上面save 條件來同步的,所以有的數(shù)據(jù)會在一段時間內只存在于內存中。默認值為no appendonly no #更新日志文件名,默認值為appendonly.aof #appendfilename #更新日志條件,共有3 個可選值。 no 表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤,always 表示每次更新操作后手動調用fsync()將數(shù)據(jù)寫到磁盤,everysec表示每秒同步一次(默認值)。# appendfsync always appendfsync everysec # appendfsync no # virtual memory # #是否開啟vm功能,默認值

16、為no vm-enabled no # vm-enabled yes #虛擬內存文件路徑,默認值為/tmp/redis.swap,不可多個redis 實例共享vm-swap-file /tmp/redis.swap #將所有大于vm-max-memory 的數(shù)據(jù)存入虛擬內存, 無論 vm-max-memory 設置多小 , 所有索引數(shù)據(jù)都是內存存儲的 (redis的索引數(shù)據(jù)就是keys),也就是說 , 當 vm-max-memory 設置為 0 的時候, 其實是所有value 都存在于磁盤。默認值為0。vm-max-memory 0 vm-page-size 32 vm-pages 13421

17、7728 vm-max-threads 4 # advanced config # glueoutputbuf yes hash-max-zipmap-entries 64 hash-max-zipmap-value 512 #是否重置hash 表activerehashing yes 2.3.2運行多個 redis 實例一臺 redis 服務器,分成多個節(jié)點,每個節(jié)點分配一個端口(6380,6381, ),默認端口是6379。每個節(jié)點對應一個redis 配置文件,如: redis6380.conf、redis6381.conf 啟動多個redis實例:注意: 如果配置文件和啟動的redis

18、版本不匹配會解析配置文件失敗無法啟動。redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 8 of 10 2.3.3lamp 和 phpreidsadmin搭建1 lamp 環(huán)境搭建。首先配置防火墻,開啟80 端口、 3306 端口:vi /etc/sysconfig/iptables -a input -m state -state new -m tcp -p tcp -dport 80 -j accept(允許 80 端口通過防火墻)-a input -m state -state new -m tcp -p

19、tcp -dport 3306 -j accept(允許 3306 端口通過防火墻)重啟防火墻使配置生效/etc/init.d/iptables restart service iptables restart 1)安裝 apache。采用 yum安裝。rootlocalhost # yum install httpd httpd-devel rootlocalhost # chkconfig httpd -level 2345 on /設置 apache 為開機啟動項。rootlocalhost # service httpd start /啟動 apache 默認目錄為 /var/www/

20、html 配置文件路徑為/etc/httpd/conf/httpd.conf 訪問 apache 所在務器地址看是否安裝成功。如果訪問不了的話看防火墻是否關閉:service iptables stop。如果安裝過程出現(xiàn)什么問題,參見下面的遇到問題及解決方法。2)安裝 mysql 。采用 yum安裝。rootlocalhost # yum install mysql-server mysql rootlocalhost # mysql_secure_installation 出現(xiàn)要求密碼的提示直接回車,出現(xiàn)要求設置密碼的提示的時候,設置密碼。rootlocalhost # cp /etc/in

21、it.d/mysqld /etc/init.d/mysqld /將 mysql 設為服務。rootlocalhost # service httpd start /啟動 mysql rootlocalhost # mysql u root p 123 /使用用戶名和密碼登陸mysql 。3)安裝 php 。yum安裝。rootlocalhost # yum install php php-devel php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-

22、mcrypt php-bcmath php-mhash libmcrypt /安裝 php 和相應的php 擴展。rootlocalhost # service httpd restart /重啟 apache rootlocalhost # vi /var/www/html/info.php 輸入: 在瀏覽器中訪問info.php。出現(xiàn) php 信息,說明php 和 apache 安裝成功。2 安裝 phpredisadmin。phpredisadmin是一個基于 php的 redis 圖形界面客戶端。1)安裝 php的 redis 擴展。源碼安裝。rootlocalhost # cd /u

23、sr/local/src rootlocalhost # wget https:/ rootlocalhost # tar zxvf owlient-phpredis-2.1.1-1-g90ecd17.tar.gz rootlocalhost # cd owlient-phpredis-90ecd17 rootlocalhost # /usr/bin/phpize /phpize用來擴展php rootlocalhost # ./configure -with-php-config=/etc /yum安裝 php 默認配置文件在/etc(如果遇到bash . /configurepermiss

24、iondenied錯誤,在當前目錄運行chmod redis version: 技術調研評估報告 date: confidentialiflytek, 1999-2011 page 9 of 10 +x ./configure,如果提示找不到php 配置文件,直接在/etc目錄下手動創(chuàng)建php.ini) rootlocalhost # make & make install rootlocalhost # vi /etc/php.ini /修改 php 配置文件添加一行: extension=redis.so rootlocalhost # service httpd restart

25、/重啟 apache 在瀏覽器打開info.php看 php是否已經支持redis 。為了進一步驗證可以寫個redis php測試頁面:rootlocalhost # vi /var/www/html/redis.php 輸入:connect(3,6379); $redis-set(test,hello redis word!); echo $redis-get(test); ? 訪問瀏覽器看到“hello redis word!”說明 redis 擴展安裝成功。2)安裝 phpredisadmin 。rootlocalhost # cd /var/www/html r

26、ootlocalhost # git clone https:/ # cd phpredisadmin rootlocalhost # git submodule init rootlocalhost # git submodule update rootlocalhost # service httpd restart /重啟 apache 訪問: 3/phpredisadmin驗證 phpredisadmin 是否安裝成功。3 遇到的問題及解決方法1)在安裝 apache 的時候先是通過yum安裝然后又通過源碼安裝,后來又要卸掉apache 重裝。源碼安裝的我是直接

27、刪除安裝目錄 /usr/local/apache2。然后通過yum remove httpd來刪除yum安裝的 apache,提示刪除成功,但是我再用yum install httpd想驗證下我有沒有真的刪除掉的時候,系統(tǒng)又總是提示我已經安裝過apache 。yum安裝的一個不好的地方就是我不知道到底安裝量哪些文件,安裝的文件在哪個目錄,所以一個個刪除文件不現(xiàn)實。最后網(wǎng)上查到可以用 rpm -qa|grep httpd查看安裝了哪些apache 依賴的 rpm 包:httpd-tools-2.2.15-15.el6.centos.1.x86_64 httpd-2.2.15-15.el6.cen

28、tos.1.x86_64 然后用 rpm -e來刪除這些依賴項,但這時候又出現(xiàn)問題了,系統(tǒng)出錯提示如下:error reading information on service httpd: no such file or directory error: %preun(httpd-2.2.15-15.el6.centos.1.x86_64) scriptlet failed, exit status 1 這時候可以在rpm 后加個參數(shù) noscripts,通過 rpm -e -noscripts刪除掉了上面的兩個包,最后成功卸載掉了apache 。2)在用 yum安裝 mysql 的時候,進

29、行到mysql_secure_installation時候出現(xiàn)了下面的錯誤提示: cant connect to local mysql server through socket /var/lib/mysql/mysql.sock (2) 。這個錯誤的提示是說,不能通過/tmp/mysql.sock連接到服務器。mysql.sock是創(chuàng)建與 mysqld 服務器相關的mysql通信端點所使用的套接字。而php標準配置正是通過/tmp/mysql.sock來連接數(shù)據(jù)庫,可能是一些mysql 的安裝方法將mysql.sock放到了別的地方,可以通過修改/etc/mysql/f文件(或者 /etc/my.conf文件,和 mysql 安裝的方法有關,該配置文件的路徑可能會有所不同)來修改它,打開文件可以看到如下的語句:/tmp/mysql.sock,在這個路徑下也的確存在mysql.sock但是運行mysql_secure_installation 時候查找的路徑卻是/var/lib/mys

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論