標籤:des class blog java http tar
memcache和redis區別2014年4月27日mood暫無評論
memcache官方定義
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
redis官方定義
Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
著作權相同
它們都是使用的bsd協議,使用它的項目可以用於商業使用者,不必發布二次修改的代碼,可以修改原始碼。
資料類型
redis資料類型豐富,支援set liset等類型
memcache支援單一資料型別,需要用戶端自己處理複雜物件
持久性
redis支援資料落地持久化儲存
memcache不支援資料持久儲存
分布式儲存
redis支援master-slave複製模式
memcache可以使用一致性hash做分布式
value大小不同
memcache是一個記憶體緩衝,key的長度小於250字元,單個item儲存要小於1M,不適合虛擬機器使用
資料一致性不同
redis使用的是單執行緒模式,保證了資料按順序提交。
memcache需要使用cas保證資料一致性。CAS(Check and Set)是一個確保並發一致性的機制,屬於“樂觀鎖”範疇;原理很簡單:拿版本號碼,操作,對比版本號碼,如果一致就操作,不一致就放棄任何操作
cpu利用
redis單執行緒模式只能使用一個cpu,可以開啟多個redis進程
參考
http://www.cnblogs.com/qunshu/p/3196972.html
http://www.blogjava.net/chhbjh/archive/2012/02/21/370472.html
http://maoyidao.iteye.com/blog/1846089
分類:redis標籤:memcache, redisredis和redis php擴充安裝2013年5月29日mood1條評論
redis是一個記憶體資料庫,比memcache支援更豐富的value類型,新浪微博就使用redis來做緩衝。
redis的源碼安裝
wget http://download.redis.io/redis-stable.tar.gztar -zxvf redis-stable.tar.gzcd redis-stablemakemake testmake install
1.make時可能會報如下錯誤:
zmalloc.o: In function `zmalloc_used_memory‘:/root/redis-stable/src/zmalloc.c:223: undefined reference to `__sync_add_and_fetch_4‘collect2: ld returned 1 exit statusmake[1]: *** [redis-server] Error 1make[1]: Leaving directory `/root/redis-stable/src‘make: *** [all] Error 2
解決辦法:
編輯src/.make-settings裡的OPT,改為OPT=-O2 -march=i686。
2.make test報錯:
You need tcl 8.5 or newer in order to run the Redis testmake: *** [test] Error 1
解決辦法安裝tcl
wget http://downloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gzcd tcl8.6.0/cd unix &&./configure --prefix=/usr --mandir=/usr/share/man --without-tzdata $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&make &&sed -e "[email protected]^\(TCL_SRC_DIR=‘\).*@\1/usr/include‘@" -e "/TCL_B/[email protected]=‘\(-L\)\?.*[email protected]=‘\1/usr/[email protected]" -i tclConfig.shmake install &&make install-private-headers &&ln -v -sf tclsh8.6 /usr/bin/tclsh &&chmod -v 755 /usr/lib/libtcl8.6.so
redis命令介紹
Redis 由四個可執行檔:redis-benchmark、redis-cli、redis-server、redis-stat 這四個檔案,加上一個redis.conf就構成了整個redis的最終可用包。它們的作用如下:
redis-server:Redis伺服器的daemon啟動程式
redis-cli:Redis命令列操作工具。當然,你也可以用telnet根據其純文字協議來操作
redis-benchmark:Redis效能測試工具,測試Redis在你的系統及你的配置下的讀寫效能
redis-stat:Redis狀態偵查工具,可以檢測Redis目前狀態參數及延遲狀況
現在就可以啟動redis了,redis只有一個啟動參數,就是他的設定檔路徑。
啟動redis
複製源碼包裡的redis.conf到/etc
# cd redis-stable
# cp redis.conf /etc/redis.conf
編輯/etc/redis.conf ,修改
daemaon no 為daemaon yes ,以守護進程方式啟動進程。
# redis-server /etc/redis.conf
關閉redis
# redis-cli shutdown //關閉所有
關閉某個連接埠上的redis
# redis-cli -p 6397 shutdown //關閉6397連接埠的redis
說明:關閉以後快取資料會自動dump到硬碟上,硬碟地址見redis.conf中的dbfilename dump.rdb
redis配置
注意,預設複製過去的redis.conf檔案的daemonize參數為no,所以redis不會在後台運行,這時要測試,我們需要重新開一個終端。修改為yes則為後台運行redis。另外設定檔中規定了pid檔案,log檔案和資料檔案的地址,如果有需要先修改,預設log資訊定向到stdout.
下面是redis.conf的主要配置參數的意義:
daemonize:是否以後台daemon方式運行
pidfile:pid檔案位置
port:監聽的連接埠號碼
timeout:請求逾時時間
loglevel:log資訊層級
logfile:log檔案位置
databases:開啟資料庫的數量
save * *:儲存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動儲存快照。可設定多個條件。
rdbcompression:是否使用壓縮
dbfilename:資料快照檔案名稱(只是檔案名稱,不包括目錄)
dir:資料快照的儲存目錄(這個是目錄)
appendonly:是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高資料抗風險能力,但影響效率。
appendfsync:appendonlylog如何同步到磁碟(三個選項,分別是每次寫都強制調用fsync、每秒啟用一次fsync、不調用fsync等待系統自己同步)
這時你可以開啟一個終端進行測試了,設定檔中預設的監聽連接埠是6379
redis開機自動啟動
用這個指令碼管理之前,需要先配置下面的核心參數,否則Redis指令碼在重啟或停止redis時,將會報錯,並且不能自動在停止服務前同步資料到磁碟上:
# vi /etc/sysctl.conf
vm.overcommit_memory = 1
然後應用生效:
# sysctl –p
建立redis啟動指令碼:
# 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.conf" PIDFILE="/var/run/redis.pid" ### Read configuration [ -r "$SYSCONFIG" ] && source "$SYSCONFIG" RETVAL=0 prog="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=1 esac exit $RETVAL
然後增加服務並開機自啟動:
# chmod 755 /etc/init.d/redis # chkconfig --add redis # chkconfig --level 345 redis on # chkconfig --list redis
redis php擴充安裝
wget https://github.com/nicolasff/phpredis/zipball/master -O php-redis.zip
unzip php-redis.zip
cd nicolasff-phpredis-2d0f29b/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
完成後redis.so被安裝到
/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
vi /usr/local/php/lib/php.ini
添加
extension=redis.so
重啟php-fpm即可。
configure時可能會遇到,添加--with-php-config參數可以解決。
configure: error: Cannot find php-config. Please use --with-php-config=PATH
./configure --with-php-config=/usr/local/php/bin/php-config
分類:redis標籤:redis, 啟動, 安裝, 擴充