一、簡介:git
redis是一個高性能的key-value數據庫:redis能讀的速度爲11萬次/秒,寫的速度是8.1萬次/秒github
redis支持豐富的數據類型:String, List, Hash(map),Set,ordered Sets等數據類型redis
redis的單個命令的執行操做原子性的,多個操做時redis也支持事務管理,即經過MULTI和EXEC指令包裹起來。算法
可是,redis並無在事物上增長任何維持原子性的機制,即redis的事物管理並非原子性的。redis的事物能夠理解爲一個打包的批量執行腳本,中間的某條指令的失敗不會致使已經執行的指令作回滾,也不會結束後面的指令不作了。數據庫
官方的說明以下:windows
redis能夠運行在內存中,也能夠持久化到磁盤.redis會週期性的將更新的數據寫入磁盤,重啓的時候,能夠再次加載並使用緩存
二、安裝:安全
去GitHub https://github.com/MSOpenTech/redis/releases 下載須要的安裝包服務器
而後解壓到對應電腦盤app
打開cmd命令窗口,進入解壓的目錄,運行以下命令:
redis-server.exe redis.windows.conf
也能夠將redis解壓的路徑配置到系統的Path環境變量中,這樣就能夠不用在進入指定目錄了。
後面的redis.windows.conf能夠省略,省略後,會啓用默認的
三、開啓了redis服務後,再另開一個cmd命令窗口,在裏面輸入以下命令,鏈接redis服務器:
redis-cli.exe -h 127.0.0.1 -p 6379 -a password
其中-h和-p都是能夠省略的,使用默認的,若是沒有設置密碼,-a也是能夠省略的。
四、redis配置文件:
位於redis安裝目錄下:redis.windows.conf
能夠經過CONFIG命令查看或者設置配置項
查看設置的命令爲:CONFIG GET config_setting_name 如
查看全部配置項 用*號代替setting_name
CONFIG GET *
修改配置項:CONFIG SET config_name new_config_value
五、參數說明
1)daemonize:是否以守護進程的方式運行,默認爲no,能夠經過修改成yes啓動守護進程
2)當daemonize爲yes時,redis默認會將pid寫入/var/run/redis.pid文件,能夠經過pidfile指定
pidfile /var/run/redis.pin
3)redis默認監聽端口爲6379,能夠經過port指定
port 6379
4)綁定的主機地址
bind 127.0.0.1
5)設置當客戶端限制多長時間後關閉鏈接,若是指定爲0,表示關閉該功能
timeout 300
6)指定日誌記錄級別:redis共支持4個級別:debug,verbose,notice,warning 默認爲notice
loglevel verbose
7)日誌記錄方式,默認爲標準輸出。若是配置redis以守護進程方式運行,而這裏有配置爲日誌記錄方式爲標準輸出,則日誌將會發送給/dev/null
logfile stdout
8)設置數據庫的數量,默認是0,能夠經過select dbid 命令在鏈接上zh數據庫id
database 16
9)指定在多長時間內,有多少次更新操做就將數據同步到數據文件,可多個條件配合
save <seconds> <changes>
redis默認配置中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒內一個更改,300秒內10個更改,60秒內10000個更改
10)指定存儲到本地數據庫時,是否壓縮數據,默認爲yes。redis採用LZF壓縮,若是爲了節省CPU時間,能夠關閉該壓縮,可是會致使數據庫文件變得巨大。
rdbcompression yes
11)指定本地數據庫文件名,默認爲dump.rdb
dbfilename dump.rdb
12)指定本地數據庫存放目錄
dir ./
13)設置當本機爲slav服務時,設置master服務的IP地址及端口,在redis啓動時,它會自動從master進行數據同步
slaveof <masterip> <masterport>
14)當master服務設置了密碼保護時,slav服務鏈接master的密碼
masterauth <master-password>
15)設置鏈接密碼。若是設置了密碼,客戶端在鏈接redis時,須要經過auth <password> 命令提供密碼,默認關閉。
requirepass foobared
16)設置同一時間客戶端最大鏈接數,默認無限制。若是設置maxclients爲0,表示不限制。
maxclients 128
17)指定redis最大內存限制,redis在啓動時,會將數據加載到內存中,達到最大內存後,redis會先嚐試清除已到期或即將到期的key,清除後,若內存仍是不足,將沒法再寫入,但仍可讀取。
redis新的vm機制,會把key放在內存,value放在swap區
maxmemory <bytes>
18)指定是否在每次更新操做後進行日誌記錄,默認爲no。redis默認是異步寫入磁盤,若是未開啓,可能會致使斷點時部分一段時間內的數據丟失,由於redis自己同步數據是按照上面save條件來同步的,全部數據會在一段時間內只存在於內存中。
appendonly no
19)指定更新日誌文件名,默認爲appendonly.aof
appendfilename appendonly.aof
20)指定更新日誌條件,共三個可選值:
no:表示等操做系統進行數據緩存同步到磁盤(快)
always:表示每次更新操做後,手動調用fsync()將數據寫入磁盤(慢,但安全)
everysec:表示美秒同步一次(折中,默認值)
appendfsync everysec
21)指定是否啓用虛擬機內存,默認爲no。
vm機制將數據分頁存放,由redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁由磁盤自動換出到內存中。
vm-enabled no
22)虛擬內存文件路徑,默認值爲/tmp/redis.swap,不可多個redis實例共享
vm-swap-file /tmp/redis.swap
23)將全部大於vm-max-memory的數據存入虛擬內存,不管vm-max-memory設置的多小,全部索引數據都是內存存儲的(redis的索引數據,就是keys)。
也就是說,當vm-max-memory設置爲0時,其實全部value都存在於磁盤,默認值爲0
vm-max-memory 0
24)redis swap文件分紅了不少的page,一個對象能夠保存在多個page上面,但一個page不能被多個對象共享,vm-page-size是要根據存儲的數據大小來設定的。
若是存儲不少小對象,page大小最好設置爲32或者64bytes,若是存儲很大的對象就可使用更大的page,若是不肯定,能夠直接使用默認值便可
vm-page-size 32
25)設置swap文件中的page的數量,因爲頁表(一種表示頁面空閒或使用的bitmap)是放在內存中的,在磁盤中每8個page將消耗1byte的內存。
vm-pages 134217728
26)設置訪問swap文件的線程數。最好不要超過機器的核數,若是設置爲0,那麼全部對swap的操做都是串行的。可能會形成比較長時間的延遲。默認值爲4
vm-max-threads 4
27)設置在向客戶端應答時,是否把較小的包合併爲一個包發送,默認開啓
glueoutputbuf yes
28)指定在超過必定數量或者最大元素超過某一臨界值時,採用一種特殊的hash算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
29)指定是否激活重置hash,默認爲開啓。
activerehashing yes
30)指定包含其餘的配置文件,能夠在同一主機上,多個redis實例之間使用同一份配置文件。而同時各個實例又擁有各自特定的配置文件。
include /path/to/local.conf
六、基本命令
名稱 | 說明 | 示例 |
DEL | 刪除指定的key | DEL key |
DUMP | 序列化指定key,並返回被序列化的值 | DUMP key |
EXISTS | 檢查給定的key是否存在,存在返回1,不存在返回0 | EXISTS key |
EXPIRE | 給key設置過時時間,時間到了,該鍵會被刪除 | EXPIRE key seconds |
EXPIREAT | 給key設置過時時間,接收參數爲Unix時間戳 | EXPIREAT key timestamp eg:EXPIREATE key 1547537381 |
PEXPIRE | 給key設置過時時間,以毫秒計 | PEXPIRE key milliseconds |
KEYS | 用於查找全部符合給定模式pattern的key 返回符合給定模式的key列表 |
KEYS PATTERN eg:KEYS runoob* 找到全部以runoob開頭的key |
MOVE | 將當前數據庫的key移動到給定的數據庫db中 | MOVE key db select 0 使用數據庫0 set test a 添加key test move test 1 將key test移動到數據庫1中 select 1 使用數據庫1 exists test 查看test成員是否存在 get test 查看key test對應的value |
PERSIST | 移除key的過時時間 | PERSIST key 如:expire key 10 設置key過時時間爲10秒 ttl key :查看key的剩餘過時時間10 persist key 去掉key過時時間 ttl key :再次查看key的剩餘過時時間-1 |
PTTL | 以毫秒爲單位返回key的剩餘的過時時間 | PTTL key |
TTL | 以秒爲單位返回key的剩餘過時時間 | TTL key |
RANDOMKEY | 從當前數據庫中隨機返回一個key | RANDOMKEY |
RENAME | 修改一個key的名稱 若是新的名稱的成員已經存在,則會覆蓋掉該名稱原始對應的值 |
RENAME key new_name |
RENAMENX | 修改一個key的名稱 只有在新的名稱的成員不存在時,才容許被修改 |
RENAMENX key new_name |
TYPE | 獲取指定key成員的類型 | TYPE key |
AUTH | 驗證密碼 | AUTH password |
ECHO | 打印字符串 | ECHO message:ECHO 'hello world!' |
PING | 查看服務是否運行 | PING |
SELECT | 切換到指定數據庫 | SELECT index |
QUITE | 關閉當前鏈接 | QUITE |