Redis 非關係型資料庫 ( Nosql )
簡介:
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
shell > tar zxf redis-2.6.10.tar.gzshell > cd redis-2.6.10; make; make install
二、調整 Redis
shell > mkdir /usr/local/redisshell > cd !$shell > cp ../src/redis-2.6.10/redis.conf .shell > cp ../src/redis-2.6.10/src/redis-cli .shell > cp ../src/redis-2.6.10/src/redis-server .shell > cp ../src/redis-2.6.10/src/redis-sentinel .shell > cp ../src/redis-2.6.10/src/redis-benchmark .shell > cp ../src/redis-2.6.10/src/redis-check-aof .shell > 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
shell > mv redis.conf redis.conf.bakshell > 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 # 當有 1 條 keys 資料改變時,900 秒重新整理到磁碟一次
save 300 10 # 當有 10 條 keys 資料改變時,300 秒重新整理到磁碟一次
save 60 10000 # 當有 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 # 同步資料到磁碟的規則: #1、 no 不主動寫入磁碟,依賴與系統的寫入,一般 30 秒左右寫入一次,效能最好,但是持久化沒有保證。 #2、 everysec 每秒強制寫入磁碟一次,在效能跟持久化方面折中,推薦使用。 #3、 always 每次收到寫操作就立即強制寫入磁碟,是最有保證的完全持久化,但是速度慢。#no-appendfsync-on-rewrite yes # 在日誌重寫時,不進行命令追加操作,而只是將其放在緩衝區裡,避免與命令的追加造成磁碟 IO 上的衝突#auto-aof-rewrite-percentage 100 # 當前 AOF 檔案的大小是上次日誌重寫得到的 AOF 檔案大小的兩倍時,自動啟動新的日誌重寫過程#auto-aof-rewrite-min-size 64mb # 當前 AOF 檔案啟動新的日誌重寫過程的最小值,避免剛啟動 redis 時由於檔案較小導致頻繁重寫#-----------------------------------------------------------------------------------------------------
## 設定在向用戶端應答時,是否把較小的包合并為一個包發送
四、啟動 Redis
shell > echo "vm.overcommit_memory = 1" >> /etc/sysctl.confshell > sysctl vm.overcommit_memory=1
## 調整核心參數,如果不調整 redis 會報一個警告資訊
shell > mkdir /usr/local/redis/data # 建立 data 目錄shell > mkdir /usr/local/redis/logs # 建立 logs 目錄shell > redis-server /usr/local/redis/redis.conf # 啟動 redis ,需要指定設定檔路徑shell > netstat -anpt | grep redistcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1176/redis-server
五、測試 Redis
-----------------------------------------------------------------------------------------------------
shell > redis-cliredis 127.0.0.1:6379> set password 123OKredis 127.0.0.1:6379> get password"123"redis 127.0.0.1:6379> quit
## 登陸原生 redis ,寫�� keys/value ,讀取 keys
shell > ls /usr/local/redis/data/
## 沒有產生 dump.rdb ,因為半持久化的 save 規則沒有觸發
shell > redis-cli shutdownshell > ls /usr/local/redis/data/dump.rdb
## 當關閉 redis 的時候,會將記憶體中的資料儲存為 dump.rdb
shell > redis-server /usr/local/redis/redis.confshell > redis-cliredis 127.0.0.1:6379> get password"123"redis 127.0.0.1:6379> quit
## redis 啟動後從 dump.rdb 檔案中讀取資料,所以資料依然存在
-----------------------------------------------------------------------------------------------------
shell > rm -rf /usr/local/redis/data/*shell > redis-cliredis 127.0.0.1:6379> set password abcdefOKredis 127.0.0.1:6379> get password"abcdef"redis 127.0.0.1:6379> quitshell > kill -9 `cat /usr/local/redis/logs/redis.pid`
## 當不是正常關閉 redis 時,如 kill -9 、redis 伺服器突然宕機等
shell > ls /usr/local/redis/data/
## 是不會將記憶體中的資料同步到磁碟的,也就是說不會產生 dump.rdb 檔案
shell > redis-server /usr/local/redis/redis.confshell > redis-cliredis 127.0.0.1:6379> get password(nil)redis 127.0.0.1:6379> quit
## 這時啟動 redis ,探索資料丟失了 。如果不能忍受這種丟失可以啟動 AOF 全持久化。
下面關於Redis的文章您也可能喜歡,不妨參考下:
Ubuntu 14.04下Redis安裝及簡單測試
Redis主從複製基本配置
Redis叢集明細文檔
Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis
Redis系列-安裝部署維護篇
CentOS 6.3安裝Redis
Redis安裝部署學習筆記
Redis設定檔redis.conf 詳解
Redis 的詳細介紹:請點這裡
Redis 的:請點這裡
本文永久更新連結地址: