redis - hash 實戰

歷精圖治發表於2018-11-08

hincrby user:1:info pageview count

public videoInfo get(){
		String redisKey = redisPrefix + id ;
		Map<String,String> hashMap = redis.hgetAll(redisKey);
		video videoInfo = transferMaptoVideo (hashMap); 
		if(videoInfo ==null){
			 videoInfo = mysql.get(id); 
			 if(videoInfo!=null){
			     redis.hmset(redisKey,transferVideoToMap(videoInfo));
			 }
		} 
		return videoInfo ;
}
hgetall key 
#返回hash key對應所有的field和value
hvals key 
#返回hash key對應的所有field 的value
hkeys key
返回hash key對應的所有的filed
hgetall user:2:info 
"age"
"30"
"name"
"kaka"
"page"
"50"
hval user:2:info 
"30
"kaka"
"50"
hkeys user:2:info 
"age"
"name"
"page"

小心使用hgetall 儘量不要使用
api 使用

get 
set setnx 
incr  incrby decr decrby
mset 
mget 
hget 
hset hsetnx 
hdel 
hincrby
hmset 
hmget 

使用者資訊(String實現)

key  user:1 
value(serializable :json,xml,protobuf) 

使用者資訊 (String 實現-v2)

set user:1:age 41 
set user:1:link tv.sohu.com 

使用者資訊 (Hash實現)

hset user:1:info age 41  

三種方案 比較
命令 優點 缺點
string v1 程式設計簡單 可能節約記憶體 1:序列化開銷 2:設定屬性要操作整個資料 。
string v2 直觀 可以部分更新 1:記憶體佔用比較大 2:key較為分散
hash 直觀 節省空間 可以部分更新 1:程式設計稍微複雜 2:ttl不好控制

相關文章