redis演練(1)搭建redis服務(wù)-創(chuàng)新互聯(lián)

Redis VS Memcached

創(chuàng)新互聯(lián)自成立以來(lái),一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、做網(wǎng)站、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開(kāi)發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開(kāi)發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

通過(guò)對(duì)比學(xué)習(xí),可以加深理解組件的特性。下面兩段文字,摘自各自的官方文檔。

http://www.redis.io/

http://memcached.org/

Redis官方簡(jiǎn)介

Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as       strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

Memcached官方簡(jiǎn)介

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.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page     rendering.

Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

兩者主要有以下區(qū)別(也是redis更優(yōu)秀的地方)

  1.  redis可以用來(lái)做存儲(chǔ)(storge), 而memccached是用來(lái)做緩存(cache)
     這個(gè)特點(diǎn)主要因?yàn)槠溆小背志没钡墓δ?

  2. 存儲(chǔ)的數(shù)據(jù)有”結(jié)構(gòu)”,對(duì)于memcached來(lái)說(shuō),存儲(chǔ)的數(shù)據(jù),只有1種類型--”字符串”,
     而redis則可以存儲(chǔ)字符串,鏈表,哈希結(jié)構(gòu),集合,有序集合.

  3. redis服務(wù)端支持高可用。

1.Redis安裝與啟動(dòng)

比memcached安裝還簡(jiǎn)單。

$ cd /usr/local/src
$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz
$ tar xzf redis-3.2.3.tar.gz
$ cd redis-3.2.3
#如果要執(zhí)行make test測(cè)試,需要安裝tcl
$ yum install tcl
$ make PREFIX=/usr/local/redis install
$ cp /usr/local/src/redis-3.2.3/redis.conf  /usr/local/redis/

工具列表

$ ls /usr/local/redis/bin/
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

redis-benchmark 性能測(cè)試工具

redis-check-aof 日志文件檢測(cè)工(比如斷電造成日志損壞,可以檢測(cè)并修復(fù))

redis-check-dump 快照文件檢測(cè)工具,效果類上

redis-cli  客戶端

redis-server 服務(wù)端

redis 版hello world

$ /usr/local/redis/bin/redis-server
$ /usr/local/redis/bin/redis-cli 
redis> set foo bar
OK
redis> get foo
"bar"

2.配置文件(redis.conf)

由于redis比memcached功能更全,命令更多,配置參數(shù)也響應(yīng)更多。簡(jiǎn)單分類下

模塊
作用
參數(shù)
 INCLUDES包含

 NETWORK
網(wǎng)絡(luò)

GENERAL
公共
daemonize no

#默認(rèn)情況下redis 不是以守護(hù)進(jìn)程的模式運(yùn)行。

pidfile /var/run/redis.pid
#在守護(hù)進(jìn)程模式下,pid進(jìn)程號(hào)文件路徑的存儲(chǔ)位置

port 6379
#監(jiān)聽(tīng)的端口號(hào),設(shè)置為0的話,redis不會(huì)對(duì)tcp 連接進(jìn)行監(jiān)聽(tīng)
loglevel notice
#記錄日志的級(jí)別

logfile stdout
#日志文件記錄位置, 如果采用daemonize 守護(hù)進(jìn)程的模式,且參數(shù)值為stdout,那logs會(huì)被重定向到/dev/null

logfile stdout
#日志文件記錄位置, 如果采用daemonize 守護(hù)進(jìn)程的模式,且參數(shù)值為stdout,那logs會(huì)被重定向到/dev/null
syslog-enabled no
#將日志信息記錄到 syslog 文件中。默認(rèn)不允許;
syslog-facility local0  (必須是 LOCAL 0 -- LOCAL 7)
作為syslog 的日志設(shè)備
databases 16
#數(shù)據(jù)庫(kù)的數(shù)量, select dbid ; dbid  取值范圍between 0 and 'databases'-1

REPLICATION復(fù)制
slaveof <masterip> <masterport>

#只在slave添加該參數(shù),用于創(chuàng)建一個(gè)鏡像服務(wù);

masterauth <master-password>
#如果master使用了requirepass參數(shù),slave就要使用上述參數(shù),進(jìn)行密碼驗(yàn)證。
slave-serve-stale-data yes
#當(dāng)slave丟失與master端的連接,或者復(fù)制仍在處理,那么slave會(huì)有下列兩種表現(xiàn):
 當(dāng)本參數(shù)值為yes時(shí),slave為繼續(xù)響應(yīng)客戶端請(qǐng)求,盡管數(shù)據(jù)已不同步甚至沒(méi)有數(shù)據(jù)(出現(xiàn)在初次同步的情況下);
 當(dāng)本參數(shù)值為no時(shí),slave會(huì)返回"SYNC with master in progreee"的錯(cuò)誤信息;
