您好,登錄后才能下訂單哦!
Redis理論
Redis 和memcached 基本類似,只是redis可以把數據同步到磁盤
Redis是一個開源,內存存儲的數據結構服務器,可用作數據庫,高速緩存和消息隊列代理。
云數據庫RDS 是一個穩定可靠。可彈性伸縮的在線數據服務庫服務。基于飛天分布式系統和全SSD盤高性能存儲,支持Mysql sql server PPAS(兼容ORICAL)
redis 是一個高性能的 key-value 數據庫。 redis 的出現,很大程度補償了memcached 這類 key:value 存儲的不足,在部分場合可以對關系數據庫起到很好的補充作用。它提供了 java,C,C++,perl,JavaScript,Python,Ruby,Erlang,PHP 等客戶端,使用很方便。
Redis與memcached一樣所有數據都是保存在內存中,不同的是redis不定期的通過異步方式保存到磁盤上 (這稱為“半持久化模式”);也可以把每一次數據變化都寫入到一個 append only file(aof)里面(這稱為“全持久化模式”)。
Redis支持主從同步,數據可以從master向任意數量的slave上同步,slave可以是關聯其他slave的master。
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.php(worker.php將mysql數據異步復制到redis),也就是 Gearman 的 worker 端來完成 redis 數據庫的更新。
Mysql 要實現與外部程序互通的最好方式通過mysql UDF(user defined functions)來實現。為了讓mysql能將數據傳入到gearman中,這里使用了lib_mysqludf_json UDF庫函數將關系數據映射為 JSON 格式(gearman只接受字符串作為入口參數),然后在通過 gearman-mysql-udf 插件將任務加入到 Gearman 的任務隊列中。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。