[轉]Redis 與Mysql通訊

來源:互聯網
上載者:User

標籤:

http://blog.csdn.net/hpb21/article/details/7852934

找了點資料看了下。學習心得如下:

1 Mysql更新Redis

   Mysql更新Redis借鑒memcache與mysql通訊,利用mysql udf,每有更新操作觸發更新redis操作。不足在高並發時mysql壓力較大,且針對每張表均需增刪改觸發,且Redis伺服器不好更換(不知道有沒有方法)。

2 Redis更新Mysql

 最簡單的就是讀redis->寫mysql.但是在高並發下,這樣就不太適合了,因此考慮利用訊息佇列每隔的固定時間更新Mysql。

但是資料中主鍵為自增時,目前想法如下:

   第一,Redis採用tempId為key,id為空白,通過mysql udf重寫資料到緩衝如 ,清空緩衝臨時資料。

  第二,redis key值不採用Id,採用欄位uuid,再通過mysql udf 同步redis緩衝 id。

   第三,Redis讀取Mysql表最新自增鍵Id值,Redis傳遞id。

 

Redis更新Mysql需注意,Redis在系統中的定位,作快取服務器時,需規劃儲存哪些資料,儲存多長時間等等。

 

並發訪問

Redis為單進程單線程模式,採用隊列模式將並發訪問變為串列訪問。Redis本身沒有鎖的概念,Redis對於多個用戶端串連並不存在競爭,但是在Jedis用戶端對Redis進行並發訪問時會發生連線逾時、資料轉換錯誤、阻塞、用戶端關閉串連等問題,這些問題均是由於用戶端串連混亂造成。對此有2種解決方案:

1.用戶端角度,為保證每個用戶端間正常有序與Redis進行通訊,對串連進行池化,同時對用戶端讀寫Redis操作採用內部鎖synchronized。

2.伺服器角度,利用setnx實現鎖。如某用戶端要獲得一個名字list的鎖,用戶端使用下面的命令進行擷取:

Setnx lock.list  current time + lock timeout

  •  如返回1,則該用戶端獲得鎖,把lock. list的索引值設定為時間值表示該鍵已被鎖定,該用戶端最後可以通過DEL lock.list來釋放該鎖。
  •  如返回0,表明該鎖已被其他用戶端取得,等對方完成或等待鎖逾時。

3.線程池

 

mysql通訊

資料一致性主要針對系統中Redis與mysql中的資料而言。為保證二者資料一致可採用以下策略:對於重要的資料,系統可以採取先寫資料庫再寫緩衝的方式來保證,而對於一般而響應速度要求很高的資料可以採取先寫緩衝然後通過訊息佇列再寫入資料庫的方式,同時做好錯誤記錄檔記錄以及能根據日誌恢複資料。(jms/Redis訊息佇列)

 

存在問題:

(1)當使用者進行添加操作, Redis與Mysql如何同步?

首先伺服器啟動,Redis讀取Mysql表最新自增鍵Id值,然後Redis 讀取id並封裝緩衝,同時保持mysql最後由隊列完成mysql更新

 (2)訊息佇列處理?

    定位Redis操作:

定位dao:定義類、方法對應規則,結合儲存Redis key定位方法,更新mysql

    分類處理:按照類、方法。

 

[轉]Redis 與Mysql通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.