国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Redis在外勤通系統(tǒng)高速緩存中的應(yīng)用研究

2014-07-02 18:04:45李彬朱亞興
無(wú)線互聯(lián)科技 2014年1期

李彬 朱亞興

摘 要:本文基于Redis的高速緩存機(jī)制在外勤通系統(tǒng)中的應(yīng)用進(jìn)行了研究,詳細(xì)說(shuō)明了Redis這個(gè)高速緩存數(shù)據(jù)庫(kù)的支持持久化,豐富的數(shù)據(jù)結(jié)構(gòu),主從復(fù)制以及Virtual Memory功能等特性。

關(guān)鍵詞:Redis;Memcached;高速緩存

1 引言

在低碳經(jīng)濟(jì)的時(shí)代背景下,全球各大行業(yè)都在尋求節(jié)能、環(huán)保、高效的管理模式。這既是保證企業(yè)正常生產(chǎn)經(jīng)營(yíng),實(shí)現(xiàn)公司健康可持續(xù)發(fā)展的長(zhǎng)久之計(jì),也是企業(yè)適應(yīng)市場(chǎng)需要,降低成本,增加效益,改善環(huán)境,提高企業(yè)競(jìng)爭(zhēng)力的必要選擇。我們開(kāi)發(fā)的外勤通系統(tǒng)就是遵循綠色辦公的宗旨,為所有具有外巡,外服的戶外工作業(yè)務(wù)的中小企業(yè)降低成本,企業(yè)初期零投入,不需服務(wù)器、系統(tǒng)研發(fā)等軟硬件投入;將定位技術(shù)與智能手機(jī)客戶端相結(jié)合,利用運(yùn)營(yíng)商的GSM/WCDMA等無(wú)線網(wǎng)絡(luò),為企業(yè)提供對(duì)外勤人員實(shí)時(shí)、精準(zhǔn)的管理手段。企業(yè)能隨時(shí)掌握在外工作人員的具體位置和行走軌跡,同時(shí)實(shí)現(xiàn)考勤簽到、快速審批、位置標(biāo)注、語(yǔ)音群聊,數(shù)據(jù)上報(bào),區(qū)域預(yù)警,更好地進(jìn)行地理化分析、業(yè)績(jī)審視,改變傳統(tǒng)的辦公模式,實(shí)現(xiàn)無(wú)紙化和移動(dòng)化辦公,快速響應(yīng)客戶需求和有效管理員工,管理更加方便和人性化,深度鞏固企業(yè)在市場(chǎng)中主體地位和增強(qiáng)企業(yè)核心競(jìng)爭(zhēng)力。

外勤通系統(tǒng)在給所有客戶帶來(lái)方便的同時(shí),也需要面對(duì)網(wǎng)站訪問(wèn)量漸增大、內(nèi)容不斷豐富和用戶期望值不斷提高,用戶應(yīng)用需要提供更快的訪問(wèn)速度和承受更大的負(fù)荷量,所有這些都依賴于網(wǎng)站服務(wù)器的基礎(chǔ)設(shè)施,擴(kuò)展服務(wù)器或者鏡像服務(wù)器是一個(gè)基本的解決方案,但擴(kuò)展服務(wù)器會(huì)增加大量的運(yùn)行維護(hù)工作,同時(shí)增加了運(yùn)營(yíng)成本,為了解決這個(gè)問(wèn)題高速緩存服務(wù)器Cache不失為一個(gè)較好的解決方案,本文主要介紹開(kāi)源內(nèi)存數(shù)據(jù)庫(kù)Redis在高速緩存方面的的特性及其應(yīng)用。

2 Redis

2.1 Redis簡(jiǎn)介

Redis是一個(gè)基于內(nèi)存的高性能key/value數(shù)據(jù)庫(kù)[1],全名為遠(yuǎn)程字典服務(wù)(Remote Dictionary Server),與Memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中,也可以這樣說(shuō)Redis就是用空間來(lái)?yè)Q取時(shí)間,從而達(dá)到提高響應(yīng)速度的目的。Memcached是一個(gè)免費(fèi)開(kāi)源的、高性能的、具有分布式內(nèi)存對(duì)象的緩存系統(tǒng),它通過(guò)減輕數(shù)據(jù)庫(kù)負(fù)載加速動(dòng)態(tài)Web應(yīng)用。目前全球很多用戶都在使用它來(lái)構(gòu)建自己的大負(fù)載網(wǎng)站或提高訪問(wèn)量超大網(wǎng)站的響應(yīng)速度[1]。相對(duì)于Redis來(lái)說(shuō),Memcached具有協(xié)議簡(jiǎn)單,便捷的libenent事件處理,內(nèi)存管理方式的高效性,以及互不通信的分布式等特性。

