五大金剛-Redis的五種數據類型設計靈活,組合用滿足復雜的應用
Redis 提供了多種內置的數據類型,每種類型都針對特定的使用場景進行了優化。
以下是 Redis 的五種主要數據類型及其用途:
String(字符串)
描述:最簡單的數據類型,一個鍵對應一個值,值可以是字符串或數字。
使用場景:適合用于緩存簡單的鍵值對數據,如會話信息、計數器等。
特殊操作:INCR、DECR(遞增或遞減數字型字符串的值)。
List(列表)
描述:一個鍵對應一個雙向鏈表,可以從頭部或尾部添加或彈出元素。
使用場景:適用于消息隊列、最近最少使用(LRU)緩存、歷史記錄等。
特殊操作:LPUSH、RPUSH(在列表頭部或尾部添加元素),LPOP、RPOP(從列表頭部或尾部彈出元素)。
Set(集合)
描述:一個鍵對應一個無序的、不重復的字符串集合。
使用場景:適合用于存儲唯一元素的集合,如標簽、好友列表等。
特殊操作:
SADD(添加元素到集合),
SMEMBERS(獲取集合的所有元素),
SINTER、SUNION、SDIFF(集合的交集、并集、差集)。
Hash(哈希)
描述:一個鍵對應一個字段-值對的映射,類似于字典或關聯數組。
使用場景:適合用于存儲結構化的數據,如用戶信息、產品詳情等。
特殊操作:HSET、HGET(設置或獲取哈希中的字段值),HGETALL(獲取哈希中所有字段的值)。
Sorted Set(有序集合)
描述:類似于集合,但每個成員都關聯了一個分數,用于排序。
使用場景:適合用于排行榜、評分系統、時間序列數據等。
特殊操作:
ZADD(添加元素到有序集合),ZRANGE、ZREVRANGE(獲取排序后的元素),ZSCORE(獲取元素的分數)。
/**------------------zSet相關操作--------------------------------*/
// 添加元素,有序集合是按照元素的score值由小到大排列
ceshiRedisUtilService.zAdd("ceshi-web-zadd", "test-ceshi-web-zadd1", 100);
ceshiRedisUtilService.zAdd("ceshi-web-zadd", "test-ceshi-web-zadd2", 104);
ceshiRedisUtilService.zAdd("ceshi-web-zadd", "test-ceshi-web-zadd3", 108);
ceshiRedisUtilService.zAdd("ceshi-web-zadd", "test-ceshi-web-zadd4", 103);
ceshiRedisUtilService.zAdd("ceshi-web-zadd", "test-ceshi-web-zadd5", 10);
//zRange 獲取集合的元素,value 從小到大排序
Set<String> zRange = ceshiRedisUtilService.zRange("ceshi-web-zadd", 0, 4);
for (String string : zRange) {
System.out.println(string);
}
// zReverseRange 獲取集合的元素,value 從大到小排序
Set<String> zReverseRange = ceshiRedisUtilService.zReverseRange("ceshi-web-zadd", 0, 4);
for (String string : zReverseRange) {
System.out.println(string);
}
---------------ceshiRedisUtilService.zRange---------------------------------
public Set<String> zRange(String key, long start, long end) {
try {
return redisTemplate.opsForZSet().
range(key,start,end).stream().
map(Object::toString).
collect(Collectors.toCollection(LinkedHashSet::new));
}catch (Exception e){
logger.error("=======Exception When zRange",e);
}
return null;
}
public Set<String> zReverseRange(String key, long start, long end) {
try {
return redisTemplate.
opsForZSet().
reverseRange(key,start,end).
stream().
map(Object::toString).
collect(Collectors.toCollection(LinkedHashSet::new));
}catch (Exception e){
logger.error("=======Exception When zReverseRange",e);
}
return null;
}
Redis 的數據類型設計靈活,可以組合使用以滿足復雜的應用場景。
例如,可以使用哈希存儲用戶信息,再使用有序集合來維護用戶的游戲得分排名。通過合理利用這些數據類型,可以構建高性能、低延遲的應用。