1. 程式人生 > >redis簡介與持久化

redis簡介與持久化

管理 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簡介與持久化