redis安裝使用和數據持久化

一、redis介紹

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的values類型相對更多,包括字符串、列表、哈希散列表、集合,有序集合。

與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。


本質:將數據保存在內存中

用途:redis可以做緩存;redis可以做消息隊列

特性:

    可以做持久化:在配置文件設置,如果你要保存到文件,可添加設置,就算電腦不小心關機了,數據還是在的。這個是自己來定的。支持存放數據的格式多(5種格式)

實現數據持久化的兩種方式:

    (1)使用截圖的方式,將內存中的數據不斷寫入磁盤(性能高,但可能會引起一定程度的數據丟失)

    (2)使用類似mysql的方式,記錄每次更新的日誌


二、redis優勢

1、爲什麼要使用redis?使用redis有哪些好處?

(1) 速度快,因爲數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)

(2) 支持豐富數據類型,支持string,list,set,sorted set,hash

(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行

(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

2、redis相比memcached有哪些優勢?

(1) memcached所有的值均是簡單的字符串,redis作爲其替代者,支持更爲豐富的數據類型

(2) redis的速度比memcached快很多

(3) redis可以持久化其數據

三、redis安裝配置

cd /usr/local/src/
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
tar xzf redis-3.0.6.tar.gz
cd redis-3.0.6
make && make install PREFIX=/usr/local/redis-3.0.6
cd utils/
cp redis_init_script /etc/init.d/redis
sed -i 's%/usr/local/%/usr/local/redis/%g' /etc/init.d/redis
ln -s  /usr/local/redis-3.0.6/  /usr/local/redis
ln -s  /usr/local/redis/redis.conf  /etc/redis.conf
chmod +x /etc/init.d/redis
sed -i '/^daemonize no/cdaemonize yes' /etc/redis.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
/etc/init.d/redis start


Redis的配置:

  daemonize:如需要在後臺運行,把該項的值改爲yes

  pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址

  bind:指定redis只接收來自該IP的請求,如果不設置,那麼將處理所有請求,在生產環節中最好設置該項

  port:監聽端口,默認爲6379

  timeout:設置客戶端連接時的超時時間,單位爲秒

  loglevel:等級分爲4級,debug,revbose,notice和warning。生產環境下一般開啓notice

  logfile:配置log文件地址,默認使用標準輸出,即打印在命令行終端的端口上

  database:設置數據庫的個數,默認使用的數據庫是0

  save:設置redis進行數據庫鏡像的頻率

  rdbcompression:在進行鏡像備份時,是否進行壓縮

  dbfilename:鏡像備份文件的文件名

  dir:數據庫鏡像備份的文件放置的路徑

  slaveof:設置該數據庫爲其他數據庫的從數據庫

  masterauth:當主數據庫連接需要密碼驗證時,在這裏設定

  requirepass:設置客戶端連接後進行任何其他指定前需要使用的密碼

  maxclients:限制同時連接的客戶端數量

  maxmemory:設置redis能夠使用的最大內存

  appendonly:開啓appendonly模式後,redis會把每一次所接收到的寫操作都追加到appendonly.aof文件中,當redis重新啓動時,會從該文件恢復出之前的狀態

  appendfsync:設置appendonly.aof文件進行同步的頻率

  vm_enabled:是否開啓虛擬內存支持

  vm_swap_file:設置虛擬內存的交換文件的路徑

  vm_max_momery:設置開啓虛擬內存後,redis將使用的最大物理內存的大小,默認爲0

  vm_page_size:設置虛擬內存頁的大小

  vm_pages:設置交換文件的總的page數量

  vm_max_thrrads:設置vm IO同時使用的線程數量


四、redis常用命令


redis-cli -h host -p port -a password
AUTH password                  #驗證密碼是否正確
CONFIG GET port               #獲取端口信息
select 6                      #選擇數據庫
CONFIG GET timeout            #獲取timeout超時時間
CONFIG SET timeout 5000        #設置timeout超時時間爲5000
keys *                        #查看所有的key,生產環境不要用
flushdb                       #清空redis
type key                      #判斷key的類型
EXISTS key                    #檢查給定的key是否存在
dbsize                         # 數據庫中key的數量
monitor                       #redis正在做什麼
slowlog get
slowlog get 10               #查看日誌
info                         #查看服務器信息
sort price                   #排序
sort price desc              ## 逆序排序
set key value                #設置key的值,若存在則覆蓋
get key                     #獲取key對應的值
EXISTS key                  #查看是否存在該元素
del key                     #刪除元素

HMSET user name "張三" age 18    #存多個哈希值
HGET user age                     #取哈希值
HGETALL user                       #獲取在哈希表中指定 user 的所有字段和值
HDEL user name                     #刪除user的哈希表name字段
INCR key                    #將 key 中儲存的數字值增一
INCRBY key increment        #將 key 所儲存的值加上給定的增量值(increment)
INCRBYFLOAT key increment   #將 key 所儲存的值加上給定的浮點增量值(increment)
DECR key                    #將 key 中儲存的數字值減一
DECRBY key decrement        #key 所儲存的值減去給定的減量值(decrement)

LPUSH key value1 [value2]    #將一個或多個值插入到列表頭部
LPUSHX key value              #將一個值插入到已存在的列表頭部
RPUSH key value1 [value2]     #在列表中添加一個或多個值
RPUSHX key value              #爲已存在的列表添加值
LLEN key                      #獲取列表長度
LPOP key                       #移出並獲取列表的第一個元素
RPOP key                       #移除並獲取列表最後一個元素

SADD key member1 [member2]     #向集合添加一個或多個成員
SCARD key                      #獲取集合的成員數
SMEMBERS key                    #返回集合中的所有成員
SISMEMBER key member            #判斷 member 元素是否是集合 key 的成員
SDIFF key1 [key2]               #返回給定所有集合的差集
SINTER key1 [key2]               #返回給定所有集合的交集

五、redis的持久化

redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的數據庫記錄定時 dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入文件)

1、持久化方式說明

RDB持久化是指在指定的時間間隔內將內存中的數據集快照寫入磁盤,實際操作過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換之前的文件,用二進制壓縮存儲。

1.png

AOF持久化以日誌的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。

2.png

2、兩種持久化方式的優勢和劣勢

RDB存在哪些優勢呢?

(1). 一旦採用該方式,那麼你的整個Redis數據庫將只包含一個文件,這對於文件備份而言是非常完美的。比如,你可能打算每個小時歸檔一次最近24小時的數 據,同時還要每天歸檔一次最近30天的數據。通過這樣的備份策略,一旦系統出現災難性故障,我們可以非常容易的進行恢復。

(2). 對於災難恢復而言,RDB是非常不錯的選擇。因爲我們可以非常輕鬆的將一個單獨的文件壓縮後再轉移到其它存儲介質上。

(3). 性能最大化。對於Redis的服務進程而言,在開始持久化時,它唯一需要做的只是fork出子進程,之後再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了。

(4). 相比於AOF機制,如果數據集很大,RDB的啓動效率會更高。


RDB又存在哪些劣勢呢?

(1). 如果你想保證數據的高可用性,即最大限度的避免數據丟失,那麼RDB將不是一個很好的選擇。因爲系統一旦在定時持久化之前出現宕機現象,此前沒有來得及寫入磁盤的數據都將丟失。

(2). 由於RDB是通過fork子進程來協助完成數據持久化工作的,因此,如果當數據集較大時,可能會導致整個服務器停止服務幾百毫秒,甚至是1秒鐘。


AOF的優勢有哪些呢?

(1). 該機制可以帶來更高的數據安全性,即數據持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事實上,每秒同步也是異步完成的,其 效率也是非常高的,所差的是一旦系統出現宕機現象,那麼這一秒鐘之內修改的數據將會丟失。而每修改同步,我們可以將其視爲同步持久化,即每次發生的數據變 化都會被立即記錄到磁盤中。可以預見,這種方式在效率上是最低的。至於無同步,無需多言,我想大家都能正確的理解它。

(2). 由於該機制對日誌文件的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌文件中已經存在的內容。然而如果我們本次操 作只是寫入了一半數據就出現了系統崩潰問題,不用擔心,在Redis下一次啓動之前,我們可以通過redis-check-aof工具來幫助我們解決數據 一致性的問題。

(3). 如果日誌過大,Redis可以自動啓用rewrite機制。即Redis以append模式不斷的將修改數據寫入到老的磁盤文件中,同時Redis還會創 建一個新的文件用於記錄此期間有哪些修改命令被執行。因此在進行rewrite切換時可以更好的保證數據安全性。

(4). AOF包含一個格式清晰、易於理解的日誌文件用於記錄所有的修改操作。事實上,我們也可以通過該文件完成數據的重建。


AOF的劣勢有哪些呢?

(1). 對於相同數量的數據集而言,AOF文件通常要大於RDB文件。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。

(2). 根據同步策略的不同,AOF在運行效率上往往會慢於RDB。總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。


二者選擇的標準,就是看系統是願意犧牲一些性能,換取更高的緩存一致性(aof),還是願意寫操作頻繁的時候,不啓用備份來換取更高的性能,待手動運行save的時候,再做備份(rdb)。rdb這個就更有些 eventually consistent的意思了。


3、兩種持久化方式的配置

(1).RDB持久化配置

Redis會將數據集的快照dump到dump.rdb文件中。此外,我們也可以通過配置文件來修改Redis服務器dump快照的頻率,在打開配置文件之後,我們搜索save,可以看到下面的配置信息:


save 900 1              #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump內存快照。

save 300 10             #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump內存快照。

save 60 10000           #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump內存快照。


(2).AOF持久化配置

在Redis的配置文件中存在三種同步方式,它們分別是:


appendfsync always      #每次有數據修改發生時都會寫入AOF文件。

appendfsync everysec    #每秒鐘同步一次,該策略爲AOF的缺省策略。

appendfsync no          #從不同步。高效但是數據不會被持久化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章