標籤:base ack 對象 存在 功能 vim 主從 關閉 only
Redis 是一個開源的,高效能的 key-value 系統,可以用來緩衝或儲存資料。Redis 資料可以持久化,並且支援多種資料類型:字串(string),列表 (list),雜湊(hash),集合(set)和有序集合(sorted set)。能夠對關係型資料庫起到很好的補充作用。它還提供了多種用戶端 Python,Ruby,Erlang,PHP ,可以方便調用。
持久化:
Redis 是一種記憶體資料庫(跟 memcache 類似),在資料存取效率方面很優秀,由於記憶體中的資料時刻面臨丟失的危險,Redis 提供了兩種持久化機制,及時將記憶體中的資料寫入磁碟。
RDB 利用儲存快照的方式把記憶體資料定期寫入磁碟,半持久化
AOF 利用寫日誌的方式(類似 mysql 的 binlog),每執行一條更改 Redis 資料的命令,就寫入到磁碟的一個 aof 檔案中
Redis 預設開啟 RDB 模式,關閉 AOF 模式,因為 AOF 更耗資源,但是對資料安全極高,稱為全持久化,按需選擇哪種模式。
主從功能:
為了防止 Redis 磁碟損壞,導致資料丟失,Redis 提供了複製功能,將一個主要資料庫的資料自動同步到從資料庫,防止資料丟失。
主從原理:
1、從資料庫啟動後,向主要資料庫發送 SYNC 命令
2、主要資料庫收到 SYNC 命令後開始儲存快照,在此期間所有發給主要資料庫的命令都被緩衝起來
3、快照儲存完後,主要資料庫把快照和緩衝的命令一起發給從資料庫
4、從資料庫儲存主要資料發來的快照檔案,並依次執行主要資料庫發來的緩衝命令
在同步過程中,從資料庫不會阻塞,它預設使用同步之前的資料繼續響應用戶端發來的命令
:https://code.google.com/p/redis/downloads/list
一、安裝 Redis
[[email protected] src]# tar zxf redis-2.6.10.tar.gz
[[email protected] src]# cd redis-2.6.10
[[email protected] redis-2.6.10]# make
[[email protected] redis-2.6.10]# make install
二、調整 Redis
[[email protected] ~]# mkdir /usr/local/redis
[[email protected] ~]# cd !$
[[email protected] redis]# cp ../src/redis-2.6.10/redis.conf .
[[email protected] redis]# cp ../src/redis-2.6.10/src/redis-cli .
[[email protected] redis]# cp ../src/redis-2.6.10/src/redis-server .
[[email protected] redis]# cp ../src/redis-2.6.10/src/redis-sentinel .
[[email protected] redis]# cp ../src/redis-2.6.10/src/redis-benchmark .
[[email protected] redis]# cp ../src/redis-2.6.10/src/redis-check-aof .
[[email protected] redis]# cp ../src/redis-2.6.10/src/redis-check-dump .
## redis.conf 主設定檔
## redis-cli 命令列操作工具
## redis-server 啟動程式
## redis-sentinel 叢集管理工具
## redis-benchmark 效能測試工具,測試 redis 在當前系統配置下的讀寫效能
## redis-check-aof 更新日誌檢查,--fix 可以修複 log 檔案
## redis-check-dump 檢查本機資料檔案
三、編輯 redis.conf
[[email protected] redis]# mv redis.conf redis.conf.bak
[[email protected] redis]# vim redis.conf
daemonize yes
## 以守護進程方式啟動
pidfile /usr/local/redis/logs/redis.pid
## 定義 pid 檔案存放路徑
port 6379
## 監聽連接埠
timeout 300
## 請求逾時時間
loglevel debug
## 定義記錄層級
logfile /usr/local/redis/logs/redis.log
## 定義記錄檔路徑
databases 16
## 啟動資料庫執行個體數,預設串連的資料庫為 0 ,可以通過 select N 來串連不同的資料庫
save 900 1
save 300 10
save 60 10000
## 從記憶體儲存資料到磁碟的策略
## 當有 1 條 keys 資料改變時,900 秒重新整理到磁碟一次
## 當有 10 條 keys 資料改變時,300 秒重新整理到磁碟一次
## 當有 1W 條 keys 資料改變時,60 秒重新整理到磁碟一次
rdbcompression yes
## dump .rdb 資料庫時,是否壓縮資料對象
dbfilename dump.rdb
## dump 資料庫時,資料庫儲存的檔案名稱
dir /usr/local/redis/data/
## dump 時資料庫儲存的路徑
#-----------------------------------------------------------------------------------------------------
appendonly no
## 是否開啟日誌功能,如果開啟每次操作都會記錄一條日誌,相當於 mysql 的 binlog ,但是會影響效率
#appendfilename appendonly.aof
## AOF 檔案名稱,預設為 ppendonly.aof
#appendfsync everysec
## 同步資料到磁碟的規則,
## no 不主動寫入磁碟,依賴與系統的寫入,一般 30 秒左右寫入一次,效能最好,但是持久化沒有保證。
## everysec 每秒強制寫入磁碟一次,在效能跟持久化方面折中,推薦使用。
## always 每次收到寫操作就立即強制寫入磁碟,是最有保證的完全持久化,但是速度慢。
#no-appendfsync-on-rewrite yes
## 在日誌重寫時,不進行命令追加操作,而只是將其放在緩衝區裡,避免與命令的追加造成磁碟 IO 上的衝突
#auto-aof-rewrite-percentage 100
## 當前 AOF 檔案的大小是上次日誌重寫得到的 AOF 檔案大小的兩倍時,自動啟動新的日誌重寫過程
#auto-aof-rewrite-min-size 64mb
## 當前 AOF 檔案啟動新的日誌重寫過程的最小值,避免剛啟動 redis 時由於檔案較小導致頻繁重寫
#-----------------------------------------------------------------------------------------------------
四、啟動 Redis
[[email protected] ~]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[[email protected] ~]# sysctl vm.overcommit_memory=1
## 調整核心參數,如果不調整 redis 會報一個警告資訊
[[email protected] ~]# mkdir /usr/local/redis/data # 建立 data 目錄
[[email protected] ~]# mkdir /usr/local/redis/logs # 建立 logs 目錄
[[email protected] ~]# redis-server /usr/local/redis/redis.conf # 啟動 redis ,需要指定設定檔路徑
[[email protected] ~]# netstat -anpt | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1176/redis-server
五、測試 Redis
-----------------------------------------------------------------------------------------------------
[[email protected] ~]# redis-cli
redis 127.0.0.1:6379> set password 123
OK
redis 127.0.0.1:6379> get password
"123"
redis 127.0.0.1:6379> quit
## 登陸原生 redis ,寫入 keys/value ,讀取 keys
[[email protected] ~]# ls /usr/local/redis/data/
## 沒有產生 dump.rdb ,因為半持久化的 save 規則沒有觸發
[[email protected] ~]# redis-cli shutdown
[[email protected] ~]# ls /usr/local/redis/data/
dump.rdb
## 當關閉 redis 的時候,會將記憶體中的資料儲存為 dump.rdb
[[email protected] ~]# redis-server /usr/local/redis/redis.conf
[[email protected] ~]# redis-cli
redis 127.0.0.1:6379> get password
"123"
redis 127.0.0.1:6379> quit
## redis 啟動後從 dump.rdb 檔案中讀取資料,所以資料依然存在
-----------------------------------------------------------------------------------------------------
[[email protected] ~]# rm -rf /usr/local/redis/data/*
[[email protected] ~]# redis-cli
redis 127.0.0.1:6379> set password abcdef
OK
redis 127.0.0.1:6379> get password
"abcdef"
redis 127.0.0.1:6379> quit
[[email protected] ~]# kill -9 `cat /usr/local/redis/logs/redis.pid`
## 當不是正常關閉 redis 時,如 kill -9 、redis 伺服器突然宕機等
[[email protected] ~]# ls /usr/local/redis/data/
## 是不會將記憶體中的資料同步到磁碟的,也就是說不會產生 dump.rdb 檔案
[[email protected] ~]# redis-server /usr/local/redis/redis.conf
[[email protected] ~]# redis-cli
redis 127.0.0.1:6379> get password
(nil)
redis 127.0.0.1:6379> quit
## 這時啟動 redis ,探索資料丟失了 。如果不能忍受這種丟失可以啟動 AOF 全持久化。
Redis 開源快取資料庫