您好,登錄后才能下訂單哦!
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)秀的地方)
redis可以用來做存儲(storge), 而memccached是用來做緩存(cache)
這個特點(diǎn)主要因為其有”持久化”的功能.
存儲的數(shù)據(jù)有”結(jié)構(gòu)”,對于memcached來說,存儲的數(shù)據(jù),只有1種類型--”字符串”,
而redis則可以存儲字符串,鏈表,哈希結(jié)構(gòu),集合,有序集合.
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 port 6379 logfile stdout logfile stdout |
REPLICATION | 復(fù)制 | slaveof <masterip> <masterport> #只在slave添加該參數(shù),用于創(chuàng)建一個鏡像服務(wù); masterauth <master-password> |
SNAPSHOTTING | 快照 將內(nèi)存中的數(shù)據(jù)刷寫到磁盤上 | save <seconds> <changes> 觸發(fā)刷新操作 stop-writes-on-bgsave-error yes rdbcompression yes dbfilename dump.rdb repl-timeout 60 |
SECURITY | 安全 | #requirepass foobared 配置redis訪問密碼的參數(shù) #rename-command 重命名或禁用某些命令 |
LIMITS | 限制 | maxclients 10000 #最大并發(fā)連接數(shù),默認(rèn)為一萬,這個跟系統(tǒng)本身的 open-file-limit 有關(guān) maxmemory <bytes> maxmemory-policy |
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-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)覆蓋,集群將停止接受寫入。 |
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
免責(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)容。