Redis 儲存SQL表格 方法

來源:互聯網
上載者:User

標籤:www.   password   實現   功能   就會   其他   tar   表格   next   

原文:ALCA in Redis-land

 

探索之三:Where are my tables?

使用Redis與我們之前使用的SQL資料表完全不同,沒有語言支援你在伺服器上查詢資料,這裡僅有一些命令幫你操作資料庫中的keys值。Redis中的命令是資料類型敏感型的,也就是說你不能在list上執行set命令,否則你將得到一個執行錯誤的提示。可以通過redis-cli或其他你使用的程式設計語言中的介面給Redis server發送命令。在下面的樣本中,我們只強調命令本身,而不關注你通過哪種方式提交給Redis server。

想像一下,一個簡單的SQL資料庫表,像一些應用中會用到的儲存使用者資料的表:

id username password name surname
1  user1  pass1   Bob  Smith
2  user2  pass2   Mario Rossi

儲存資料

假如我們想把上面的資料存放區到Redis中,你會如何在Redis中設計資料庫方案呢?也許以應用的視覺來看會更直觀一些。使用SQL,我們在SELECT中通過指定使用者id來獲得一個使用者資訊,換句話說就是需要有用於區分不同資料實體的方式,所以我們可以通過一個唯一的標識來標識和擷取使用者資訊。所以如果在redis的key中加入使用者的id資訊,那麼我們的查詢需求就解決了,在redis中,資料被儲存成如下形式:

Key        Value
user:1:username  user1
user:1:password  pass1
user:1:name    Bob
user:1:surname   Smith
user:2:username  user2
user:2:password  pass2
user:2:name      Mario
user:2:surname   Rossi

那麼,給出任一個使用者id,我們就可以通過key user:id:username,user:id:password,user:id:name,user:id:surname的形式讀出使用者資訊。

使用者登入

上面的儲存形式也能用於使用者登入,但需要一種方式能根據username來查詢使用者的id。也就是說我們還需要在username和id之間建立聯絡。這可以通過添加另外一個redis key"user:username:id"來實現。

key      value
user:user1:id  1
user:user2:id  2

現在如果Mario Rossi想要登入進來,我們可以通過key"user:user2:id"先查出username,進而獲得使用者的所有資訊。

主鍵

在Redis中如何保證id值的唯一性呢。在SQL中,可以通過"id int primary key auto_increment"定義自增主鍵來實現,現在我們也需要一種類似的方式為每個使用者產生一個不同的id。根據前面可用的資料類型中提到的數字資料,Redis中的方案是這樣的:建立一個key"user:next_id",並把它作為計數器,每當要添加新使用者時,就對key"user:next_id"執行INCR命令。

SELECT * FROM users;

下一個面臨的問題是查詢使用者列表。也許你認為我們上面的資料存放區已經足以查詢出使用者列表:可以先獲得"user:next_id"的當前值counter,然後通過一步或多步遍曆0到counter獲得使用者資料。但如果某個使用者從系統中刪除(下面會講到刪除操作),而我們會遍曆0到counter中的所有id,這時就會有些id查詢不到任何資料。

儘管這通常不是問題,但我們不想在不存在的使用者資料上浪費時間,所以需要建立另外一個key"user:list",其value為list或set類型,用於儲存每一個新增的使用者id,並在必要的時候從"user:list"中刪除該id。我更傾向於使用list,因為它可能通過LRANGE命令實現分頁功能。

刪除使用者

還有一個要面臨的問題是"資料完整性",看看我們在刪除使用者時會發生什麼吧。我們需要刪除每一個對此使用者的引用,也就是說,需要刪除下面所有的key"user:id:*","user:username:id",以及"user:list"中的使用者id。

Redis 儲存SQL表格 方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.