Redis 開源緩存數據庫

   Redis 是一個開源的,高性能的 key-value 系統,能夠用來緩存或存儲數據。Redis 數據能夠持久化,而且支持多種數據類型:字符串(string),列表 (list),哈希(hash),集合(set)和有序集合(sorted set)。可以對關係型數據庫起到很好的補充做用。它還提供了多種客戶端 Python,Ruby,Erlang,PHP ,能夠方便調用。mysql

持久化:redis

      Redis 是一種內存數據庫(跟 memcache 相似),在數據存取效率方面很優秀,因爲內存中的數據時刻面臨丟失的危險,Redis 提供了兩種持久化機制,及時將內存中的數據寫入磁盤。sql

    RDB 利用存儲快照的方式把內存數據按期寫入磁盤,半持久化數據庫

    AOF 利用寫日誌的方式(相似 mysql 的 binlog),每執行一條更改 Redis 數據的命令,就寫入到磁盤的一個 aof 文件中vim

    Redis 默認開啓 RDB 模式,關閉 AOF 模式,由於 AOF 更耗資源,可是對數據安全極高,稱爲全持久化,按需選擇哪一種模式。緩存

主從功能:安全

    爲了防止 Redis 磁盤損壞,致使數據丟失,Redis 提供了複製功能,將一個主數據庫的數據自動同步到從數據庫,防止數據丟失。服務器

主從原理:app

一、從數據庫啓動後,向主數據庫發送 SYNC 命令tcp

二、主數據庫收到 SYNC 命令後開始保存快照,在此期間全部發給主數據庫的命令都被緩存起來

三、快照保存完後,主數據庫把快照和緩存的命令一塊兒發給從數據庫

四、從數據庫保存主數據發來的快照文件,並依次執行主數據庫發來的緩存命令

     在同步過程當中,從數據庫不會阻塞,它默認使用同步以前的數據繼續響應客戶端發來的命令

下載地址:https://code.google.com/p/redis/downloads/list

1、安裝 Redis

[root@study src]# tar zxf redis-2.6.10.tar.gz

[root@study src]# cd redis-2.6.10

[root@study redis-2.6.10]# make

[root@study redis-2.6.10]# make install

2、調整 Redis

[root@study ~]# mkdir /usr/local/redis

[root@study ~]# cd !$

[root@study redis]# cp ../src/redis-2.6.10/redis.conf .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-cli .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-server .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-sentinel .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-benchmark .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-check-aof .

[root@study 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 檢查本地數據文件

3、編輯 redis.conf

[root@study redis]# mv redis.conf redis.conf.bak

[root@study 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 時因爲文件較小致使頻繁重寫

#-----------------------------------------------------------------------------------------------------

4、啓動 Redis

[root@study ~]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

[root@study ~]# sysctl vm.overcommit_memory=1

## 調整內核參數,若是不調整 redis 會報一個警告信息

[root@study ~]# mkdir /usr/local/redis/data # 建立 data 目錄

[root@study ~]# mkdir /usr/local/redis/logs # 建立 logs 目錄

[root@study ~]# redis-server /usr/local/redis/redis.conf # 啓動 redis ,須要指定配置文件路徑

[root@study ~]# netstat -anpt | grep redis

tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1176/redis-server

5、測試 Redis

-----------------------------------------------------------------------------------------------------

[root@study ~]# 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

[root@study ~]# ls /usr/local/redis/data/

## 沒有生成 dump.rdb ,由於半持久化的 save 規則沒有觸發

[root@study ~]# redis-cli shutdown

[root@study ~]# ls /usr/local/redis/data/

dump.rdb

## 當關閉 redis 的時候,會將內存中的數據保存爲 dump.rdb

[root@study ~]# redis-server /usr/local/redis/redis.conf

[root@study ~]# redis-cli

redis 127.0.0.1:6379> get password

"123"

redis 127.0.0.1:6379> quit

## redis 啓動後從 dump.rdb 文件中讀取數據,因此數據依然存在

-----------------------------------------------------------------------------------------------------

[root@study ~]# rm -rf /usr/local/redis/data/*

[root@study ~]# 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

[root@study ~]# kill -9 `cat /usr/local/redis/logs/redis.pid`

## 當不是正常關閉 redis 時,如 kill -9 、redis 服務器忽然宕機等

[root@study ~]# ls /usr/local/redis/data/

## 是不會將內存中的數據同步到磁盤的,也就是說不會生成 dump.rdb 文件

[root@study ~]# redis-server /usr/local/redis/redis.conf

[root@study ~]# redis-cli

redis 127.0.0.1:6379> get password

(nil)

redis 127.0.0.1:6379> quit

## 這時啓動 redis ,發現數據丟失了 。若是不能忍受這種丟失能夠啓動 AOF 全持久化

相關文章
相關標籤/搜索