REDIS安裝與配置

圖1解說(shuō):

當(dāng)客戶端調(diào)用getUser接口的查詢用戶信息的時(shí)候,執(zhí)行順序1、2、3、4;由于用戶信息存放在DB中,所以2、3就有一次磁盤(pán)IO;這個(gè)看似非常簡(jiǎn)單業(yè)務(wù)邏輯,但是當(dāng)你做架構(gòu)設(shè)計(jì)的時(shí)候往往要考慮最壞的場(chǎng)景,或者當(dāng)成千上萬(wàn)的用戶頻繁的調(diào)用這個(gè)接口應(yīng)該怎么處理?如果按照上圖這樣的架構(gòu)處理,這個(gè)看似簡(jiǎn)單業(yè)務(wù)的接口會(huì)使整個(gè)系統(tǒng)變慢,這樣用戶的請(qǐng)求就會(huì)長(zhǎng)時(shí)間得不到響應(yīng).



圖2解說(shuō):

當(dāng)用客戶端調(diào)用getUser接口查詢用戶信息的時(shí)候,getUser接口直接去redis中查詢,如果redis中有該用戶信息,直接返回,避免查詢DB,從而避免了磁盤(pán)IO操作;如果redis中沒(méi)有該用戶信息,則從DB查詢,并且把該用戶信息存放到redis中;這樣在服務(wù)接口(getUser)和DB中間,增加了一個(gè)緩存層;看似邏輯增加了,其實(shí)當(dāng)面對(duì)高并發(fā)的時(shí)候,比如上邊提到的頻繁查詢用戶信息的情況,只有第一次查詢有磁盤(pán)IO操作,以后只要redis中存在就沒(méi)必要再查詢數(shù)據(jù)庫(kù)了;由于沒(méi)有了磁盤(pán)IO操作,并且redis所有數(shù)據(jù)都在內(nèi)存操作,所以速度回大大提升。


redis相對(duì)于memcache提供了更豐富的數(shù)據(jù)類型,根據(jù)不同的業(yè)務(wù)場(chǎng)景可以選在不同的數(shù)據(jù)類型;redis本身也提供了主從模式、集群模式;也有第三方的比如codis提供了redis集群解決方案。


下載說(shuō)明:

在https://redis.io/download下載需要的redis版本,目前5.0版本是比較穩(wěn)定的,4.0版本目前是經(jīng)過(guò)生產(chǎn)驗(yàn)證最多的版本


下載完后,復(fù)制到要安裝的機(jī)器上進(jìn)行以下操作:

