溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis演練(1) 搭建redis服務(wù)

發(fā)布時間:2020-07-14 18:50:51 來源:網(wǎng)絡(luò) 閱讀:846 作者:randy_shandong 欄目:開發(fā)技術(shù)

Redis VS Memcached

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

http://www.redis.io/

http://memcached.org/

Redis官方簡介

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官方簡介

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可以用來做存儲(storge), 而memccached是用來做緩存(cache)
      這個特點(diǎn)主要因為其有”持久化”的功能.

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

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

1.Redis安裝與啟動

比memcached安裝還簡單。

$ 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測試,需要安裝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  性能測試工具

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

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

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)更多。簡單分類下

模塊
作用
參數(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)程號文件路徑的存儲位置

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

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

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

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

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

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

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

SNAPSHOTTING

快照

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

save <seconds>  <changes>

觸發(fā)刷新操作

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

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

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

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

SECURITY安全

#requirepass foobared

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

#rename-command

重命名或禁用某些命令

LIMITS限制
maxclients 10000

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

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

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

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

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

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

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#AOF文件自動重寫。
LUA SCRIPTING 
LUA腳本

REDIS CLUSTER 
集群

cluster-enabled

用于開實例的集群模式

cluster-conf-file

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

cluster-node-timeout 15000

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

cluster-slave-validity-factor

slave節(jié)點(diǎn)檢測因數(shù),開始failover的超時時限是通過factor與timeout的乘積來確定的。

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

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

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




參考資源

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


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI