Redis是一個開源(遵循BSD協議)Key-Value數據結構的內存存儲系統,用做數據庫、緩存和消息代理。它支持5種數據結構:字符串string、哈希hash、列表list、集合set和有序的集合sorted-set。Redis支持Lua腳本,哨兵機制和集羣實現高可用。適用場景:緩存、投票、抽獎、分佈式session、排行榜、計數、隊列、發佈訂閱等;具體介紹見Redis官網。node
① 下載地址:https://redis.io/downloadredis
② 安裝gcc:yum install gcc算法
③ 把第一步下載好的redis‐5.0.2.tar.gz上傳到服務器的/root/svr/packages目錄或者直接 cd /root/svr/packages而後執行:wget http://download.redis.io/releases/redis-5.0.2.tar.gz數據庫
④ 執行 cp redis‐5.0.2.tar.gz ../緩存
⑤ cd /root/svr 而後執行:tar -xvf redis‐5.0.2.tar.gz:安全
cd redis‐5.0.2:服務器
⑥ 執行:make install PREFIX=/root/svr/redis-5.0.2session
⑦ 啓動redis 執行:bin/redis-server ../redis.conf (注意:若是要後臺啓動須要把redis.conf配置裏面的daemonize改成yes)數據結構
⑧ 驗證是否啓動成功 ps -ef|grep redis多線程
⑨ 進去redis客戶端:bin/redis-cli
⑩ 退出客戶端:quit
參數 | 解釋 |
bind | 指定 Redis 只接收來自於該 IP 地址的請求,若是不進行設置,那麼將處理全部請求 |
port | 監聽端口,默認6379 |
timeout | 設置客戶端鏈接時的超時時間,單位爲秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該鏈接 |
daemonize | 默認狀況下,redis不是在後臺運行的,若是須要在後臺運行,把該項的值更改成yes |
loglevel | log等級分爲4級,debug, verbose, notice, 和 warning。生產環境下通常開啓notice |
logfile | 配置log文件地址,默認使用標準輸出,即打印在命令行終端的窗口上 |
save | save <seconds> <changes>好比save 60 10000意思60秒(1分鐘)內至少10000個key值改變(則進行數據庫保存--持久化rdb) |
dbfilename | rdb文件的名稱 |
dir | 數據目錄,2種持久化rdb、aof文件就在這個目錄 |
replicaof | replicaof <masterip> <masterport>:該配置是主從的配置表示該redis實例是masterip:masterport的從節點 |
masterauth | master鏈接密碼 |
replica-serve-stale-data | 當slave跟master失去鏈接或者正在同步數據,slave有兩種運行方式: 1) 若是replica-serve-stale-data設置爲yes(默認設置),slave會繼續響應客戶端的請求。 2) 若是replica-serve-stale-data設置爲no,除去指定的命令以外的任何請求都會返回一個錯誤」SYNC with master in progress」 |
replica-read-only | 是否設置slave只讀 |
repl-diskless-sync | 同步策略: 磁盤或socket,默認磁盤方式 |
repl-diskless-sync-delay | 若是非磁盤同步方式開啓,能夠配置同步延遲時間,以等待master產生子進程經過socket傳輸RDB數據給slave。默認值爲5秒,設置爲0秒則每次傳輸無延遲 |
repl-ping-replica-period | slave根據指定的時間間隔向master發送ping請求。默認10秒 |
repl-timeout | 同步的超時時間 |
repl-disable-tcp-nodelay | 是否在slave套接字發送SYNC以後禁用 TCP_NODELAY |
repl-backlog-size | 設置數據備份的backlog大小 |
repl-backlog-ttl | slave斷開開始計時多少秒後,backlog緩衝將會釋放 |
replica-priority | slave的優先級,當master掛了,優先級數字小的salve會優先考慮提高爲master,0做爲一個特殊的優先級,標識這個slave不能做爲master |
requirepass | 客戶端在處理任何命令時都要密碼驗證 |
rename-command | 命令重命名,能夠給危險命令改變名字 |
maxclients | 設置最多同時鏈接的客戶端數量,默認這個限制是10000個客戶端。 |
maxmemory | 設置最大內存,一旦內存使用達到最大內存,redis會根據選定的回收策略(maxmemmory-policy)刪除key |
maxmemory-policy | 最大內存策略:若是達到內存限制了,redis如何選擇刪除key: |
maxmemory-samples | 設置樣本量的個數 |
appendonly | 是否開啓AOF,若是開啓那麼在啓動時Redis將加載AOF文件,它更能保證數據的可靠性,aof的文件內容就是RESP協議 |
appendfilename | AOF文件名(默認:"appendonly.aof") |
appendfsync | 配置 Redis 多久纔將數據 fsync 到磁盤一次 |
auto-aof-rewrite-percentage | 自動重寫AOF文件。若是AOF日誌文件增大到指定百分比,默認100。Redis可以經過 BGREWRITEAOF 自動重寫AOF日誌文件 |
auto-aof-rewrite-min-size | 自動重寫AOF文件。若是AOF日誌文件到達最小的指定大小,默認64mb |
aof-use-rdb-preamble | Redis 4.0以後配置混合持久化,須要配置 aof-use-rdb-preamble yes |
lua-time-limit | Lua腳本的最大執行時間,單位爲毫秒 |
cluster-enabled | 是否開啓集羣 cluster-enabled yes |
cluster-config-file | redis自動生成集羣配置信息的文件名 |
cluster-node-timeout | 集羣節點超時毫秒數。超時的節點將被視爲不可用狀態。 |
aof-rewrite-incremental-fsync | 當一個子進程重寫AOF文件時,若是配置aof-rewrite-incremental-fsync yes,則文件每生成32M,數據會被同步 |
rdb-save-incremental-fsync | 當redis保存RDB文件時,若是啓用瞭如下選項,每生成32MB數據,文件將被fsync到磁盤 |
SET key value //設置字符串鍵值對 MSET key value [key value ...] //批量設置字符串鍵值對 SETNX key value //設置字符串鍵值對,當key存在就不作處理直接返回0,不然跟set命令同樣 GET key //獲取一個字符串鍵值 MGET key [key ...] //批量獲取字符串鍵值 DEL key [key ...] //刪除一個鍵 EXPIRE key seconds //設置一個鍵的過時時間(秒)
INCR key //將key中儲存的數字值加1 DECR key //將key中儲存的數字值減1 INCRBY key increment //將key所儲存的值加上increment DECRBY key decrement //將key所儲存的值減去decrement
HSET key field value //設置哈希表key中的字段field的值設爲value HSETNX key field value //設置哈希表key中的字段field的值設爲value,當key存在不作處理,返回0,不然跟hset命令同樣 HMSET key field value [field value ...] //批量設置哈希表key中的字段field的值設爲value HGET key field //獲取哈希表key對應的field字段的值 HMGET key field [field ...] //批量獲取哈希表key中多個field字段的值 HDEL key field [field ...] //刪除哈希表key中的field字段 HLEN key //返回哈希表key中field的數量 HGETALL key //返回哈希表key中全部的鍵值 HINCRBY key field increment //爲哈希表key中field鍵的值加上增量increment
LPUSH key value [value ...] //將一個或多個值value插入到key列表的表頭(最左邊) RPUSH key value [value ...] //將一個或多個值value插入到key列表的表尾(最右邊) LPOP key //移除並返回key列表的頭元素 RPOP key //移除並返回key列表的尾元素 LRANGE key start stop //返回列表key中指定區間內的元素,區間以偏移量start和stop指定 BLPOP key [key ...] timeout //從key列表表頭彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,若是timeout=0,一直阻塞等待 BRPOP key [key ...] timeout //從key列表表尾彈出一個元素,若列表中沒有元素,阻塞等待timeout秒,若是timeout=0,一直阻塞等待
SADD key member [member ...] //往集合key中存入元素,元素存在則忽略,key不存在則新建 SREM key member [member ...] //從集合key中刪除元素 SMEMBERS key //獲取集合key中全部元素 SCARD key //獲取集合key的元素個數 SISMEMBER key member //判斷member元素是否存在於集合key中 SRANDMEMBER key [count] //從集合key中選出count個元素,元素不從key中刪除 SPOP key [count] //從集合key中選出count個元素,元素從key中刪除
SINTER key [key ...] //交集運算 SINTERSTORE destination key [key ..] //將交集結果存入新集合destination中 SUNION key [key ..] //並集運算 SUNIONSTORE destination key [key ...] //將並集結果存入新集合destination中 SDIFF key [key ...] //差集運算 SDIFFSTORE destination key [key ...] //將差集結果存入新集合destination中
ZADD key score member [[score member]...] //往有序集合key中加入帶分值元素 ZREM key member [member ...] //從有序集合key中刪除元素 ZSCORE key member //返回有序集合key中元素member的分值 ZINCRBY key increment member //爲有序集合key中元素member的分值加上increment ZCARD key //返回有序集合key中元素個數 ZRANGE key start stop [WITHSCORES] //正序獲取有序集合key從start下標到stop下標的元素 ZREVRANGE key start stop [WITHSCORES] //倒序獲取有序集合key從start下標到stop下標的元素
ZUNIONSTORE destkey numkeys key [key ...] //並集計算
ZINTERSTORE destkey numkeys key [key ...] //交集計算
Redis全部的數據都是在內存中,全部的運算都是內存級別的運算,並且單線程避免了多線程的切換性能損耗的問題。正由於Redis是單線程,因此要當心使用Redis指令,對於那些耗時的指令(好比keys),必定要謹慎使用,一不當心就可能會致使 Redis 卡頓。
Redis的IO多路複用:redis利用epoll來實現IO多路複用,將鏈接信息和事件放到隊列中,依次放到文件事件分派器,事件分派器將事件分發給事件處理器。(IO多路複用在後續的netty系列裏面詳細講解)
總結:Redis是一個Key-Value數據結構的內存存儲系統,他支持5種數據結構,分別是String結構、Hash結構、List結構、Set結構、Sorted-Set結構;Redis支持Lua腳本,哨兵機制和集羣實現高可用;介紹了安裝Redis的步驟,詳細的解釋了redis.conf的主要配置,以及Redis的核心原理。