一、redis 主要的数据类型
string、hash、list、set、sorted set
二、各种数据类型的使用场景
2.1、string介绍
这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。
/**
* 读取缓存
* @param key
* @return
*/
public Object get(final String key) {
Object result =null;
if (StringUtils.isBlank(key)) {
return result;
}
ValueOperations operations =redisTemplate
.opsForValue();
result = operations.get(key);
return result;
}
/**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value) {
boolean result =false;
try {
ValueOperations operations =redisTemplate
.opsForValue();
operations.set(key, value);
result =true;
}catch (Exception e) {
e.printStackTrace();
}
return result;
}
应用:常规key-value缓存应用; 常规计数:微博数,粉丝数等。
2.2、hash介绍
这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 redis 里,然后每次读写缓存的时候,可以就操作 hash 里的某个字段。
hset person name bingo
hset person age 20
hset person id 1
hget person name
person = {"name":"bingo","age":20,"id":1}
应用场景:可以通过它保存系统参数到Redis中
redisTemplate.opsForHash().putAll(key, values);
hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以 hash 数据结构来存储用户信息,商品信息等等。比如下面我就用 hash 类型存放了我本人的一些信息:
key=JavaUser88888
value={
“id”: 1,
“name”: “allen-tin”,
“age”: 28,
“location”: “Sichuan, chengdu”
}
2.3、list
实际应用:
将某个ID保存List,然后放到redis,接口通过get去一次性获取对应的所有id,进而可以减少IO。
注释:如果直接用map的话需要保存多条,循环进行读取,这样会比较消耗性能。
redisTemplate.opsForValue().set(key, getStringValueFromObject(value));
应用场景:比如微博的关注列表,粉丝列表,消息列表等功能都可以用Redis的 list 结构来实现。
Redis list 的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。
另外可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,这个很棒的一个功能,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西(一页一页的往下走),性能高。
2.4、set
set 对外提供的功能与list类似是一个列表的功能,特殊之处在于 set 是可以自动排重的。
当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。
应用场景:在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。
2.5、Sorted Set
常用命令: zadd,zrange,zrem,zcard等
和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。
应用场景: 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。
数据类型应用场景总结: