Redis 儲存一條使用者資訊

2021-08-17 15:56:32 字數 805 閱讀 5559

如果用普通的key/value結構來儲存,主要有以下2種儲存方式:

第一種方式將使用者id作為查詢key,把其他資訊封裝成乙個物件以序列化的方式儲存,

​ 如:set u001 「李三,18,20010101」

​ 這種方式的缺點是,增加了序列化/反序列化的開銷,並且在需要修改其中一項資訊時,需要把整個物件取回,並且修改操作需要對併發進行保護,引入cas等複雜問題。

第二種方法是這個使用者資訊物件有多少成員就存成多少個key-value對兒,用使用者id+對應屬性的名稱作為唯一標識來取得對應屬性的值,

​ 如:mset user:001:name 「李三 「user:001:age18 user:001:birthday 「20010101」

​ 雖然省去了序列化開銷和併發問題,但是使用者id為重複儲存,如果存在大量這樣的資料,記憶體浪費還是非常可觀的。

那麼redis提供的hash很好的解決了這個問題,redis的hash實際是內部儲存的value為乙個hashmap,

​ 並提供了直接訪問這個map成員的介面,

​ 如:hmset user:001 name 「李三」 age 18 birthday 「20010101」

​ 也就是說,key仍然是使用者id,value是乙個map,這個map的key是成員的屬性名,value是屬性值, 這樣對資料的修改和訪問都可以直接通過其內部map的key(redis裡稱內部map的key為field), 也就是通過

​ key(使用者id) + field(屬性標籤) 操作對應屬性資料了,既不需要重複儲存資料,也不會帶來序列化和併發修改控制的問題。很好的解決了問題。

一條SQL搞定資訊增益的計算

介紹資訊增益之前,首先需要介紹一下熵的概念,這是乙個物理學概念,表示 乙個系統的混亂程度 系統的不確定性越高,熵就越大。假設集合中的變數x 它對應在集合的概率分別是p 那麼這個集合的熵表示為 舉乙個的例子 對遊戲活躍使用者進行分層,分為高活躍 中活躍 低活躍,遊戲a按照這個方式劃分,使用者比例分別為...

SQL獲取上一條記錄的資訊

該方法可用於計算兩個相鄰日期間的間隔,如可用來計算使用者活躍度,看出每個使用者多次下單中的每兩次之間的時間間隔,用以劃分使用者 如很活躍,活躍等,還可以看出使用者的大致購買時間間隔,對於超出時間間隔未再次下單的使用者 沉睡使用者 可想辦法進行喚醒等。as rn 先通過row number函式建立乙個...

上一條記錄下一條記錄

select top 1 from 表 where id 當前id order by id desc select top 1 from 表 where id 當前id order by id desc 上一條記錄 select top 1 blogid from gcc bloginfo wher...