Redis與Memcached的最大區(qū)別是Redis會(huì)周期性把更新的數(shù)據(jù)備份到磁盤(pán)上或者把修改操作寫(xiě)入記錄文件,并在此基礎(chǔ)上實(shí)現(xiàn)了主從同步。Redis很大程度補(bǔ)償了Memcached鍵值存儲(chǔ)的不足,在部分場(chǎng)合對(duì)關(guān)系數(shù)據(jù)庫(kù)起到很好的補(bǔ)充作用。Redis提供了更豐富的數(shù)據(jù)類型,如字符串(String),鏈表(List)、集合(Set)、有序集合(Zset)、哈希(Hash)等。

2.2 Redis的特性

Redis和Memached都是C/S結(jié)構(gòu)的遠(yuǎn)程Cache實(shí)現(xiàn),它們都可以作為緩存,但是Redis又有自己獨(dú)特的地方。這里重點(diǎn)講解Redis區(qū)別于Memcached的特征。

2.2.1 支持持久化

Redis和Memeache一樣都是把數(shù)據(jù)全部存在內(nèi)存中,但是Redis會(huì)根據(jù)數(shù)據(jù)的更新量和更新間隔時(shí)間定期進(jìn)行異步更新,將數(shù)據(jù)保存在磁盤(pán)上,實(shí)現(xiàn)數(shù)據(jù)的持久化操作。另外也可以通過(guò)配置redis.conf文檔配置持久化操作的時(shí)間間隔和臨界數(shù)據(jù)量,這樣Redis就自動(dòng)在一定的時(shí)間間隔和數(shù)據(jù)超過(guò)臨界值時(shí)進(jìn)行持久化操作。如果在Redis 宕機(jī)或者突然斷電的情況下,保存在Redis中的數(shù)據(jù)還是會(huì)丟失,所以Redis還提供了一種附加檔案功能AOF[2]。

通過(guò)把redis.cong中的appendonly屬性設(shè)置為“yes”來(lái)使用AOF功能,配置好AOF之后Redis每次接受到持久化命令時(shí),就會(huì)將命令添加在配置文檔中,重新啟動(dòng)Redis時(shí),配置文檔中的指令會(huì)重新執(zhí)行,從而達(dá)到恢復(fù)Redis數(shù)據(jù)庫(kù)的狀態(tài)。

2.2.2 豐富的數(shù)據(jù)結(jié)構(gòu)

Redis的數(shù)據(jù)結(jié)構(gòu)非常豐富,Redis支持簡(jiǎn)單的key/value類型數(shù)據(jù),其中Key是String類型,而value除了常規(guī)的String之外,還包括list,set,zset,hash等。這些新的屬性都是在Redis2.0中才有。Redis對(duì)所有的數(shù)據(jù)類型都提供 push/pop、add/remove、執(zhí)行服務(wù)端的并集、交集等功能,這些操作都是具有原子性的,它還支持各種不同的排序能力[1]。

2.2.3 支持主從復(fù)制

Redis的主從復(fù)制可以通過(guò)配置redis.conf文件中的Replication字段來(lái)實(shí)現(xiàn),Redis的主從復(fù)制具有如下特點(diǎn):

(1)支持多級(jí)主從(master/slave),即一個(gè)主服務(wù)器可以連接多個(gè)從服務(wù)器

(2)從服務(wù)器可以再連接其他的從服務(wù)器

(3)主服務(wù)器和從服務(wù)器同步的數(shù)據(jù)復(fù)制是非阻塞的

其中利用Redis的主從復(fù)制特性,可以實(shí)現(xiàn)以下功能:

(1)實(shí)現(xiàn)讀寫(xiě)分離,如用主服務(wù)實(shí)現(xiàn)讀操作,從服務(wù)實(shí)現(xiàn)寫(xiě)操作。

(2)備份數(shù)據(jù),利用主從服務(wù)器的方便性來(lái)備份,專門(mén)做臺(tái)從服務(wù)器用于備份功能。

2.2.4 Virtual Memory功能

由于Redis受到了物理內(nèi)存的限制,數(shù)據(jù)庫(kù)的容量有限,對(duì)于海量數(shù)據(jù)的高性能讀寫(xiě)并不適合。Virtual Memory的功能就是為了解決這個(gè)問(wèn)題而生,Virtual Memory功能也是Redis 2.0新增的功能,目的就是為了提高Redis對(duì)海量數(shù)據(jù)的高性能讀寫(xiě)能力,它把很少使用的value保存再磁盤(pán)中,而只把key存在內(nèi)存中,從而達(dá)到提高系統(tǒng)性能的目的。

3 Redis的應(yīng)用

