redis緩存數據表


直觀上看,數據庫中的數據都是按表存儲的;更微觀地看,這些表都是按行存儲的。每執行一
次select查詢,數據庫都會返回一個結果集,這個結果集由若干行組成。所以,一個自然而然
的想法就是在Redis中找到一種對應於數據庫l行的數據結構。Redis中提供了五種基本數據結構
,即字符串(string)、列表(list)、哈希(hash)、集合(set)和有序集合(sorted
set)。經過調研,發現適合存儲行的數據結構有兩種,即string和hash。
要把數據庫的行數據存入string,首先需要對行數據進行格式化。事實上,結果集的
每一行都可以看做若干由字段名和其對應值組成的鍵值對集合。這種鍵值對結構很容易讓我們
想起Json格式。因此,這里選用Json格式作為結果集每一行的格式化模板。根據這一想法,我
們可以實現將結果集格式化為若干Json對象,並將Json對象轉化為字符串存入Redis。

 

要把數據庫的行數據存入hash,過程要比把數據存入string直觀很多。這是由hash的結構性質 

決定的——hash本身就是一個鍵值對集合:一個“父鍵”下面包含了很多“子鍵”,每個“子 

鍵”都對應一個值。根據前面的分析可知,結果集中的每一行實際上也是鍵值對集合。用
Redis鍵值對集合表示數據庫鍵值對集合應該再合適不過了:對於結果集中的某一行,字段對應
於hash的“子鍵”,字段對應的值就是hash“子鍵”對應的值,即結果集的一行剛好對應一個
hash

 

Redis hash是一個string類型的field和value的映射表.一個key可對應多個field,一個field對應一個value。將一個對象存儲為hash類型,較於每個字段都存儲成string類型更能節省內存。

procedure TForm2.Button1Click(Sender: TObject);
var
  lData: TRedisString;
  lCacheKey: string;
  lStream: TStringStream;
begin
  lCacheKey := 'goods';
  lStream := TStringStream.Create;
  try
    lData := FRedis.GET(lCacheKey);
    if lData.HasValue then
    begin
      lStream.WriteString(lData);
      lStream.Position := 0;
      FDQuery1.LoadFromStream(lStream, sfJSON);
    end
    else
    begin
      FDQuery1.Open('SELECT * FROM tgoods');
      FDQuery1.SaveToStream(lStream, sfJSON);
      lStream.Position := 0;
      FRedis.&SET(lCacheKey, lStream.DataString, 30);
    end;
  finally
    lStream.Free;
  end;
end;

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM