Redis資料儲存和讀寫

Eric zhou發表於2024-06-02

今天工作群裡,有小夥伴問了一個問題,從Redis獲取的資料,一會是0,一會是OK。

這引起了我們對Redis資料儲存和讀寫的疑問。

以下是整理的一些技術研究內容。

在 Redis 中,所有的資料儲存都是基於字串的。無論你插入的是 String、int 還是 DateTime 型別的資料,最終都會以字串的形式儲存在 Redis 中。具體來說:

  1. String 型別資料:

    • 儲存:直接以字串形式儲存,無需額外處理。
    • 取出:直接取出字串即可。
  2. int 型別資料:

    • 儲存:將 int 型別轉換為字串,然後儲存。
    • 取出:從 Redis 中取出字串後,再轉換為 int 型別。
  3. DateTime 型別資料:

    • 儲存:通常將 DateTime 型別轉換為某種標準格式的字串(如 ISO 8601 格式),然後儲存。
    • 取出:從 Redis 中取出字串後,再解析為 DateTime 型別。

具體的操作示例如下:

插入資料

import redis
from datetime import datetime

# 連線到 Redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)

# 儲存 String 資料
r.set('my_string', 'Hello, Redis!')

# 儲存 int 資料
r.set('my_int', str(12345))

# 儲存 DateTime 資料
now = datetime.now().isoformat()
r.set('my_datetime', now)

取出資料

# 取出 String 資料
my_string = r.get('my_string').decode('utf-8')

# 取出 int 資料
my_int = int(r.get('my_int'))

# 取出 DateTime 資料
my_datetime = datetime.fromisoformat(r.get('my_datetime').decode('utf-8'))

資料型別轉換:當你從 Redis 取出資料時,Redis 返回的是位元組字串,你需要根據儲存的資料型別進行相應的轉換:

  • **String 資料:**直接解碼為字串。
  • **int 資料:**先解碼為字串,然後轉換為整數。
  • **DateTime 資料:**先解碼為字串,然後解析為 DateTime 物件。

這種方式雖然簡單直接,但需要在應用層處理資料的序列化和反序列化。

我們可以根據需要選擇不同的序列化格式(如 JSON、Protobuf 等)來儲存更復雜的資料結構。

這種設計會出現資料序列化和反序列化的效能問題嗎?
Redis內部資料的儲存原理是什麼?
以上。
周國慶
2024/6/2

相關文章