redis數(shù)據(jù)庫是一種基于內(nèi)存可持久化的鍵值對非關(guān)系性數(shù)據(jù)庫。為了保證效率,redis的數(shù)據(jù)都是緩存在內(nèi)存中的,區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步。
Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。存盤可以有意無意的對數(shù)據(jù)進行寫操作。由于完全實現(xiàn)了發(fā)布/訂閱機制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴展性和數(shù)據(jù)冗余很有幫助。
Redis是基于內(nèi)存管理的數(shù)據(jù)庫,所以內(nèi)存開銷方面需要進一步優(yōu)化:
①.首先最重要的一點是不要開啟Redis的VM選項,即虛擬內(nèi)存功能,這個本來是作為Redis存儲超出物理內(nèi)存數(shù)據(jù)的一種數(shù)據(jù)在內(nèi)存與磁盤換入換出的一個持久化策略,但是其內(nèi)存管理成本也非常的高,并且我們后續(xù)會分析此種持久化策略并不成熟,所以要關(guān)閉VM功能,請檢查你的redis.conf文件中 vm-enabled 為 no。
②.其次最好設(shè)置下redis.conf中的maxmemory選項,該選項是告訴Redis當使用了多少物理內(nèi)存后就開始拒絕后續(xù)的寫入請求,該參數(shù)能很好的保護好你的Redis不會因為使用了過多的物理內(nèi)存而導(dǎo)致swap,最終嚴重影響性能甚至崩潰。
③.如果在Redis內(nèi)部存儲的大部分數(shù)據(jù)是數(shù)值型的話,Redis內(nèi)部采用了一個shared Integer的方式來省去分配內(nèi)存的開銷,即在系統(tǒng)啟動時先分配一個從1~n 那么多個數(shù)值對象放在一個池子中,如果存儲的數(shù)據(jù)恰好是這個數(shù)值范圍內(nèi)的數(shù)據(jù),則直接從池子里取出該對象,并且通過引用計數(shù)的方式來共享,這樣在系統(tǒng)存儲了大量數(shù)值下,也能一定程度上節(jié)省內(nèi)存并且提高性能
2.redis數(shù)據(jù)存儲位置
我們知道redis是基于內(nèi)存存儲數(shù)據(jù)的,那么數(shù)據(jù)在掉電后會造成數(shù)據(jù)丟失,我們可以亦通過配置生成相關(guān)的日志文檔以及將數(shù)據(jù)在磁盤進行備份。這樣下次開機是可以保證數(shù)據(jù)仍然可以拿到。
3.redis數(shù)據(jù)庫常用數(shù)據(jù)類型已經(jīng)相關(guān)操作
過期時間設(shè)置常用操作:
EXPIRE 將key的生存時間設(shè)置為ttl秒
PEXPIRE 將key的生成時間設(shè)置為ttl毫秒
EXPIREAT 將key的過期時間設(shè)置為timestamp所代表的的秒數(shù)的時間戳
PEXPIREAT 將key的過期時間設(shè)置為timestamp所代表的的毫秒數(shù)的時間戳