slave-read-only yes
# slave是可以寫(xiě)入的數(shù)據(jù)可以短暫存儲(chǔ),(會(huì)被master的數(shù)據(jù)同步掉);read only slave 并不是
暴漏給不信任的客戶端,對(duì)于master 傳過(guò)來(lái)的 administrative commands,可以用 rename-command 進(jìn)行隱藏。

repl-ping-slave-period 10
#slave根據(jù)指定的時(shí)間間隔向服務(wù)器發(fā)送ping請(qǐng)求,默認(rèn)10s

SNAPSHOTTING

快照

將內(nèi)存中的數(shù)據(jù)刷寫(xiě)到磁盤(pán)上

save <seconds>  <changes>

觸發(fā)刷新操作

stop-writes-on-bgsave-error yes
#默認(rèn)情況下,如果在RDB snapshots持久化過(guò)程中出現(xiàn)問(wèn)題,設(shè)置該參數(shù)后,Redis是不允許用戶進(jìn)行任何更新操作(set...)

rdbcompression yes
#在導(dǎo)出.RDB數(shù)據(jù)庫(kù)文件的時(shí)候采用LZF壓縮字符串和對(duì)象。想節(jié)省一些CPU資源可以設(shè)置為no,但數(shù)據(jù)量可能會(huì)很大。
rdbchecksum yes
#RDB快照制作過(guò)程中會(huì)在文件的末尾寫(xiě)入 crc64的校驗(yàn)值。這樣可能很好的保證數(shù)據(jù)的正確性。

dbfilename dump.rdb
# 快照文件名
dir ./
#DB工作目錄,必須是目錄名,dumpfile存儲(chǔ)的位置。

repl-timeout 60
#設(shè)置了大塊數(shù)據(jù)I/O、向master請(qǐng)求數(shù)據(jù)和ping響應(yīng)的過(guò)期時(shí)間,默認(rèn)60s,
確保這個(gè)值比 repl-ping-slave-period 大,否則master和slave之間的傳輸過(guò)期時(shí)間比預(yù)想的要短。
repl-disable-tcp-nodelay no
#默認(rèn)為no,當(dāng)選擇yes的時(shí)候, master會(huì)向slave發(fā)送少量的tcp packets,(當(dāng)然占用的帶寬是很少的)
這樣的一個(gè)負(fù)面影響 delay slave接受數(shù)據(jù)時(shí)間,40 milliseconds 的延遲,在 高流量或者 master slave之間中間節(jié)點(diǎn)數(shù)很多的情況
下,建議變?yōu)?yes
slave-priority 100
#該參數(shù)主要是在HA 方面的應(yīng)用, 優(yōu)先級(jí)越低,月可能成為master候選人

SECURITY安全

#requirepass foobared

配置redis訪問(wèn)密碼的參數(shù)

#rename-command

重命名或禁用某些命令

LIMITS限制
maxclients 10000

#大并發(fā)連接數(shù),默認(rèn)為一萬(wàn),這個(gè)跟系統(tǒng)本身的 open-file-limit 有關(guān)

maxmemory <bytes>
#大使用內(nèi)存;

maxmemory-policy
# 內(nèi)存策略:如果達(dá)到內(nèi)存限制了,Redis如何刪除key。你可以在下面五個(gè)策略里面選
volatile-lru -> 根據(jù)LRU算法生成的過(guò)期時(shí)間來(lái)刪除。
allkeys-lru -> 根據(jù)LRU算法刪除任何key。
volatile-random -> 根據(jù)過(guò)期設(shè)置來(lái)隨機(jī)刪除key。
allkeys->random -> 無(wú)差別隨機(jī)刪。
volatile-ttl -> 根據(jù)最近過(guò)期時(shí)間來(lái)刪除(輔以TTL)
noeviction -> 誰(shuí)也不刪,直接在寫(xiě)操作時(shí)返回錯(cuò)誤。
對(duì)所有策略來(lái)說(shuō),如果Redis找不到合適的可以刪除的key都會(huì)在寫(xiě)操作時(shí)返回一個(gè)錯(cuò)誤。
maxmemory-samples 3
#個(gè)人認(rèn)為該參數(shù)主要用于測(cè)試達(dá)到內(nèi)存大的時(shí)候的,現(xiàn)象吧。
LRU和最小TTL算法的實(shí)現(xiàn)都不是很精確,但是很接近(為了省內(nèi)存),可以用樣例做測(cè)試

APPEND ONLY MODE
appendfilename appendonly.aof
#append file 的文件名稱

