redis簡介與持久化

一 . 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安裝mysql

複製代碼
#前提得配置好阿里雲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 . 源碼編譯安裝redis

# 編譯安裝的優點
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文件

[root@localhost 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文件信息

# 再開一個窗口,而後檢測實時動態
[root@localhost 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模式下了
複製代碼
相關文章
相關標籤/搜索