Bootstrap

JAVA常见面试题-Redis有哪些数据结构

Redis属于可持久化的日志型、非关系型、key-value数据库

字符串String

是redis中最基本的数据类型,一个key对应一个value。

String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。

常用于:

1.缓存:把常用信息(字符串,图片,视频信息)放入redis作为缓冲,mysql做持久化,降低mysql的读写压力。

2.session:spring session + redis实现session共享

3.计数器:许多系统都会使用Redis作为系统的实时计数器,可以快速实现计数和查询的功能

字典Hash(哈希)

是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},......fieldN,valueN}}

常用于:

缓存:能更直观的(相比String更省空间)维护缓存信息,视频信息。

列表List(链表,有序列表)

List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。

常用于:

1.时间轴、文章列表、类似粉丝列表、文章的评论列表之类的东西、微博那种下拉不断分页。

2.消息队列:Redis的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。

集合Set(无序集合、自动去重)

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中  1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

常用于:

1.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。

2.点赞,或点踩,收藏等,可以放到set中实现、共同好友

有序集合SortedSet:

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

(有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。

常用于:

1.排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

2.微博热搜榜

;