appendfsync everysec
#append log AOF日志文件同步的頻率刷寫(xiě)磁盤(pán)的頻率
fsync() 請(qǐng)求操作系統(tǒng)馬上把數(shù)據(jù)寫(xiě)到磁盤(pán)上
Redis支持三種不同的模式:
no:不要立刻刷,只有在操作系統(tǒng)需要刷的時(shí)候再刷。比較快。
always:每次寫(xiě)操作都立刻寫(xiě)入到aof文件。慢,但是最安全。
everysec:每秒寫(xiě)一次。折衷方案。
默認(rèn)的 "everysec" 通常來(lái)說(shuō)能在速度和數(shù)據(jù)安全性之間取得比較好的平衡。

no-appendfsync-on-rewrite no
# 如果AOF的同步策略設(shè)置成 "always" 或者 "everysec",那么后臺(tái)的存儲(chǔ)進(jìn)程(后臺(tái)存儲(chǔ)或?qū)懭階OF日志)會(huì)產(chǎn)生很多磁盤(pán)I/O開(kāi)銷。
某些Linux的配置下會(huì)使Redis因?yàn)?fsync() 而阻塞很久。
目前對(duì)這個(gè)情況還沒(méi)有完美修正,甚至不同線程的 fsync() 會(huì)阻塞我們的 write(2) 請(qǐng)求。
為了緩解這個(gè)問(wèn)題,可以用下面這個(gè)選項(xiàng)。它可以在 BGSAVE 或 BGREWRITEAOF 處理時(shí)阻止 fsync()。
這就意味著如果有子進(jìn)程在進(jìn)行保存操作,那么Redis就處于"不可同步"的狀態(tài)。
這實(shí)際上是說(shuō),在最差的情況下可能會(huì)丟掉30秒鐘的日志數(shù)據(jù)。(默認(rèn)Linux設(shè)定)
如果有延遲的問(wèn)題那就把這個(gè)設(shè)為 "yes",否則就保持 "no",這是保存持久數(shù)據(jù)的最安全的方式。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#AOF文件自動(dòng)重寫(xiě)。
LUA SCRIPTING
LUA腳本

REDIS CLUSTER
集群

cluster-enabled

用于開(kāi)實(shí)例的集群模式

cluster-conf-file

設(shè)定了保存節(jié)點(diǎn)配置文件的路徑, 默認(rèn)值為 nodes.conf 。

cluster-node-timeout 15000

#節(jié)點(diǎn)互連超時(shí)的閥值

cluster-slave-validity-factor

slave節(jié)點(diǎn)檢測(cè)因數(shù),開(kāi)始failover的超時(shí)時(shí)限是通過(guò)factor與timeout的乘積來(lái)確定的。

 cluster-require-full-coverage <yes/no> : 如果某一些key space沒(méi)有被集群中任何節(jié)點(diǎn)覆蓋,集群將停止接受寫(xiě)入。
  cluster-migration-barrier <count>: 數(shù)據(jù)遷移的副本臨界數(shù),這個(gè)參數(shù)表示的是,一個(gè)主節(jié)點(diǎn)在擁有多少個(gè)好的從節(jié)點(diǎn)的時(shí)候就要割讓一個(gè)從節(jié)點(diǎn)出來(lái)給另一個(gè)沒(méi)有任何從節(jié)點(diǎn)的主節(jié)點(diǎn)。

 SLOW LOG日志
#Redis慢查詢?nèi)罩究梢杂涗洺^(guò)指定時(shí)間的查詢。運(yùn)行時(shí)間不包括各種I/O時(shí)間。
例如:連接客戶端,發(fā)送響應(yīng)數(shù)據(jù)等。只計(jì)算命令運(yùn)行的實(shí)際時(shí)間(這是唯一一種命令運(yùn)行線程阻塞而無(wú)法同時(shí)為其他請(qǐng)求服務(wù)的場(chǎng)景
slowlog-log-slower-than 10000(單位微秒)
#慢查詢?nèi)罩鹃L(zhǎng)度,這個(gè)長(zhǎng)度沒(méi)有限制。只要有足夠的內(nèi)存就行可以通過(guò) SLOWLOG RESET 來(lái)釋放內(nèi)存(當(dāng)一個(gè)新的命令被寫(xiě)進(jìn)日志的時(shí)候,最老的那個(gè)記錄會(huì)被刪掉。)。
slowlog-max-len 128
(ps:日志居然是在內(nèi)存里面的,)

對(duì)于虛擬內(nèi)存的使用,
### 警告!虛擬內(nèi)存在Redis 2.4是反對(duì)的。
### 非常不鼓勵(lì)使用虛擬內(nèi)存!!
在2.6中 根本沒(méi)有其相關(guān)配置,
 LATENCY MONITOR監(jiān)控報(bào)告
...
EVENT NOTIFICATION
通知,消息隊(duì)列
...
ADVANCED CONFIG高級(jí)
...



參考資源

http://weipengfei.blog.51cto.com/1511707/1217504

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:redis演練(1)搭建redis服務(wù)-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://muchs.cn/article46/djiohg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器Google、企業(yè)建站外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司