redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

一、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 结构进行存储。

数据类型应用场景总结:

你可能感兴趣的:(redis 都有哪些数据类型?分别在哪些场景下使用比较合适?)