標籤:server 用戶端 python 關聯式資料庫 周期性
NoSQL之redis介紹:
remote rerictionry server 是一個基於key-value索引值對的持久化資料庫儲存系統,redis和memcached快取服務很像。
但是redis支援的資料存放區類型更豐富,包括string、list、set、和zset等,這些資料類型都支援push/pop、add/remove
及取交集、並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。
與memcached快取服務一樣,為了保證效率,資料都是緩衝在記憶體中提供服務,和memcached不同的是(memcached目前好像也支援持久化,未驗證),redis持久化
快取服務還會周期性的把更新的資料寫入到磁碟以及把修改的操作記錄追加到檔案裡記錄下來,比memcached更有優勢的是,
redis還支援master-slave同步。redis的出現,在一定程度上彌補了memcached這類key-value記憶體快取服務的不足,
在一些場合可以對關聯式資料庫起到很好的補充作用,redis提供了python,ruby,php等用戶端,使用很方便
http://www.redis.io/documentation
http://www.redis.cn
redis優點:
持久化:與memcached不同,可以持久化儲存資料
效能很高:redis能支援超過100K+每秒的讀寫頻率。
豐富的資料類型:redis支援二進位的string,lists,hashes,sets及ordered sets等資料類型操作。
原子:redis的所有操作都是原子性的,同時redis還支援對幾個操作全並後的原子性執行。
豐富的特性:redis還持之publish/subscribe,通知,key到期等等特性。
redis支援異機主從複製
redis資料類型:
string
hash
list
set
sorted set
redis的應用情境:
傳統的mysql+memcached的網站架構遇到的問題
mysql資料庫實際上是適合進行海量資料存放區的,加上通過memcached將熱點資料存放到記憶體cache裡,達到加速資料訪問的目的。
絕大部分公司都曾經使用過這樣的架構,但隨著業務資料量的不斷增加,和訪問量的持續增長,很多問題就會暴漏出來
1.需要不斷的對mysql進行拆庫拆表,memcached也需不斷跟著擴容,擴容和維護工作佔據大量開發營運時間
2.memcached跟mysql資料庫的資料一致性問題
3.memcached資料命中率低或down機,會導致大量訪問直接穿透到資料庫,導致mysql無法支撐業務訪問
4.跨機房cache同步一致性問題
redis的最佳應用情境:
1.redis最佳使用情境是全部資料in-memory
2.redis更多情境是作為memcached的替代品來使用,需要開發支援
3.當需要除了key-value之外的更多資料類型支援時,使用redis更合適
4.支援持久化
5.需要負載平衡的情境(redis主從同步)
redis安裝:
擷取redis:
cd /usr/local/src/wget http://download.redis.io/releases/redis-3.0.7.tar.gz
安裝:
tar -zxf redis-3.0.7.tar.gzcd redis-3.0.7cp redis.conf /etc/redis.confmake MALLOC=jemallocmake PREFIX=/usr/local/redis install
配置環境變數:
echo ‘PATH=/usr/local/redis/bin:$PATH‘ >>/etc/profile
. /etc/profile
啟動redis:
nohup redis-server /etc/redis.conf &
用戶端工具的使用:
redis-cli -h 127.0.0.1 -p 6379
用戶端常用命令:
set no002 sunwukong #設定一個鍵,值為sunwukongget no002#擷取鍵no002的值del no002#刪除鍵為no002的值keys *#擷取當前reds下的所有keyinfo #查看當前redis的狀態資訊
redis主從複製的說明:
Redis的主從複製功能非常強大,一個master可以擁有多個slave,而一個slave又可以擁有多個slave,如此下去,形成了強大的多級伺服器叢集架構。下面是關於redis主從複製的一些特點:
1.master可以有多個slave
2.除了多個slave連到相同的master外,slave也可以串連其他slave形成圖狀結構
3.主從複製不會阻塞master。也就是說當一個或多個slave與master進行初次同步資料時,master可以繼續處理client發來的請求。相反slave在初次同步資料時則會阻塞不能處理client的請求。
4.主從複製可以用來提高系統的延展性,我們可以用多個slave 專門用於client的讀請求,比如sort操作可以使用slave來處理。也可以用來做簡單的資料冗餘
5.可以在master禁用資料持久化,只需要注釋掉master 設定檔中的所有save配置,然後只在slave上配置資料持久化。
下面介紹下主從複製的過程
當設定好slave伺服器後,slave會建立和master的串連,然後發送sync命令。無論是第一次同步建立的串連還是串連斷開後的重新連 接,master都會啟動一個後台進程,將資料庫快照儲存到檔案中,同時master主進程會開始收集新的寫命令並緩衝起來。後台進程完成寫檔案 後,master就傳送檔案給slave,slave將檔案儲存到磁碟上,然後載入到記憶體恢複資料庫快照集到slave上。接著master就會把緩衝的命 令轉寄給slave。而且後續master收到的寫命令都會通過開始建立的串連發送給slave。從master到slave的同步資料的命令和從 client發送的命令使用相同的協議格式。當master和slave的串連斷開時slave可以自動重建立立串連。如果master同時收到多個 slave發來的同步串連命令,只會使用啟動一個進程來寫資料庫鏡像,然後發送給所有slave。
redis主從複製的配置
redis從操作:
[[email protected] ~]# cat /etc/redis.conf |grep ‘slaveof‘# Master-Slave replication. Use slaveof to make a Redis instance a copy of# slaveof <masterip> <masterport>
在此行下新添加一行
slaveof 192.168.1.100 6379
儲存重啟主和從的redis服務出現下面的資訊表示主從同步正常
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/84/05/wKioL1eDbAGxsdKsAAQgJ2xB8FQ547.png-wh_500x0-wm_3-wmp_4-s_2244421217.png" style="float:none;" title="主.png" alt="wKioL1eDbAGxsdKsAAQgJ2xB8FQ547.png-wh_50" />
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/84/06/wKiom1eDbASB2t8hAAQkNfKf0PE513.png-wh_500x0-wm_3-wmp_4-s_1396005675.png" style="float:none;" title="從.png" alt="wKiom1eDbASB2t8hAAQkNfKf0PE513.png-wh_50" />
驗證:
在redis主伺服器上建立一個資料
[[email protected] ~]# redis-cli 127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> set mydata john.gouOK127.0.0.1:6379> get mydata"john.gou"127.0.0.1:6379>
在redis從伺服器上驗證
[[email protected] ~]# redis-cli 127.0.0.1:6379> get mydata"john.gou"127.0.0.1:6379> set mykey 123(error) READONLY You can‘t write against a read only slave.
ps:可以看到從伺服器上的資料已經同步,並且不可以在從上添加資料。redis主從同步搭建完成
此部落格的redis主從同步優點和同步過程抄錄於http://blog.csdn.net/yangzhenzhen/article/details/8512292
本文出自 “初心、始終” 部落格,請務必保留此出處http://gouyc.blog.51cto.com/1594451/1825516
redis介紹、主從配置