回覆列表
  • 1 # 使用者7624170887316

    任何儲存都需要序列化。只不過常規你在用DB一類儲存的時候,這個事情DB幫你在內部搞定了(直接把SQL帶有型別的資料轉換成內部序列化的格式,儲存;讀取時再解析出來)。

    而Redis並不會幫你做這個事情。當你用Redis的key和value時,value對於redis來講就是個byte array。你要自己負責把你的資料結構轉換成byte array,等讀取時再讀出來。

    一個特例是字串,因為字串自己幾乎就已經是byte array了,所以不需要自己處理。

    因此當你要用redis存一個東西,你可能會遇到

    如果是boolean型別的true/false;你要自己定義redis裡怎麼表示true和false。比如你可以用1代表true,0代表false;也可以用“true”這個字串代表true,“false”這個字串代表false。如果是數字,可以直接儲存數字的字串表示(5 --> "5"),然後讀取時再把數字字串轉回來(parseInt/parseDouble/...)。如果是時間/日期,可以自己定義一種字串表達,比如epoc timestamp這個數的字串表示,又或者是ISO8601的格式。如果是一個複雜的資料結構,你需要自己用某種序列化格式來存,可以是json, protobuf, avro, java serialization, python pickle……

    回到Spring這邊。Spring的redisTemplate預設會使用java serialization做序列化。你也可以用StringRedisTemplate,那麼你set的所有資料都會被toString一下再存到redis裡。但這個toString不一定能反解析的回來……

    總之簡單一句話,你要形成一個序列化的約定,確保存進去的東西能解析回來不出錯。也許你可以和你的team商量一個規範。

  • 中秋節和大豐收的關聯?
  • 無奈相思淚歌詞?