使用Tomcat+Redis來實現集群部署中的Session共享問題:一、工作中因為要使用到Tomcat集群部署,此時就涉及到了Session共享問題,主要有三種解決方案: 1、使用...
基于nginx tomcat redis分布式web應用的session共享配置:一、前言 nginx 作為目前最流行的開源反向代理HTTP Server,用于實現資源緩存、web server負載均衡等...
緩存作為系統性能優化的一大殺手锏,幾乎在每個系統或多或少的用到緩存。有的使用本地內存作為緩存,有的使用本地硬盤作為緩存,有的使用緩存服務器。但是無論使用哪種緩存,接口中的方法都是差不多。筆者最近的項目使用的是memcached作為緩存服務器,由于memcached的一些限制,現在想換redis作為緩存服務器。思路就是把memached的客戶端換成redis客戶端,接口依然是原來的接口,這樣對系統可以無損替換,接口不變,功能不變,只是客戶端變了。本文不介紹緩存的用法,不介紹redis使用方法,不介紹memcached與redis有何區別。只是實現一個redis客戶端,用了jedis作為第三方連接工具。
Redis在攜程內部得到了廣泛的使用,根據客戶端數據統計,整個攜程全部Redis的讀寫請求在200W QPS/s,其中寫請求約10W QPS/S,很多業務甚至會將Redis當成內存數據庫使用。
通常情況下,Tomcat、Jetty等Servlet容器,會默認將Session保存在內存中。如果是單個服務器實例的應用,將Session保存在服務器內存中是一個非常好的方案。但是這種方案有一個缺點,就是不利于擴展。
應用程序處理的數據越來越多,對并發訪問的要求越來越大,程序的性能卻并沒有提升。發布日期越近,我們的心情就越想熱鍋上的螞蟻,那叫一個急啊!不停的做性能剖析,做性能調優,卻百思不得其解。幸好,我們及時遇到了Redis,讓性能瞬間提升了百倍,真的有一種山窮水盡疑無路,柳暗花明又一村的感覺!今天我們就簡單介紹一下Redis的一些用法,給大家的性能調優提供一種新的思路。
最近在調整游戲的后臺架構,之前因為需要快速出產品,所以整個代碼都揉成一團,也基本沒有做任何分層處理。現在服務器端的開發也開始逐漸招進來,所以打算打算換一套統一的架構,以后做新游戲只要做其中的業務邏輯即可。
Redis 經常被人們認為是一種 NoSQL 軟件,但其本質上是一種分布式的數據結構服務器軟件,提供了一個分布式的基于內存的數據結構存儲服務。在實現上,僅使用一個線程來處理具體的內存數據結構,保證它的數據操作命令的原子特性;它同時還支持基于 Lua 的腳本,每個 Redis 實例使用同一個 Lua 解釋器來解釋運行 Lua 腳本,從而 Lua 腳本也具備了原子特性,這種原子操作的特性使得基于共享內存模式的分布式系統的協調方式成了可能,而且具備了很大的吸引力,和復雜的基于消息的機制不同,基于共享內存的模式對于很多技術人員來說明顯容易理解的多,特別是那些已經了解多線程或多進程技術的人。在具體實踐中,也并不是所有的分布式系統都像分布式數據庫系統那樣需要嚴格的模型的,而所使用的技術也不一定全部需要有堅實的理論基礎和數學證明,這就使得基于 Redis 來實現分布式系統的協調技術具備了一定的實用價值,實際上,人們也已經進行了不少嘗試。本文就其中的一些協調技術進行介紹。
在開發界有一個長期引起爭議的說法,那就是所謂的10x程序員是否存在?這個說法是Brooks, F. P在《沒有銀彈》中首次提出的,他認為在普通設計師(程序員)和優秀設計師(程序員)之間,有著 10 倍多的差異。對于10x程序員是否存在這個問題,開源鍵值存儲數據庫系統Redis的開發者antirez(Salvatore Sanfilippo)認為,如果把編程工作看作是一門“非線性”學科的話,那么不僅存在10x程序員,甚至連100x程序員這種異獸都有,同時他還 列出 了自己認為的10x程序員必備的一些素質,可供各位開發者對照一下。
隨著很多公司使用Redis作為緩存和高性能存儲方案,Redis的可用性也變得越來越重要。目前 比較主流的HA方案是Sentinel+Redis主從復制。Sentinel是Redis官方自帶的高可用中間件,運維簡單、穩定,建議使用Redis 3.0及以上穩定版本。
Redis在攜程內部得到了廣泛的使用,根據客戶端數據統計,整個攜程全部Redis的讀寫請求在200W QPS/s,其中寫請求約10W QPS/S,很多業務甚至會將Redis當成內存數據庫使用。這樣,就對Redis多數據中心提出了很大的需求,一是為了提升可用性,解決數據中心DR(Disaster Recovery)問題;二是提升訪問性能,每個數據中心可以讀取當前數據中心的數據,無需跨機房讀數據。在這樣的需求下,XPipe應運而生 。
摘要:本文介紹基于MySQL及Redis搭建統一的kv存儲服務:常用部署方式及其特點,Cluster manager,MySQL和Redis集群方案,以及Sync數據同步服務。
在工作中接觸到了redis,Redis是一個非常高效的key-value的數據庫,在項目中廣泛使用,但是redis很明顯的缺點是對 于內存的處理,在項目上線之初,必須對內存規劃合理,否則很容易出現內存爆了的現象,一般較合理的內存大小為電腦物理內存的3/5。
在 redis 中,允許用戶設置最大使用內存大小 server.maxmemory,在內存限定的情況下是很有用的。譬如,在一臺 8G 機子上部署了 4 個 redis 服務點,每一個服務點分配 1.5G 的內存大小,減少內存緊張的情況,由此獲取更為穩健的服務。 redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。
【編 者按】在公司的發展中,保證服務器的可擴展性對于擴大企業的市場需要具有重要作用,因此,這對架構師提出了一定的要求。Octivi聯合創始人兼軟件架構 師Antoni Orfin將向你介紹一個非常簡單的架構,使用HAProxy、PHP、Redis和MySQL就能支撐每周10億請求。同時,你還能了解項目未來的橫向 擴展途徑及常見的模式。
Redis的復制功能是完全建立在之前我們討論過的基于內存快照的持久化策略基礎上的,也就是說無論你的持久化策略選擇的是什么,只要用到了Redis的復制功能,就一定會有內存快照發生,那么首先要注意你的系統內存容量規劃,原因可以參考我上一篇文章中提到的Redis磁盤IO問題。
哈希表是 redis 的核心結構之一,在 redis 的源碼中, dict.c 和 dict.h 就定義了 redis 所使用的哈希結構,在這篇文章中,我們將對 dict.c 和 dict.h 進行注解和分析,籍此加深對 redis 的理解。
Retwis-py 是一個基于 Python 和 Redis 開發的仿 Twitter 微博系統。
在說正題之前需要先了解幾種定義:字典、壓縮列表與跳躍表。 字典:非常常見的數據結構,key-value結構。 常見的實現有紅黑樹(stl中的map),哈希表(stl中的unordered_map)。紅黑樹的查找操作具有O(logN)的時間復雜度。哈希表的查找操作具有O(1)的時間復雜度。 redis中的字典使用哈希表作為底層實現。 壓縮列表:由一些列特殊編碼的連續內存塊組成的順序型數據結構。
在之前的這篇文章 在ExpressJS(NodeJS)中 設置二級域名跨域共享Cookie 中提及將Session存放到Mongodb中,其中有很多講解的不是很詳細。