在 Windows 下配置 Redis(不含集群)

本文只涉及 Redis 在 Windows 中的配置(不含集群)

  • 如需配置 Redis 集群腰湾,請看這里
  • 如需使用 C#(StackExchange.Redis)進行開發(fā)惭婿,請看這里

簡單介紹

Redis是一款開源的妇汗、高性能的鍵 - 值存儲(Key - Value store)秫筏。和 Memcached 類似种冬,Redis 常被稱作是一款 Key - Value 內(nèi)存存儲系統(tǒng)(或內(nèi)存數(shù)據(jù)庫)付燥。

同時敷钾,由于它支持豐富的數(shù)據(jù)結(jié)構枝哄,又被稱為一種數(shù)據(jù)結(jié)構服務器(Data Structure Server)。

但是阻荒,Redis 官方并不支持 Windows挠锥,微軟開源團隊 將其移植到了 Windows 中。

在實際生產(chǎn)環(huán)境中侨赡,還是建議將 Redis 部署在 CentOS 中來進行蓖租,畢竟 Redis 全部是通過 API 進行操作,跨平臺訪問是天生的羊壹。

  • 配置環(huán)境:Windows 7 Pro x64

Redis 安裝

安裝很簡單蓖宦,直接在上面的 Windows 版中下載 msi,雙擊運行即可安裝(這里的版本是 v3.2.100)油猫。

稍微說明一下:在安裝過程中稠茂,最好把上圖的這個選項勾上,方便在命令行中隨時執(zhí)行相應的指令情妖。

安裝好之后睬关,會這系統(tǒng)服務里面安裝一個 Redis 的節(jié)點服務,并且已經(jīng)啟動了毡证。

接下來电爹,就可以進行操作了。

常規(guī)操作

登錄到 Redis 服務器情竹,在命令行中執(zhí)行以下命令(也可以直接雙擊安裝目錄下的 redis-cli.exe 登錄到默認端口的 Redis 服務器)

// -h:主機 IP
// -p:主機端口
// 如果要登錄集群節(jié)點,還需添加一個參數(shù):-c
redis-cli -h 127.0.0.1 -p 6379

由于在安裝的時候,已經(jīng)將 Redis 的安裝路徑注冊到系統(tǒng) PATH 了秦效,所以雏蛮,在命令行的隨便哪個位置,都可以執(zhí)行 Redis 的指令阱州。

看到如下界面挑秉,就表示登錄成功了:

登錄成功

Redis 安裝好以后,可通過常用的幾個指令進行查看和操作:

  • info(查看 Redis 服務器的全部信息)
  • keys *(查看當前存儲的所有 key)
  • get <keyname>(查看指定 key 的內(nèi)容)
  • del <keyname>(刪除指定 key 的內(nèi)容)
  • set <keyname> <value>(設置指定 key 的內(nèi)容)
  • flushdb(刪除 當前數(shù)據(jù)庫 中的所有 key)
  • flushall(刪除 所有數(shù)據(jù)庫 中的所有 key)

info 指令:查看 Redis 服務器的全部信息

Redis 整體信息

info 后面還可以跟具體某個部分的信息苔货,只看這一項的具體內(nèi)容犀概,就是上圖中,井號 “#” 后面的內(nèi)容夜惭,比如:

info server   // 查看服務器基本信息
info memory   // 查看內(nèi)存使用情況
// ……

關于 info 指令的詳細說明姻灶,參見這里(英文)

關于 info memory 指令的結(jié)果分析

這個指令主要是查看服務器內(nèi)存使用情況的诈茧,在命令行執(zhí)行之后产喉,如下所示:

info memory

該指令主要顯示了當前內(nèi)存的占用情況、碎片情況敢会,還有就是內(nèi)存可占用的最大空間以及占用達到最大空間后的處理策略曾沈。

先把這些指標簡單分為兩大類:

  1. 末尾沒有帶 “_human”:即該節(jié)點的實際數(shù)值
  2. 末尾帶有 “_human”:即便于人類理解的數(shù)值(自動把實際數(shù)值按 1024 轉(zhuǎn)換而來)

