Redis 開源快取資料庫

來源:互聯網
上載者:User

標籤: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 開源快取資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.