String類型
在Redis中value可以爲整數、浮點數、字符串,如果設置的爲整數、字符串,Redis會自動轉爲整數和浮點數,
可以執行自增自減操作,如果對一個字符串執行自增自減,那麼會返回異常。
-
set命令
做數據緩存,比如耗死是數據查詢,可以通過sql進行哈希後的值作爲key,值作爲value。緩解數據庫壓力。 -
setnx
不存在則設置值,返回1,存在則直接返回0,作爲分佈式鎖的核心命令。 -
getset
返回之前的值,將key設置爲新的值。
value最大存儲的數據爲512MB。
背後的數據結構
如圖中,如果一個值比較小,即爲embstr,如果比較大,大於39(redis4爲40個字節),那麼爲raw,如果能確定爲數值型,那麼即爲integer。
Hash
Redis中的hash數據結構,類似於一個map結構,可以存儲結構化的數據,入用戶信息,key爲用戶id,fiedl爲userName,
value爲名字。非常適合存儲相關聯的數據在一起。
- hgetall
hscan使用如下
Set<String> fileds = redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
Set<String> fields = new HashSet<>();
JedisCommands commands = (JedisCommands) connection.getNativeConnection();
ScanParams scanParams = new ScanParams();
scanParams.count(1000);
ScanResult<Map.Entry<String, String>> scan = commands.hscan(hashKey, "0", scanParams);
int count = 0;
while (scan.getStringCursor() != null) {
count++;
for (Map.Entry<String, String> entry : scan.getResult()) {
fields.add(entry.getKey());
}
if (Objects.equals("0", scan.getStringCursor())) {
//掃描完成
break;
} else {
//繼續下一次掃描
scan = commands.hscan(hashKey, scan.getStringCursor(), scanParams);
}
}
System.out.println(count);
return fields;
});
System.out.println(fileds.size());
案例,存儲熱用戶數據,
方案一:採用key爲用戶id,value爲序列化的用戶pojo。序列化需要耗時,所有屬性爲一個整體,修改較爲麻煩。
方案二:採用hash,key爲用戶id,field爲屬性名,value爲屬性值。各個屬性爲單獨的個體,修改較爲方便,