redis數據存儲解決方案_第1頁
redis數據存儲解決方案_第2頁
redis數據存儲解決方案_第3頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、redis 數據存儲解決方案篇一: Redis 詳解與常見問題解決方案Redis 簡介redis 是一個key-value 存儲系統。和Memcachec類似, 它支持存儲的 value 類型相對更多,包括 string( 字符串 ) 、 list( 鏈表)、set(集合)、zset(sortedset -有序集合)和hash (哈希類型)。這些數據類型都支持push/pop、 add/remove 及取交集并集和差集及更豐富的操作, 而且這些 操作都是原子性的。在此基礎上, redis 支持各種不同方式 的排序。與memcached樣,為了保證效率,數據都是緩存 在內存中。區別的是 redi

2、s 會周期性的把更新的數據寫入磁 盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實 現了 master-slave( 主從)同步。 安裝:安裝 Redis官方網站: p> 官方下載: p> windows 版: https:/ServiceStack/redis-windows下載安裝包:解壓啟動 Redis解壓版本后,找到,修改配置文件內容,內容如下。支持數據結構redis 提供五種數據類型: String , hash, list , set 及 zset(sortedset) 。 Redis 配置文件主要參數配置1、指定 Redis 監聽端口,默認端口為 6379。por

3、t 63792、綁定的主機地址bind3、當客戶端閑置多長時間后關閉連接, 如果指定為 0, 表示關閉該功能 timeout 3004、指定日志記錄級別, Redis 總共支持四個級別: debug 、 verbose 、 notice 、 warning ,默認為 verbose 。loglevel verbose5、日志記錄方式,默認為標準輸出,如果配置Redis為守護進程方式運行,而這里又配置為日志記錄方式為標準 輸出,則日志將會發送給 /dev/null 。 logfile stdout6、設置數據庫的數量,默認數據庫為0,可以使用SELECT命令在連接上指定數據庫 id。databa

4、ses 167、指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合。save8、Redis 默認配置文件中提供了三個條件:save 900 1save 300 10save 60 10000分別表示 900 秒( 15分鐘)內有 1個更改, 300 秒(5 分鐘)內有 10 個更改以及 60 秒內有 10000 個更改。9、指定存儲至本地數據庫時是否壓縮數據,默認為 yes ,Redis采用LZF壓縮,如果為了節省 CPU時間,可以關閉該 選項, 但會導致數據庫文件變的巨大。 rdbcompression yes10、指定本地數據庫文件名,默認值為。dbfilenam

5、e11、指定本地數據庫存放目錄。dir ./12、設置當本機為 slave 服務時,設置 master 服務的 IP 地址及端口,在 Redis 啟動時,它會自動從 master 進行數據同步。slaveof13、當 master 服務設置了密碼保護時, slave 服務連 接 master 的密碼。 masterauth14、設置 Redis 連接密碼,如果配置了連接密碼,客 戶端在連接 Redis 時需要通過 AUTH 命令提供密碼,默認關 閉。requirepass foobared15、設置同一時間最大客戶端連接數,默認無限制,Redis 可以同時打開的客戶端連接數為 Redis 進程

6、可以打開 的最大文件描述符數,如果設置 maxclients 0 ,表示不作 限制。當客戶端連接數到達限制時, Redis 會關閉新的連接 并向客戶端返回 max number of clientsreached 錯誤信息。maxclients 12816、指定 Redis 最大內存限制, Redis 在啟動時會把數 據加載到內存中,達到最大內存后, Redis 會先嘗試清除已 到期或即將到期的 Key,當此方法處理后,仍然到達最大內 存設置, 將無法再進行寫入操作, 但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區。17、指定是否在每次更新操作

7、后進行日志記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啟,可能 會在斷電時導致一段時間內的數據丟失。 因為 redis 本身同 步數據文件是按上面 save 條件來同步的,所以有的數據會 在一段時間內只存在于內存中。默認為 no。appendonly no18、指定更新日志文件名,默認為appendfilename19、指定更新日志條件,共有 3 個可選值:no:表示等操作系統進行數據緩存同步到磁盤(快)always :表示每次更新操作后手動調用 fsync() 將數據 寫到磁盤(慢,安全)everysec :表示每秒同步一次(折衷,默認值)appendfsync everys

8、ec20、設置在向客戶端應答時,是否把較小的包合并為 一個包發送,默認為開啟 glueoutputbuf yes21、指定在超過一定的數量或者最大的元素超過某一 臨界值時,采用一種特殊的哈希算法。hash-max-zipmap-value 51222、指定是否激活重置哈希,默認為開啟(后面在介 紹 Redis 的哈希算法時具體介紹) 。activerehashing yes23、slave 根據指定的時間間隔向服務器發送ping 請求。時間間隔可以通過 repl_ping_slave_period 來設置。 默認 10 秒repl-ping-slave-period10 24、當一個 slav

9、e 失去和 master 的連接,或者同步正在進行中, slave 的行為有兩種可能:設 置 為 "yes"(1) 如 果 slave-serve-stale-data( 默認值 ) ,slave 會繼續響應客戶端請求, 可能是正常數據, 也可能是還沒獲得值的空數據。(2) 如果 slave-serve-stale-data 設置為 "no" , slave 會回復 " 正在從 master 同步 (SYNCwith master in progress)" 來處理各種請求,除了 INFO 和 SLAVEOF 命令slave-serv

