redis簡介與持久化
阿新 • • 發佈:2019-04-06
管理 mark 否則 業務場景 file zxvf 事務 集群 動態
一 . redis簡介
redis屬於NoSQL學名(not only sql)
特點:
存儲結構與mysql這一種關系型數據庫完全不同,nosql存儲的是key value形式
nosql有很多產品,都有自己的api和語法,以及業務場景
產品種類:
Mongodb
redis
Hbase hadoop
NoSQL和SQL的區別
應用場景不同,sql支持關系復雜的數據查詢,nosql反之
sql支持事務性,nosql不支持
redis的特性
Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件
redis是c語言編寫的,支持數據持久化,是key -value類型數據庫。
應用在緩存,隊列系統中
redis支持數據備份,也就是master-slave模式
redis的優勢
性能高,讀取速度10萬次每秒
寫入速度8萬次每秒
所有操作支持原子性
# 這麽快的原因是: 1.完全基於內存數據庫, 2.redis完全是由C語言寫的單線程數據庫
用作緩存數據庫,數據放在內存中
替代某些場景下的mysql,如社交類app
大型系統中,可以存儲session信息,購物車訂單
redis的安裝
1 . yum安裝
#前提得配置好阿裏雲yum源,epel源
#查看是否有redis包
yum list redis
#安裝redis
yum install redis -y
#安裝好,啟動redis
systemctl start redis
# 檢查redis是否工作了
redis-cli #redis 客戶端工具
#進入交互式環境後,執行ping,返回pong表示安裝成功
127.0.0.1:6379> ping
PONG
2 . 源碼編譯安裝
# 編譯安裝的優勢
1. 編譯安裝可以擴展第三方模塊
2.編譯安裝可以統一路徑,Linux軟件約定安裝在 /opt下
3.軟件倉庫版本一般比較低, 編譯安裝可以根據需求, 安裝最新版本
1.下載redis源碼
wget http: //download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮
tar -zxvf redis-4.0.10.tar.gz
3.切換redis源碼目錄
cd redis-4.0.10.tar.gz
4.編譯源文件
make
5.編譯好後,src/目錄下有編譯好的redis指令
6.make install 安裝到指定目錄,默認在/usr/local/bin
# 可以直接make && make install
redis可執行文件
./redis-benchmark //用於進行redis性能測試的工具
./redis-check-dump //用於修復出問題的dump.rdb文件
./redis-cli //redis的客戶端
./redis-server //redis的服務端
./redis-check-aof //用於修復出問題的AOF文件
./redis-sentinel //用於集群管理
redis的配置文件
redis配置文件名為 redis.conf # 這個文件可以自定義, 比如: # touch redis.s18.conf 內容如下 grep -v ‘^$‘ redis.conf |grep -v "^#" > redis.s18.conf # 去掉空格和#開頭的數據寫到redis.s18.conf中 # 然後 vim redis.s18.conf bind 192.168.81.132 #redis啟動地址 protected-mode yes #開啟redis安全模式 port 6800 #更改redis端口 daemonize yes #redis後臺啟動 pidfile /var/run/redis_6379.pid loglevel notice # 日誌等級是notice logfile "" requirepass 666 #設置redis的密碼 redis沒有賬號
啟動redis服務端
# redis-server 指定加載的文件
# 如果redis-server 後面什麽也不指定, 會以非daemon的方式來運行,且默認服務端口為6379。
redis-server redis.s18.conf
使用redis
redis-cli -h 192.168.81.132 -p 6800
# 參數解釋 -h 指定主機地址 -p 指定redis端口
# 登錄之後通過auth指令 驗證密碼 如果沒有密碼直接ping
使用ping命令,確保redis正常可用回復了一個pong
redis的數據類型
redis是一種高級的key:value存儲系統,其中value支持五種數據類型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
redis簡單指令
keys * # 查看數據庫所有的key
type key #查看key的類型
EXPIRE addr 20 #給addr這個key設置20秒的過期時間
ttl key #查看key的過期剩余時間
persist key # 取消key的過期時間
exists key # 判斷key存在 存在返回1 否則0
del keys # 刪除key 可以刪除多個
dbsize # 計算key的數量
set key value # 設置key value
# set name attila
get key # get name 得到的是attila
二 . redis持久化
Redis是一種內存型數據庫,一旦服務器進程退出,數據庫的數據就會丟失,為了解決這個問題,
Redis提供了兩種持久化的方案,將內存中的數據保存到磁盤中,避免數據的丟失。
1 . RDB持久化
RDB(持久化)
內存數據保存到磁盤 可以定期執行, 也可以手動(save)執行
RDB持久化產生的RDB文件是一個經過壓縮的二進制文件,這個文件被保存在硬盤中,redis可以通過這個文件還原數據庫當時的狀態。
在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)
優點:速度快,適合做備份,主從復制就是基於RDB持久化功能實現
rdb通過再redis中使用save命令觸發 rdb
# (在redis文件下)開啟rdb功能,vim redis-rdb.conf 內容如下:
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379 # 這個需要mkdir -p /data/6379
dbfilename dbmp.rdb # 當觸發save之後會生成dbmp.rdb這個文件
bind 127.0.0.1
save 900 1 # 每隔900秒有一個操作就執行持久化
save 300 10
save 60 10000
開啟redis服務端,支持rdb功能
redis-server redis-rdb.conf
登錄redis,寫入數據,手動執行save觸發持久化,會生成一個二進制的數據文件 dbmp.rdb
redis-cli # 登錄redis
127.0.0.1:6379> set name attila
OK
127.0.0.1:6379> save
OK
# 然後退出redis 在進來,keys * name還在,如果不持久化,就沒有數據
2 . aof持久化
AOF(append-only log file)
記錄服務器執行的所有變更操作命令(例如set del等),並在服務器啟動時,通過重新執行這些命令來還原數據集
AOF 文件中的命令全部以redis協議的格式保存,新命令追加到文件末尾。
優點:最大程序保證數據不丟
缺點:日誌記錄非常大
# 在redis文件下 vim redis-aof.conf 寫入如下數據:
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379 # 也需要創建/data/6379
appendonly yes
appendfsync everysec
aof持久化配置的兩條參數
appendonly yes
appendfsync always 總是修改類的操作
everysec 每秒做一次持久化
no 依賴於系統自帶的緩存大小機制
啟動redis服務
redis-server redis-aof.conf
檢查.data/6379文件
[[email protected] 6379]# ls
appendonly.aof redis.log
登錄redis, 寫入數據
redis-cli # 登錄redis
127.0.0.1:6379> set name attila
OK
127.0.0.1:6379> save
OK
# 最後退出redis, 重新登錄redis, 輸入keys * 檢查結果name還在
實時檢查appendonly.aof文件信息
# 再開一個窗口,然後檢測實時動態
[[email protected] 6379]# tail -f appendonly.aof
三 . redis在不重啟的狀態下,從rdb持久化切換到aof持久化
redis版本必須是2.2版本以上
# 1.啟動rdb方式的redis
# 2.通過命令切換為aof模式,僅僅是臨時生效,切換到aof,切換後還得修改配置文件
127.0.0.1:6379> CONFIG set appendonly yes #開啟AOF功能
OK
127.0.0.1:6379> CONFIG SET save "" #關閉RDB功能
OK
3.還得修改redis的配置文件,讓他下次重啟也是aof
修改redis-rdb.conf 為如下配置,以後重啟也是aof了
daemonize yes
port 6379
logfile /opt/6379/redis.log
dir /opt/6379
appendonly yes
appendfsync everysec
# 重啟redis數據庫
# 4.至此redis已經切換到 aof模式下了
redis簡介與持久化