(1.解壓安裝包:

[root@mini ~]# tar xf redis-4.0.11.tar.gz -C /usr/local? ? ///解壓到你指定的路徑


(2.進(jìn)入解壓的文件中編譯安裝:

[root@mini ~]# cd /usr/local/redis-4.0.11/

[root@mini redis-4.0.11]# make -j 4? ? ?///4表示cpu數(shù),實(shí)際據(jù)服務(wù)器配置決定


問(wèn)題:

redis編譯報(bào)致命錯(cuò)誤:jemalloc/jemalloc.h:沒(méi)有那個(gè)文件或目錄

解決:編譯時(shí)加一個(gè)參數(shù):

make MALLOC=libc


(3.啟動(dòng)服務(wù):

[root@mini redis-4.0.11]# ./src/redis-server /usr/local/redis-4.0.11/redis.conf &? //注意安裝路徑

圖3出現(xiàn)界面說(shuō)明安裝成功了

(4.打開(kāi)操作界面:

[root@mini redis-4.0.11]# ./src/redis-cli -h 172.0.0.0.1? ? ? ?////后面寫(xiě)本機(jī)ip



(5.配置文件:

[root@mini redis-4.0.11]# vim /usr/local/redis-4.0.11/redis.conf

# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.

daemonize yes

# 默認(rèn)情況下 redis 不是作為守護(hù)進(jìn)程運(yùn)行的,如果你想讓它在后臺(tái)運(yùn)行,你就把它改成 yes。

# nothing bad happens, the server will start and run normally.

pidfile /var/run/redis_6379.pid

# 當(dāng)redis作為守護(hù)進(jìn)程運(yùn)行的時(shí)候,它會(huì)把 pid 默認(rèn)寫(xiě)到 /var/run/redis.pid 文件里面,你也可以指定寫(xiě)入的位置

# in order to get the desired effect.

tcp-backlog 511

# TCP 監(jiān)聽(tīng)的最大容納數(shù)量

# 在高并發(fā)的環(huán)境下,你需要把這個(gè)值調(diào)高以避免客戶端連接緩慢的問(wèn)題。

# Examples:

? bind 127.0.0.1 ::1? ??192.168.1.100?

# 默認(rèn)情況下,redis 在 server 上所有有效的網(wǎng)絡(luò)接口上監(jiān)聽(tīng)客戶端連接。

# 你如果只想讓它在一個(gè)網(wǎng)絡(luò)接口上監(jiān)聽(tīng),那你就綁定一個(gè)IP或者多個(gè)IP。

# Close the connection after a client is idle for N seconds (0 to disable)

timeout 0

# 指定在一個(gè) client 空閑多少秒之后關(guān)閉連接(0 就是不管它)

# Redis default starting with Redis 3.2.1.

tcp-keepalive 0

# tcp 心跳包

# 如果設(shè)置為非零,則在與客戶端缺乏通訊的時(shí)候使用 SO_KEEPALIVE 發(fā)送 tcp acks 給客戶端。


# debug (a lot of information, useful for development/testing)

# verbose (many rarely useful info, but not a mess like the debug level)

# notice (moderately verbose, what you want in production probably)

# warning (only very important / critical messages are logged)

loglevel notice

# 定義日志級(jí)別(debug,verbose,notice,warning)

# output for logging but daemonize, logs will be sent to /dev/null

logfile ""

# 指定日志文件的位置

# Set the number of databases. The default database is DB 0, you can select

# a different one on a per-connection basis using SELECT <dbid> where

# dbid is a number between 0 and 'databases'-1

databases 16

# 設(shè)置數(shù)據(jù)庫(kù)的數(shù)目。

# 默認(rèn)數(shù)據(jù)庫(kù)是 DB 0,你可以在每個(gè)連接上使用 select 命令選擇一個(gè)不同的數(shù)據(jù)庫(kù),

# 但是 dbid 必須是一個(gè)介于 0 到 databasees - 1 之間的值

# However if you have setup your proper monitoring of the Redis server

# and persistence, you may want to disable this feature so that Redis will

# continue to work as usual even if there are problems with disk,

# permissions, and so forth.

stop-writes-on-bgsave-error yes

# 默認(rèn)情況下,如果 redis 最后一次的后臺(tái)保存失敗,redis 將停止接受寫(xiě)操作,

# 這樣以一種強(qiáng)硬的方式讓用戶知道數(shù)據(jù)不能正確的持久化到磁盤(pán),

# 否則就會(huì)沒(méi)人注意到災(zāi)難的發(fā)生。

# 如果后臺(tái)保存進(jìn)程重新啟動(dòng)工作了,redis 也將自動(dòng)的允許寫(xiě)操作。


# the dataset will likely be bigger if you have compressible values or keys.

rdbcompression yes

# 是否在 dump .rdb 數(shù)據(jù)庫(kù)的時(shí)候使用 LZF 壓縮字符串

# 默認(rèn)都設(shè)為 yes

# 如果你希望保存子進(jìn)程節(jié)省點(diǎn) cpu ,你就設(shè)置它為 no ,

# 不過(guò)這個(gè)數(shù)據(jù)集可能就會(huì)比較大

# tell the loading code to skip the check.

rdbchecksum yes

# 是否校驗(yàn)rdb文件

# The filename where to dump the DB

dbfilename dump.rdb

# 設(shè)置 dump 的文件位置


# Note that you must specify a directory here, not a file name.

dir ./

#指定本地?cái)?shù)據(jù)庫(kù)存放目錄

slaveof <masterip> <masterport>

#設(shè)置當(dāng)本機(jī)為slav服務(wù)時(shí),設(shè)置master服務(wù)的IP地址及端口,在Redis啟動(dòng)時(shí),它會(huì)自動(dòng)從master進(jìn)行數(shù)據(jù)同步

masterauth <master-password>

#當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時(shí),slave服務(wù)連接master的密碼

equirepass foobared

#設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時(shí)需要通過(guò)AUTH <password>命令提供密碼,默認(rèn)關(guān)閉

maxclients 10000

#設(shè)置同一時(shí)間最大客戶端連接數(shù),默認(rèn)無(wú)限制,Redis可以同時(shí)打開(kāi)的客戶端連接數(shù)為Redis進(jìn)程可以打開(kāi)的最大文件描述符數(shù),如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時(shí),Redis會(huì)關(guān)閉新的連接并向客戶端返回max number of clients reached錯(cuò)誤信息

maxmemory <bytes>

#指定Redis最大內(nèi)存限制,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,Redis會(huì)先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達(dá)最大內(nèi)存設(shè)置,將無(wú)法再進(jìn)行寫(xiě)入操作,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制,會(huì)把Key存放內(nèi)存,Value會(huì)存放在swap區(qū)

appendonly no

指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫(xiě)入磁盤(pán),如果不開(kāi)啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)? redis本身同步數(shù)據(jù)文件是按上面save條件來(lái)同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no

appendfilename "appendonly.aof"

#指定更新日志文件名,默認(rèn)為appendonly.aof

appendfsync everysec

#指定更新日志條件,共有3個(gè)可選值:

no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(pán)(快)

always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫(xiě)到磁盤(pán)(慢,安全)

everysec:表示每秒同步一次(折衷,默認(rèn)值)

activerehashing yes

指定是否激活重置哈希,默認(rèn)為開(kāi)啟

include /path/to/local.conf

#指定包含其它的配置文件,可以在同一主機(jī)上多個(gè)Redis實(shí)例之間使用同一份配置文件,而同時(shí)各個(gè)實(shí)例又擁有自己的特定配置文件


以上就是redis的基本配置


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,306評(píng)論 2 89
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 超強(qiáng)、超詳細(xì)Redis入門(mén)教程 轉(zhuǎn)載2017年03月04日 16:20:02 16916 轉(zhuǎn)載自: http://...
    邵云濤閱讀 17,633評(píng)論 3 313
  • 文章已經(jīng)放到github上 ,如果對(duì)您有幫助 請(qǐng)給個(gè)star[https://github.com/qqxuanl...
    尼爾君閱讀 2,346評(píng)論 0 22
  • 在這個(gè)薄情世界里,深情地活著。 第一次聽(tīng)到這句話,是從一位友人口中。不知誰(shuí)人是第一個(gè)說(shuō)這句話的人。然而這并不重要。...
    思源_沈先生閱讀 517評(píng)論 3 4

友情鏈接更多精彩內(nèi)容