10、e-stale-datayes25、Redis 主從配置redis 支持 master-slave 的主從配置,配置方法是在 從機的配置文件中指定 slaveof 參數為主機的 ip 和 port 即 可。slaveof 6379篇二: Redis 分布式解決方案 -CoidsCodis 是一個分布式 解決方案 , 對于上層的應用來 說 , 連接到 CodisProxy 和連接原生的 Redis Server 沒有 明顯的區別 ( 不支持的命令列表 ), 上層應用可以像使用單 機的 Redis 一樣使用 , Codis 底層會處理請求的轉發 , 不 停機的數據遷移等工作 , 所有后邊的一切事情

11、 , 對于前面 的客戶端來說是透明的 , 可以簡單的認為后邊連接的是一 個內存無限大的 Redis 服務 .Codis 由四部分組成 : Codis Proxy(codis-proxy) 實現 redis 協議,由于本身是無狀態的,因此可以部署很多 個節點? ? Codis Manager (codis-config)是 codis 的管理工具,包括添加 / 刪除 redis 節點添加刪除 proxy 節點,發起數據遷移等操作,自帶 httpserver ,支持管理后臺方式管理配置Codis Redis(codis-server) 是 codis 維護的 redis分支,基于分支,加入了 sl

12、ot 的支持和原子的數據遷移命令 ;codis-proxy 和 codis-config 只能和這個版本的 redis 交互才能正常運 行? ZooKeeper 用于 codis 集群元數據的存儲 , 維護 codis 集群節點Codis 優缺點-優點? 對客戶端透明,與 codis 交互方式和 redis 本身交 互一樣? 支持在線數據遷移,遷移過程對客戶端透明? 有簡單的管理和監控界面? 支持高可用,無論是 redis 數據存儲還是代理節點? 自動進行數據的均衡分配? 最大支持 1024 個 redis 實例,存儲容量海量? 高性能-缺點? 采用自有的 redis 分支,不能與原版的 re

13、dis保持同 ?的性muti? 如果 codis 的 proxy 只有一個的情況下, redis 能會下降 20%左右 ? 某些命令不支持,比如事務命令? 國內開源產品,活躍度相對弱一些Codis 架構Codis 的性能 ( 代理 +兩個 redis 節點1. wget1.tar -zxvf1. wget zookeeper/1. vi /.bash_profile配置 go 環境變量還有 zk homehtml1. vi /.bash_profile1. PATH=$PATH:$HOME/bin3. export PATH4. JAVA_HOME=/java/_765. PATH=$JAVA

14、_HOME/bin:$PATH6. CLASSPATH=.:$JAVA_HOME/lib/:$JAVA_HOME/lib/7. export JAVA_HOME8. export CLASSPATH9.10.ZOOKEEPER_HOME=/java/11.12.13.GOROOT=/java/go14.exportGOPATH=/java/codis15.PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$ZOOKEEPER_HOME/ bin16. export PATH1. source /.bash_profile1. mkdir codis1. go get -u

15、-d /CodisLabs/codis進入到 coids 里面執行 make 編譯代碼篇三:基于 redis 的緩存方案假設最近對 redis 的使用方案進行了思考和假設,和前輩 們交流了下,整理如下。方案假設:1. 所有實體對象(公司,產品,經理等)放入 redis 緩存。(刷新緩存時的最小單位就是某實體,比如刷新一個 經理的緩存)。2. 靜態頁面與現有方案相同,整頁面緩存,經常更新的放本地,不經常的放 memcache或者redis。3. 靜態頁面訂閱頁面中需要的實體對象,后臺更新實體模型時,會發布相關實體更新的消息,不使用監聽的方式,使用基于配置的函數調用實現)重新生成并緩存靜態頁 面。

16、4. 不知道老郭的注解有沒關于 aop 方(來自 : 小龍文 檔網:redis數據存儲解決方案)面的,有就牛掰了,我們只需在原有方法的 before 和 after 中加入實體更新消息的代 碼即可。5. 針對 IP 登錄的問題,用 redis 的命令容易實現(key-value , INCR命令),只需與其他緩存的 key統一命名 或者混淆 key 名。問題:中實體的存儲方案, 主要兩種, 一種是只使用 key-value ,對象數據存 string 。第二種,每個對象用 hash 存放。可能會導致的區別就是查詢和存儲的效率問題。2. 本地是否能架設 redis 服務,如果一個頁面中幾個 小塊

17、都要請求 redis 緩存中的數據,會有多次網絡請求,性 能受影響。庫中多對象、多層級的設計、命名等問題。坑: 服務的災容。默認的存儲和備份方式會導致宕機之后, 能恢復的內容有限。所以還是要有相應的模塊重新生成緩存, 至少要把所有的產品等寫入緩存。研究:針 對 問 題 1 : 官 方 解 釋 memory-optimization#use-hashes-when-possible盡 量 用hash 替代雜亂的多組簡單的 keys 。 redis 本身數據結構多 keys 比單一 hash 存多 fields 占用內存大。 不過 redis 的性 能測試暫時不支持 hash 的測試。針對問題 1:ThinkPHP 提供的 S() 方法的用到的 redis 的驅動中,只實現了 set 、 get 等操作 key-value 的方法, 關于操作 hash 方法需要用擴展。 (具體可用 phpredis ) 附錄: phpredis 擴展安裝T

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論