一衡怀、Redis簡介
</br>
1、Redis基本介紹
- Reids是一款高性能的key-value數(shù)據(jù)庫逻杖。同時(shí)Redis的value也支持String践盼、Sorted Sets(有序集合)、List篙骡、Set稽坤、ZSet丈甸、Hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
- Redis的所有操作都是原子的尿褪。同時(shí)還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行睦擂。
- Redis還支持publish、subscribe杖玲、通知顿仇、key過期等特性。
</br>
2摆马、Redis安裝
</br>
- Redis目錄文件說明
- redis-benchmark.exe #基準(zhǔn)測試
- redis-check-aof.exe # aof
- redis-check-dump.exe # dump
- redis-cli.exe # 客戶端
- redis-server.exe # 服務(wù)器
- redis.windows.conf # redis配置文件臼闻,修改端口號(hào)
- Redis安裝步驟
- 下載Redis相應(yīng)的版本,將對(duì)應(yīng)的windows版本(如:64位)文件下的內(nèi)容拷到你指定的文件下(如:D:\Development\Redis\Install)囤采。
- 打開cmd述呐,進(jìn)入到你所制定的文件目錄下,運(yùn)行
redis-server.exe redis.conf
命令斑唬。
cmd中如何切換到指定目錄下:
首先切換到目錄所在根目錄下(如:D盤)市埋,命令:d:
黎泣,就可以進(jìn)入到D盤根目錄下恕刘。
再進(jìn)入你所需要的目錄下(如:D:\Development\Redis\Install),命令:cd D:\Development\Redis\Install
.
- Redis使用測試
- 此時(shí)抒倚,在打開一個(gè)cmd命令窗口(原來的不要關(guān)閉)褐着,同樣切換到指定目錄下,運(yùn)行
redis-cli.exe -h 127.0.0.1 -p 6379
命令托呕。 - 設(shè)置鍵值對(duì)含蓉,運(yùn)行 :
set myKey abc
命令。 - 取出鍵值對(duì)项郊,運(yùn)行 :
get myKey
命令馅扣。
- 此時(shí)抒倚,在打開一個(gè)cmd命令窗口(原來的不要關(guān)閉)褐着,同樣切換到指定目錄下,運(yùn)行
</br>
3、Redis配置
</br>
-
Redis配置文件着降,位于Redis安裝目錄下的 redis.conf
- 可以通過 config 命令來查看和設(shè)置配置項(xiàng)差油。
- 命令:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME(配置的文件名)
- 實(shí)例
redis 127.0.0.1:6379> CONFIG GET loglevel 結(jié)果: 1) "loglevel" 2) "notice"
- 使用 * 號(hào)獲取所有的配置文件
redis 127.0.0.1:6379> CONFIG GET * 結(jié)果: 1) "dbfilename" 2) "dump.rdb" 3) "requirepass" 4) "" 5) "masterauth" 6) "" 7) "unixsocket" 8) "" 9) "logfile"
- ""
- "pidfile"
- "/var/run/redis.pid"
- "maxmemory"
- "0"
- "maxmemory-samples"
- "3"
- "timeout"
- "0"
- "tcp-keepalive"
- "0"
- "auto-aof-rewrite-percentage"
- "100"
- "auto-aof-rewrite-min-size"
- "67108864"
- "hash-max-ziplist-entries"
- "512"
- "hash-max-ziplist-value"
- "64"
- "list-max-ziplist-entries"
- "512"
- "list-max-ziplist-value"
- "64"
- "set-max-intset-entries"
- "512"
- "zset-max-ziplist-entries"
- "128"
- "zset-max-ziplist-value"
- "64"
- "hll-sparse-max-bytes"
- "3000"
- "lua-time-limit"
- "5000"
- "slowlog-log-slower-than"
- "10000"
- "latency-monitor-threshold"
- "0"
- "slowlog-max-len"
- "128"
- "port"
- "6379"
- "tcp-backlog"
- "511"
- "databases"
- "16"
- "repl-ping-slave-period"
- "10"
- "repl-timeout"
- "60"
- "repl-backlog-size"
- "1048576"
- "repl-backlog-ttl"
- "3600"
- "maxclients"
- "4064"
- "watchdog-period"
- "0"
- "slave-priority"
- "100"
- "min-slaves-to-write"
- "0"
- "min-slaves-max-lag"
- "10"
- "hz"
- "10"
- "no-appendfsync-on-rewrite"
- "no"
- "slave-serve-stale-data"
- "yes"
- "slave-read-only"
- "yes"
- "stop-writes-on-bgsave-error"
- "yes"
- "daemonize"
- "no"
- "rdbcompression"
- "yes"
- "rdbchecksum"
- "yes"
- "activerehashing"
- "yes"
- "repl-disable-tcp-nodelay"
- "no"
- "aof-rewrite-incremental-fsync"
- "yes"
- "appendonly"
- "no"
- "dir"
- "/home/deepak/Downloads/redis-2.8.13/src"
- "maxmemory-policy"
- "volatile-lru"
- "appendfsync"
- "everysec"
- "save"
- "3600 1 300 100 60 10000"
- "loglevel"
- "notice"
- "client-output-buffer-limit"
- "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
- "unixsocketperm"
- "0"
- "slaveof"
- ""
- "notify-keyspace-events"
- ""
- "bind"
- ""
```
</br>
-
配置配置文件
- 可以通過修改 redis.conf 文件或使用 CONFIG SET 命令來修改配置文件
- 配置文件命令
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
- 實(shí)例
redis 127.0.0.1:6379> CONFIG SET loglevel "notice" OK 結(jié)果: redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
</br>
4、參數(shù)說明
redis.conf 配置項(xiàng)說明如下:
Redis配置參數(shù)說明
</br>
redis配置文件 redis.conf 或 redis.windows.conf
- Redis默認(rèn)不是以守候進(jìn)程的方式運(yùn)行的任洞,可以通過配置項(xiàng)修改使用 yes 啟用守候進(jìn)程蓄喇。
** daemonize no**
當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會(huì)把pid寫入 /var/run/redis.pid文件 交掏,可以通過pidfile指定妆偏。
pidfile /var/run/redis.pid指定Redis監(jiān)聽端口,默認(rèn)端口為6379盅弛,作者在自己的一篇博文中解釋了為什么選用6379作為默認(rèn)端口钱骂,因?yàn)?379在手機(jī)按鍵上MERZ對(duì)應(yīng)的號(hào)碼叔锐,而MERZ取自意大利歌女Alessia Merz的名字 ,可以通過pidfile指定见秽。
port 6379綁定的主機(jī)地址掌腰。
bind 127.0.0.1當(dāng)客戶端閑置多長時(shí)間后關(guān)閉連接,如果指定為0张吉,表示關(guān)閉該功能齿梁。
timeout 300指定日志記錄級(jí)別,Redis總共支持四個(gè)級(jí)別:debug肮蛹、verbose勺择、notice、warning伦忠,默認(rèn)為verbose省核。
loglevel verbose日志記錄方式,默認(rèn)為標(biāo)準(zhǔn)輸出昆码,如果配置Redis為守護(hù)進(jìn)程方式運(yùn)行气忠,而這里又配置為日志記錄方式為標(biāo)準(zhǔn)輸出,則日志將會(huì)發(fā)送給/dev/null赋咽。
logfile stdout設(shè)置數(shù)據(jù)庫的數(shù)量旧噪,默認(rèn)數(shù)據(jù)庫為0,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫id脓匿。
databases 16指定在多長時(shí)間內(nèi)淘钟,有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件陪毡,可以多個(gè)條件配合米母。
save <seconds> <changes>
Redis默認(rèn)配置文件中提供了三個(gè)條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鐘)內(nèi)有1個(gè)更改,300秒(5分鐘)內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改毡琉。
指定存儲(chǔ)至本地?cái)?shù)據(jù)庫時(shí)是否壓縮數(shù)據(jù)铁瞒,默認(rèn)為yes,Redis采用LZF壓縮桅滋,如果為了節(jié)省CPU時(shí)間慧耍,可以關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫文件變的巨大虱歪。
rdbcompression yes指定本地?cái)?shù)據(jù)庫文件名蜂绎,默認(rèn)值為dump.rdb。
dbfilename dump.rdb指定本地?cái)?shù)據(jù)庫存放目錄笋鄙。
dir ./設(shè)置當(dāng)本機(jī)為slav服務(wù)時(shí)师枣,設(shè)置master服務(wù)的IP地址及端口,在Redis啟動(dòng)時(shí)萧落,它會(huì)自動(dòng)從master進(jìn)行數(shù)據(jù)同步践美。
slaveof <masterip> <masterport>當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時(shí)洗贰,slav服務(wù)連接master的密碼。
masterauth <master-password>設(shè)置Redis連接密碼陨倡,如果配置了連接密碼敛滋,客戶端在連接Redis時(shí)需要通過AUTH <password>命令提供密碼,默認(rèn)關(guān)閉兴革。
<font color='red'>requirepass foobared</font>設(shè)置同一時(shí)間最大客戶端連接數(shù)绎晃,默認(rèn)無限制,Redis可以同時(shí)打開的客戶端連接數(shù)為Redis進(jìn)程可以打開的最大文件描述符數(shù)杂曲,如果設(shè)置 maxclients 0庶艾,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時(shí)擎勘,Redis會(huì)關(guān)閉新的連接并向客戶端返回max number of clients reached錯(cuò)誤信息咱揍。
maxclients 128指定Redis最大內(nèi)存限制,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中棚饵,達(dá)到最大內(nèi)存后煤裙,Redis會(huì)先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后噪漾,仍然到達(dá)最大內(nèi)存設(shè)置硼砰,將無法再進(jìn)行寫入操作,但仍然可以進(jìn)行讀取操作怪与。Redis新的vm機(jī)制夺刑,會(huì)把Key存放內(nèi)存,Value會(huì)存放在swap區(qū)分别。
<font color='red'>maxmemory <bytes></font>指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤存淫,如果不開啟耘斩,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)?redis本身同步數(shù)據(jù)文件是按上面save條件來同步的桅咆,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中括授。默認(rèn)為no。
appendonly no指定更新日志文件名岩饼,默認(rèn)為appendonly.aof荚虚。
appendfilename appendonly.aof指定更新日志條件,共有3個(gè)可選值:
no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快)
always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢籍茧,安全)
everysec:表示每秒同步一次(折衷版述,默認(rèn)值)。
appendfilename appendonly.aof指定是否啟用虛擬內(nèi)存機(jī)制寞冯,默認(rèn)值為no渴析,簡單的介紹一下晚伙,VM機(jī)制將數(shù)據(jù)分頁存放,由Redis將訪問量較少的頁即冷數(shù)據(jù)swap到磁盤上俭茧,訪問多的頁面由磁盤自動(dòng)換出到內(nèi)存中(在后面的文章我會(huì)仔細(xì)分析Redis的VM機(jī)制)咆疗。
vm-enabled no虛擬內(nèi)存文件路徑,默認(rèn)值為/tmp/redis.swap母债,不可多個(gè)Redis實(shí)例共享午磁。
vm-swap-file /tmp/redis.swap將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲(chǔ)的(Redis的索引數(shù)據(jù) 就是keys),也就是說,當(dāng)vm-max-memory設(shè)置為0的時(shí)候,其實(shí)是所有value都存在于磁盤。默認(rèn)值為0毡们。
vm-max-memory 0Redis swap文件分成了很多的page漓踢,一個(gè)對(duì)象可以保存在多個(gè)page上面,但一個(gè)page上不能被多個(gè)對(duì)象共享漏隐,vm-page-size是要根據(jù)存儲(chǔ)的 數(shù)據(jù)大小來設(shè)定的喧半,作者建議如果存儲(chǔ)很多小對(duì)象,page大小最好設(shè)置為32或者64bytes青责;如果存儲(chǔ)很大大對(duì)象挺据,則可以使用更大的page,如果不 確定脖隶,就使用默認(rèn)值扁耐。
vm-page-size 32設(shè)置swap文件中的page數(shù)量,由于頁表(一種表示頁面空閑或使用的bitmap)是在放在內(nèi)存中的产阱,婉称,在磁盤上每8個(gè)pages將消耗1byte的內(nèi)存。
vm-pages 134217728設(shè)置訪問swap文件的線程數(shù),最好不要超過機(jī)器的核數(shù),如果設(shè)置為0,那么所有對(duì)swap文件的操作都是串行的构蹬,可能會(huì)造成比較長時(shí)間的延遲王暗。默認(rèn)值為4。
vm-max-threads 4設(shè)置在向客戶端應(yīng)答時(shí)庄敛,是否把較小的包合并為一個(gè)包發(fā)送俗壹,默認(rèn)為開啟。
glueoutputbuf yes指定在超過一定的數(shù)量或者最大的元素超過某一臨界值時(shí)藻烤,采用一種特殊的哈希算法绷雏。
hash-max-zipmap-entries 64
hash-max-zipmap-value 512指定是否激活重置哈希,默認(rèn)為開啟(后面在介紹Redis的哈希算法時(shí)具體介紹)怖亭。
activerehashing yes指定包含其它的配置文件涎显,可以在同一主機(jī)上多個(gè)Redis實(shí)例之間使用同一份配置文件,而同時(shí)各個(gè)實(shí)例又擁有自己的特定配置文件兴猩。
include /path/to/local.conf