隨著外勤通系統(tǒng)客戶量不斷增加,每天客戶上傳和請(qǐng)求的數(shù)據(jù)量也是呈幾百,幾千倍的增加,面對(duì)不斷增加的龐大信息量數(shù)據(jù)庫(kù)的負(fù)擔(dān)越來(lái)越重,單純的靠增加服務(wù)器的數(shù)量所產(chǎn)生的運(yùn)營(yíng)和維護(hù)費(fèi)用又特別大,而在速度就是市場(chǎng)的互聯(lián)網(wǎng)時(shí)代,快速相應(yīng)是一個(gè)不變的需求。Redis由于其豐富數(shù)據(jù)結(jié)構(gòu),良好的性能,優(yōu)良的數(shù)據(jù)持久化能力占領(lǐng)了越來(lái)越大市場(chǎng)。我們的外勤通系統(tǒng)也引入了對(duì)Redis的應(yīng)用。

Redis在外勤通系統(tǒng)中的應(yīng)用主要表現(xiàn)在一下幾個(gè)方面:

⑴在應(yīng)用集群中,作為中央會(huì)話,保存web中會(huì)話,保存終端鑒權(quán)后的token,通過(guò)鑒權(quán)之后不同的用戶登錄就展示不同的功能模塊。

save(String key, String value, Integer seconds){

Jedis jedis = null;

try {

jedis=(Jedis) pool.getResource();

jedis.set(key, value);

jedis.expire(key, seconds);

} catch (Exception e) {

e.printStackTrace();

}finally{

pool.returnResource(jedis);

}

}

⑵在通信中,作為發(fā)布訂閱隊(duì)列使用,web 發(fā)布消息,進(jìn)入Redis 發(fā)布訂閱頻道,通信中心消費(fèi)此頻道消息,所有的信息發(fā)布都在Redis中進(jìn)行,從而提高了響應(yīng)的速度。

public boolean sendMsg(String msg){

boolean rebool = true;

Jedis jedis = null;

try {

jedis=(Jedis) pool.getResource();

jedis.publish("kingfisher.*", msg);

} catch (Exception e) {

e.printStackTrace();

rebool = false;

}finally{

pool.returnResource(jedis);

}

return rebool;

}

⑶在重發(fā)消息以及離線消息的集合索引和隊(duì)列,保證在終端關(guān)機(jī)或者不在服務(wù)區(qū)范圍內(nèi)沒(méi)有接受到的信息有一個(gè)重發(fā)機(jī)制,Redis中會(huì)保存近100小時(shí)之內(nèi)的用戶信息,從而實(shí)現(xiàn)快速轉(zhuǎn)發(fā),超過(guò)100小時(shí)會(huì)自動(dòng)清空Redis。

def sended(mobile,msgstr,msg):

row = MysqlDao().findClient(mobile)

if row is not None:

pool = MyRedis.getPool()

r = redis.Redis(connection_pool=pool)

r.sadd('sended_%s' % mobile,msg.bid)

r.set('s_msg_%s' % msg.bid,msgstr)

r.expire('s_msg_%s' % msg.bid,36000) #超過(guò)100小時(shí)不再為客戶端保留信息

⑷應(yīng)用MONGODB附近位置的檢索

⑸應(yīng)用mongodb gridFS=對(duì)文件中轉(zhuǎn)(PC ANDROID IOS)

⑹應(yīng)用mongodb mapreduce并行計(jì)算,用戶從redis中調(diào)度生成當(dāng)天用戶訪問(wèn)行為,調(diào)度生成當(dāng)天服務(wù)運(yùn)行行為以及調(diào)度生成當(dāng)天小時(shí)行為。

4 展望

外勤通系統(tǒng)由于其通用,高效,低碳等特點(diǎn)自推出以來(lái)就備受關(guān)注,現(xiàn)在外勤通的客戶群已經(jīng)達(dá)到了2000多人,隨著客戶的不斷增加,服務(wù)器的壓力也越來(lái)越大,引入了Redis之后系統(tǒng)的響應(yīng)速度大大提高。但是隨著外勤通系統(tǒng)版本的不斷升級(jí),客戶群的持續(xù)增加數(shù)據(jù)庫(kù)的壓力還是一個(gè)潛在的問(wèn)題,為了更好的滿足客戶的需求,對(duì)服務(wù)器的優(yōu)化將是一個(gè)長(zhǎng)期的工作。

[參考文獻(xiàn)]

[1]王心妍.emcached和Redis在高速緩存方面的應(yīng)用[J].無(wú)線互聯(lián)科技,2012(9).

[2]楊艷,李煒,王純.內(nèi)存數(shù)據(jù)庫(kù)在高速緩存方面的應(yīng)用[J].現(xiàn)代電信科技,2011(12).

罗田县| 界首市| 凤阳县| 唐河县| 舞钢市| 读书| 新丰县| 瓦房店市| 清镇市| 清河县| 平邑县| 青神县| 九龙城区| 锡林浩特市| 凭祥市| 连州市| 松滋市| 兴山县| 青田县| 虹口区| 饶河县| 山西省| 正定县| 芒康县| 遵义市| 芜湖市| 绵竹市| 江西省| 台湾省| 萍乡市| 平乡县| 凤山县| 苗栗县| 仙居县| 宣汉县| 临江市| 修武县| 南丹县| 岑溪市| 新野县| 汉寿县|