內(nèi)存相關的指標說明:

  • used_memory:由 Redis 分配器分配的內(nèi)存總量,以字節(jié)(byte)為單位鸥昏。
  • used_memory_rss:從操作系統(tǒng)的角度塞俱,返回 Redis 已分配的內(nèi)存總量(俗稱:常駐集大小。rss 是 Resident Set Size 的意思)吏垮。這個值和 top障涯、ps 等命令的輸出一致。
  • used_memory_peak:Redis 的內(nèi)存消耗峰值惫皱,以字節(jié)(byte)為單位像樊。
  • total_system_memory:Redis 所在的服務器實際內(nèi)存大小,以字節(jié)(byte)為單位旅敷。
  • used_memory_lua:Lua 引擎所使用的內(nèi)存大小生棍,以字節(jié)(byte)為單位。
  • maxmemory:Redis 最大可用的內(nèi)存空間媳谁,以字節(jié)(byte)為單位涂滴。
  • maxmemory_policy:當數(shù)據(jù)占滿最大可用空間時,需要執(zhí)行的過期策略(見后:過期策略種類解釋)
  • mem_allocator:在編譯時指定的晴音,Redis 所使用的內(nèi)存分配器柔纵。可以是 libc锤躁、jemalloc 或 tcmalloc搁料。
  • mem_fragmentation_ratio:used_memory_rss 和 used_memory 之間的比率(詳見:特別說明)。

特別說明:

  • 在理想情況下,used_memory_rss 的值應該只比 used_memory 稍微高一點(比率不超過 1.5)郭计。
  • 當 rss > used 時霸琴,且兩者的值相差較大時,表示存在(內(nèi)部或外部的)內(nèi)存碎片(內(nèi)存碎片的比率可以通過 mem_fragmentation_ratio 的值看出)昭伸。
  • 當 used > rss 時梧乘,表示 Redis 的部分內(nèi)存被操作系統(tǒng)換出到交換空間內(nèi)了。在這種情況下庐杨,操作可能會產(chǎn)生明顯的延遲选调。

當 Redis 釋放內(nèi)存時,分配器會(也可能不會)將內(nèi)存返還給操作系統(tǒng)灵份。
如果 Redis 釋放了內(nèi)存仁堪,卻沒有將內(nèi)存返還給操作系統(tǒng),那么 used_memory 的值就可能和操作系統(tǒng)顯示的 Redis 內(nèi)存占用的值不一致各吨。
查看 used_memory_peak 的值枝笨,即可以驗證這種情況是否發(fā)生。

內(nèi)存碎片是怎么產(chǎn)生的呢揭蜒?簡單來說:Redis 需要一個連續(xù)的內(nèi)存空間來存儲 1G 的數(shù)據(jù)横浑,但是當前內(nèi)存已經(jīng)沒有 1G 連續(xù)的空間了,這樣屉更,操作系統(tǒng)不得不將多個不連續(xù)的空間組合起來提供 1G 的大小徙融,這就導致了內(nèi)存碎片的產(chǎn)生。

*mem_fragmentation_ratio 稍大于 1 是合理的瑰谜。這個值表示內(nèi)存碎片率比較低欺冀,也說明 Redis 沒有發(fā)生內(nèi)存交換。

  • 如果該值超過 1.5萨脑,那就說明 Redis 消耗了實際需要物理內(nèi)存的150%隐轩,其中 50% 是內(nèi)存碎片。
  • 如果該值低于 1 的話(但 0.95 以上都算正常)渤早,說明Redis內(nèi)存分配超出了物理內(nèi)存职车,操作系統(tǒng)正在進行內(nèi)存交換。而內(nèi)存交換會引起非常明顯的響應延遲鹊杖。*

一般來說悴灵,碰到這樣的情況,建議從三個方面進行優(yōu)化:

  • 重啟 Redis 服務器:記得在重啟之前骂蓖,用 redis-cli 工具先執(zhí)行 shutdown save 指令积瞒,將數(shù)據(jù)持久化到硬盤上,待重啟之后登下,再加載回內(nèi)存茫孔,避免數(shù)據(jù)丟失叮喳。
  • 限制內(nèi)存交換
  • 修改內(nèi)存分配器

