您的位置:首页 > 理论基础 > 数据结构算法

redis常见数据结构以及使用场景

2019-08-09 10:26 751 查看

redis数据结构及使用场景

1、字符串(String)

String是最常用的一种数据类型,普通的k/v存储都可以归为此类。redis是使用C语言开发,但C中并没有字符串类型,只能使用指针或符数组的形式表示一个字符串,所以redis设计了一种简单动态字符串(SDS)作为底实现。

SDS对象,此对象中包含三个属性:

  1. len buf中已经占有的长度(表示此字符串的实际长度)
  2. free buf中未使用的缓冲区长度
  3. buf[] 实际保存字符串数据的地方

特性:
空间分配原则:当len小于IMB(1024*1024)时增加字符串分配空间大小为原来的2倍,当len大于等于1M时每次分配 额外多分配1M的空间。
所以取字符串的长度的时间复杂度为O(1),高效的计算字符串长度
二进制安全的

Java中对redis的字符串操作
redisTemplate.opsForValue();//操作字符串
redis字符串的使用场景

value其实不仅可以是String,也可以是数字。 常规key-value缓存应用。常规计数:微博数,粉丝数等

2、列表(List)

redis对键表的结构支持使得它在键值存储的世界中独树一帜,一个列表结构可以有序地存储多个字符串.。列表是使用ziplist和linkedlist实现的。

ziplist的结构

由表头和N个entry节点和压缩列表尾部标识符zlend组成的一个连续的内存块。然后通过一系列的编码规则,提高内存的利用率,主要用于存储整数和比较短的字符串。具有数组的优缺点。

linkedlist的结构

一个双向链表,和普通的链表定义相同,每个entry包含向前向后的指针,当插入或删除元素的时候,只需要对此元素前后指针操作即可

Java中对redis的list操作
redisTemplate.opsForList();//操作list
redis列表(List)的使用场景

Redis list 的应用场景非常多,也是Redis最重要的数据结构之一,

  1. 比如微博的关注列表,粉丝列表,消息列表等功能都可以用Redis的 list 结构来实现。
  2. 另外可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西(一页一页的往下走)。

3、哈希(hash)

hash 是一个 string 类型的 field 和 value 的映射表,hash内部存储的value为一个hashMap,并提供了直接存取这个Map成员的接口。hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。

Java中对redis的hash操作
redisTemplate.opsForHash();//操作hash
redis列表(hash)的使用场景

可以使用 hash 数据结构来存储用户信息,商品信息等对象信息。因为它的底层是以hashMap存储的,所以查找效率很快。

4、集合(Set)

set 对外提供的功能与list类似是一个列表的功能,redis的集合和列表都可以存储多个字符串,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列表(hashtable)来保证自已存储的每个字符串都是各不相同的。

并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。

Java中对redis的hash操作
redisTemplate.opsForSet();//操作set
redis列表(Set)的使用场景

在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。这个过程也就是求交集的过程。

5、有序集合(zset)

有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的。有序集合的值则被称为分值(score),分值必须为浮点数。有序集合是redis里面唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序访问元素的结构。

Java中对redis的hash操作
redisTemplate.opsForZSet();//操作有序set
redis列表(zset)的使用场景

在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: