redis理論知識

Redis理論php

 

Redis memcached 基本相似,只是redis能夠把數據同步到磁盤java

Redis是一個開源,內存存儲的數據結構服務器,可用做數據庫,高速緩存和消息隊列代理。mysql

雲數據庫RDS 是一個穩定可靠。可彈性伸縮的在線數據服務庫服務。基於飛天分佈式系統和全SSD盤高性能存儲,支持Mysql sql server PPAS(兼容ORICAL)redis

 

redis 是一個高性能的 key-value 數據庫。 redis 的出現,很大程度補償了memcached 這類 key:value 存儲的不足,在部分場合能夠對關係數據庫起到很好的補充做用。它提供了 java,C,C++,perl,JavaScript,Python,Ruby,Erlang,PHP 客戶端,使用很方便。sql

Redismemcached同樣全部數據都是保存在內存中,不一樣的是redis不按期的經過異步方式保存到磁盤上 (這稱爲「半持久化模式」);也能夠把每一次數據變化都寫入到一個 append only file(aof)裏面(這稱爲「全持久化模式」)數據庫

Redis支持主從同步,數據能夠從master向任意數量的slave上同步,slave能夠是關聯其餘slavemasterjson

 

Redis的優勢緩存

1.redis不單單支持簡單的key-values類型的數據,也支持list set zset hash等數據類型的存儲服務器

2.Redis支持數據的備份,master-slave模式的數據備份數據結構

3.Redis 支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載使用

Redis只會緩存全部的key信息,若是redis發現內存的使用超過了必定的閥值,將觸發swap的操做,根據計算得出哪些key對應的values須要swap到磁盤,同時在內存中清除。這種特性可使得redis保持超過其機器自己內存大小的數據。固然,機器自己的內存必需要可以保持全部的key,這些數據是不會進行swap操做的。同時,因爲將內存中的數據swap到了磁盤中的時候,提供服務的主線程和進行swap操做的子線程會共享這部份內存,因此,若是須要更新,則會阻塞這個操做,直到swap完成操做後纔會進行修改。

當從redis中讀取數據的時候,如果須要從swap中加載相應的數據,再返回給請求方,這裏就存在一個IO線程池的問題。在默認狀況下,redis會出現阻塞,即完成swap加載後,纔會響應。因此,設置適當的IO線程池的大小,從swap中加載數據的讀取請求作併發處理,減少阻塞的時間。

 

Redis Sentinel 提供高可用

Redis Cluster 提供自動分區

 

 

Gearman

利用gearman實現redis緩存mysql

Gearman 是一個支持分佈式的任務分發框架:

Gearman Job Server:Gearman 核心程序,須要編譯安裝並以守護進程形式運行在後臺。後臺守護進程,維護一個隊列。

Gearman Client:能夠理解爲任務的請求者。

Gearman Worker:任務的真正執行者,通常須要本身編寫具體邏輯並經過守護進程方式運行,Gearman Worker 接收到 Gearman Client 傳遞的任務內容後,會按順序處理。

大體流程:下面要編寫的 mysql 觸發器,就至關於 Gearman 的客戶端。修改表,插入表就至關於直接下發任務。而後經過 lib_mysqludf_json UDF(user defined functions) 庫函數將關係數據映射爲 JSON 格式,而後在經過 gearman-mysql-udf 插件將任務加入到 Gearman 的任務隊列中,最後經過redis_worker.phpworker.phpmysql數據異步複製到redis,也就是 Gearman worker 端來完成 redis 數據庫的更新。

Mysql 要實現與外部程序互通的最好方式經過mysql UDF(user defined functions)來實現。爲了讓mysql能將數據傳入到gearman中,這裏使用了lib_mysqludf_json UDF庫函數將關係數據映射爲 JSON 格式gearman只接受字符串做爲入口參數),而後在經過 gearman-mysql-udf 插件將任務加入到 Gearman 的任務隊列中

相關文章
相關標籤/搜索