更多優(yōu)化方法,可參考這里

在運行過程中

  • 獲取配置的指令:config get "<info 中的 key>"
  • 設置配置的指令:config set "<info 中的 key>" "<值>"

比如:在 Redis 運行中缰贝,設置最大可用內(nèi)存空間嘲更,輸入以下命令:

config set "maxmemory" "300mb"

一般來說,如果設置了具體的最大可用內(nèi)存空間揩瞪,一定要關注過期策略:maxmemory-policy

過期策略種類解釋(后有名詞解釋):

  • volatile-lru:對 “過期集合” 中的數(shù)據(jù)采取 LRU 算法篓冲。將(已經(jīng)過期 ÷ LRU)的數(shù)據(jù)優(yōu)先移除李破。如果 “過期集合” 中的數(shù)據(jù)全部移除了,仍不能滿足內(nèi)存需求壹将,則將 OOM嗤攻。
  • allkeys-lru:對所有的數(shù)據(jù),采用 LRU 算法诽俯。
  • volatile-random:對 “過期集合” 中的數(shù)據(jù)采取 “隨機選取” 算法妇菱,并移除選中的 K - V,直到 “內(nèi)存足夠” 為止暴区。如果 “過期集合” 中的數(shù)據(jù)全部移除了闯团,仍不能滿足內(nèi)存需求,將 OOM仙粱。
  • allkeys-random:對所有的數(shù)據(jù)房交,采取 “隨機選取” 算法,并移除選中的 K - V伐割,直到 “內(nèi)存足夠” 為止候味。
  • volatile-ttl:對 “過期集合” 中的數(shù)據(jù)采取 TTL 算法,移除即將過期的數(shù)據(jù)隔心。
  • noeviction:不做任何干擾操作白群,直接返回 OOM 異常。

說明:
1. 過期集合:如果對 key 使用 expire 指令指定了過期時間硬霍,那么帜慢,此 key 將會被添加到 “過期集合” 中。
2. LRU:Least Recently Used须尚,近期最少使用崖堤,詳見百科
3. TTL:Time To Live,最小存活時間耐床,詳見百科
4. OOM:Out Of Memory密幔,Killer 會干掉 Redis 進程,俗稱:死機撩轰。
5. 以上全部內(nèi)容的官方說明(英文)

至此胯甩,在 Windows 下配置 Redis 就差不多結(jié)束了昧廷。

  • 如需使用 C#(StackExchange.Redis)進行開發(fā)偎箫,請看這里
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末木柬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淹办,更是在濱河造成了極大的恐慌眉枕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怜森,死亡現(xiàn)場離奇詭異速挑,居然都是意外死亡,警方通過查閱死者的電腦和手機副硅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門姥宝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恐疲,你說我怎么就攤上這事腊满。” “怎么了培己?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵碳蛋,是天一觀的道長。 經(jīng)常有香客問我省咨,道長疮蹦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任茸炒,我火速辦了婚禮愕乎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壁公。我一直安慰自己感论,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布紊册。 她就那樣靜靜地躺著比肄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪囊陡。 梳的紋絲不亂的頭發(fā)上芳绩,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音撞反,去河邊找鬼妥色。 笑死,一個胖子當著我的面吹牛遏片,可吹牛的內(nèi)容都是我干的嘹害。 我是一名探鬼主播撮竿,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笔呀!你這毒婦竟也來了幢踏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤许师,失蹤者是張志新(化名)和其女友劉穎房蝉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體微渠,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡惨驶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敛助。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屋确,死狀恐怖纳击,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情攻臀,我是刑警寧澤焕数,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刨啸,受9級特大地震影響堡赔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜设联,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一善已、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧离例,春花似錦换团、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耀盗,卻和暖如春想虎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叛拷。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工舌厨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忿薇。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓邓线,卻偏偏與公主長得像淌友,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骇陈,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容