一. Redis簡介
2008年,一個名爲Salvatore Sanfilippo的程序員爲他開發的LLOOGG項目定製了專屬的數據庫(因爲之前他無論怎樣優化MySQL,系統性能已經無法再提升了),這項工作的成果就是Redis的初始版本。後來他將Redis的代碼放到了全球最大的代碼託管平臺Github,從那以後,Redis引發了大量開發者的好評和關注,繼而有數百人蔘與了Redis的開發和維護,這使得Redis的功能越來越強大和性能越來越好。
Redis是 remote dictionary server 的縮寫,它是一個用 ANSI C 編寫的高性能的key-value存儲系統,與其他的key-value存儲系統相比,Redis有以下一些特點(也是優點):
- Redis的讀寫性能極高,並且有豐富的特性(發佈/訂閱、事務、通知等)。
- Redis支持數據的持久化(RDB和AOF兩種方式),可以將內存中的數據保存在磁盤中,重啓的時候可以再次加載進行使用。
- Redis支持多種數據類型,包括:string、hash、list、set,zset、bitmap、hyperloglog等。
- Redis支持主從複製(實現讀寫分離)以及哨兵模式(監控master是否宕機並自動調整配置)。
- Redis支持分佈式集羣,可以很容易的通過水平擴展來提升系統的整體性能。
- Redis基於TCP提供的可靠傳輸服務進行通信,很多編程語言都提供了Redis客戶端支持。
二. Redis的應用場景
1. 高速緩存
將不常變化但又經常被訪問的熱點數據放到Redis數據庫中,可以大大降低關係型數據庫的壓力,從而提升系統的響應性能。
2. 排行榜
很多網站都有排行榜功能,利用Redis中的列表和有序集合可以非常方便的構造各種排行榜系統。
3. 商品秒殺/投票點贊
Redis提供了對計數操作的支持,網站上常見的秒殺、點贊等功能都可以利用Redis的計數器通過+1或-1的操作來實現,從而避免了使用關係型數據的update操作。
4. 分佈式鎖
利用Redis可以跨多臺服務器實現分佈式鎖(類似於線程鎖,但是能夠被多臺機器上的多個線程或進程共享)的功能,用於實現一個阻塞式操作。
5. 消息隊列
消息隊列和高速緩存一樣,是一個大型網站不可缺少的基礎服務,可以實現業務解耦和非實時業務削峯等特性,這些我們都會在後面的項目中爲大家展示。
三. Redis的安裝
可以通過在Redis的 官方網站 下載 Redis 的源代碼,解壓縮解歸檔之後通過 make 工具對源代碼進行構建並安裝。
wget http://101.44.1.120/files/318700000890F623/download.redis.io/releases/redis-5.0.8.tar.gz
tar -zxvf redis-5.0.8.tar.gz
cd redis-5.0.8
sudo make && sudo make install
四.Redis 的配置
在 redis 源代碼目錄下有一個名爲redis.conf的配置文件,我們可以先查看一下該文件: vim redis.conf
- 配置將 Redis 服務綁定到指定的IP地址和端口。
bind 127.0.0.1
port 6379
- 設置後臺運行 (以守護進程方式運行)
daemonize yes
- 設置日誌級別, 可選值: (debug: 調試, verbose: 詳細, notice: 通知, warning: 警告)
loglevel warning
- 配置數據庫的數量, 默認爲 16 個
databases 16
- 配置數據寫入規則
save 900 1 # 900 秒 (15 分鐘) 內修改過 1 個 key, , 寫入一次數據庫
save 300 10 # 300 秒 (5 分鐘) 內修改過 10 個 key, 寫入一次數據庫
save 60 10000 # 60 秒 (1 分鐘) 內修改過 10000 個 key, 寫入一次數據庫
- 配置Redis的持久化機制 - RDB。
rdbcompression yes # 壓縮 RDB 文件
rdbchecksum yes # 對 RDB 文件進行校驗
dbfilename dump.rdb # RDB 數據庫文件的文件名
dir /var/local/redis # RDB 文件保存的目錄
- 配置Redis的持久化機制 - AOF。
appendonly no
appendfilename "appendonly.aof"
- 配置Redis的主從複製,通過主從複製可以實現讀寫分離。
# Master-Replica replication. Use replicaof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
# +------------------+ +---------------+
# | Master | ---> | Replica |
# | (receive writes) | | (exact copy) |
# +------------------+ +---------------+
#
# 1) Redis replication is asynchronous, but you can configure a master to
# stop accepting writes if it appears to be not connected with at least
# a given number of replicas.
# 2) Redis replicas are able to perform a partial resynchronization with the
# master if the replication link is lost for a relatively small amount of
# time. You may want to configure the replication backlog size (see the next
# sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
# network partition replicas automatically try to reconnect to masters
# and resynchronize with them.
#
replicaof 主機IP地址 主機端口
- 配置慢查詢
slowlog-log-slower-than 10000 # 一次操作超過 10000 毫秒被視作一次慢查詢
slowlog-max-len 128 # 最多紀錄 128 次滿查詢
五. Redis的服務器和客戶端
1. redis服務器
接下來啓動 Redis 服務器,下面的方式將以指定的配置文件啓動 Redis 服務。
redis-server redis.conf
2.redis 客戶端
接下來用 Redis 客戶端去連接服務器
redis-cli -h localhost -p 6379
六.Redis持久化
Redis在運行時,所有的數據都保存在內存裏,進程結束以後,會將數據寫入到硬盤中。啓動時,會讀取硬盤裏的內容,並將內容全部加載到內存中(會大量的佔用內存)。
Redis的持久化有兩種形式:RDB和AOF
1.RDB
默認的持久化方式,是對內存中的數據進行鏡像,並以二進制的形式保存到dump.rdb
文件中。會根據配置文件的時間節點對文件進行持久化。
save 900 1
save 300 10
save 60 10000
優點:速度快,直接鏡像內存裏的數據,文件小。
缺點:數據有可能會丟失,在兩次保存間隔內的數據,有可能會丟失。
2. AOF
AOF
(Append only file)持久化,將修改的每一條指令記錄進appendonly.aof
中,需要修改配置文件,來打開aof
功能。
appendfsync always:每次有新命令追加到aof文件時就執行一個持久化,非常慢但是安全
appendfsync everysec:每秒執行一次持久化,足夠快(和使用rdb持久化差不多)並且在故障時只會丟失1秒鐘的數據
appendfsync no:從不持久化,將數據交給操作系統來處理。redis處理命令速度加快但是不安全。
優點:適合保存增量數據,數據不丟失。
缺點:文件體積大,恢復時間長