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 的数据类型设计灵活,可以组合使用以满足复杂的应用场景。
例如,可以使用哈希存储用户信息,再使用有序集合来维护用户的游戏得分排名。通过合理利用这些数据类型,可以构建高性能、低延迟的应用。