Redis数据结构

Redis 共有 5 种基本数据类型:

String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。

String

key : String类型的value

String的底层实现是基于C语言实现的SDS结构体 (简单动态字符串(Simple Dynamic String))

Redis的SDS通过

buf\[\]保存数据

len获取字符串长度(复杂度为 O(1)(C 字符串为 O(N))

alloc 记录已分配的空间(初始时等于len,扩容之后会大于len)

List

Redis 实现了自己的链表数据结构。Redis 的 List 的实现为一个 双向链表

应用场景

消息队列:功能过于简单

Hash

Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。

Hash 类似于 JDK1.8 前的 HashMap,内部实现也差不多(数组 + 链表)

应用场景:

实现简单分布式锁,可以用Hash类型,key : {threaId:12, count:1}, count可实现可重入锁

Set

Redis 中的 Set 类型是一种无序集合,集合中的元素没有先后顺序但都唯一,有点类似于 Java 中的 HashSet 。并且 Set 提供了判断某个元素是否在一个 Set 集合内的重要接口

应用场景:

1、防止超卖(已经买过的用户id被存放在set中),文章点赞(点过赞的用户不能重复点赞)

2、共同好友(两个用户的好友set 取交集)

3、抽奖(SPOP命令,随机获取集合中的元素并移除,适合不允许重复中奖的场景)

Sorted Set

Sorted Set 类似于 Set,但和 Set 相比,Sorted Set 增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,还可以通过 score 的范围来获取元素的列表。有点像是 Java 中 HashMap 和 TreeSet 的结合体。

应用场景

需要随机获取数据源中的元素根据某个权重进行排序的场景

相关推荐
聚美智数2 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
十年Java程序媛2 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
我是人✓2 小时前
SpringBoot静态资源映射揭秘
java·spring boot·后端
土豆.exe3 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
学逆向的4 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务4 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
kunicoding4 小时前
多线程编程核心概念详解:从线程基础到并发安全
java·jvm·安全
snow@li5 小时前
SpringBoot:核心注解全景梳理 / @xxx 叫“注解”(Annotation)
java·spring
devilnumber5 小时前
避坑_IDEA 提取方法(Extract Method)工具
java·ide·intellij-idea
鬼手点金5 小时前
Agent 的学习机制:后训练、上下文学习与外部化学习
java·人工智能·git·学习·自动化·nanogpt