Redis——数据结构

Redis的五种基本数据类型:String、Hash、List、Set、ZSet

|--------|------------------------|-------------------------------------------------------------------------|
| 结构类型 | 结构存储值 | 结构读写能力 |
| String | 字符串、整数或浮点数 | 对整个字符串或字符串的一部分进行操作;对整数或者浮点数进行自增或自减操作 |
| List | 链表,每个节点上包含一个字符串 | 对链表两端进行push或pop操作 ,读取单个或多个元素;根据值查找或删除元素 |
| Set | 包含字符串的无序集合 | 字符串集合,包含基础的存在判断、增删改查,还包含计算交集、差集等 |
| Hash | 包含键值对的无序散列 | 可增删改单个元素 |
| Zset | 有序集合,value外关联一个分数,用于排序 | 字符串成员与双精度浮点数分数的有序映射 ;元素的排列顺序由分数的大小决定;包含增删改单个元素以及根据分值范围或者成员来获取元素 |

随着Redis的更新,后来又增加了四种数据类型:BitMap、HyperLoglog、GEO、Stream。

各类型的应用场景:

  • String:缓存对象、常规计数、分布式锁、共享session信息等。
  • List:消息队列(需要自己实现全局唯一ID,以消费组形式消费数据)
  • Hash:缓存对象
  • Set:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
  • Zset:排序场景
  • BitMap:二值状态统计的场景,比如签到、判断用户登录状态、连续签到用户总数等。
  • HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
  • GEO(3.2 版新增):存储地理位置信息的场景,比如滴滴叫车;
  • Stream(5.0 版新增):消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据。

Zset使用示例:

添加元素并赋值分数

bash 复制代码
# arcticle:1 文章获得了200个赞
> ZADD user:xiaolin:ranking 200
 arcticle:1
(integer) 1
# arcticle:2 文章获得了40个赞
> ZADD user:xiaolin:ranking 40
 arcticle:2
(integer) 1
# arcticle:3 文章获得了100个赞
> ZADD user:xiaolin:ranking 100
 arcticle:3
(integer) 1
# arcticle:4 文章获得了50个赞
> ZADD user:xiaolin:ranking 50
 arcticle:4
(integer) 1
# arcticle:5 文章获得了150个赞
> ZADD user:xiaolin:ranking 150
 arcticle:5
(integer) 1

对某个文章的赞进行自增操作

bash 复制代码
 ZINCRBY user:xiaolin:ranking 1 arcticle:4
"51"

查看某篇文章的分数

bash 复制代码
ZSCORE user:xiaolin:ranking arcticle:4
"50"

获取对应分数区间内的文章

bash 复制代码
ZRANGEBYSCORE user:xiaolin:ranking 100 200
 WITHSCORES
1) "arcticle:3"
2) "100"
3) "arcticle:5"
4) "150"
5) "arcticle:1"
6) "200"

Zset底层原理:

存储小数据量是使用ziplist(压缩列表)

压缩列表底层:连续两个节点存储分数和value,新增元素时使用插入排序

示例:socre1value1score2value2...

存储大数据量时使用跳表+Hash表

跳表的实现原理:

跳表有多个层级,每次添加新元素时会通过随机算法获取0到1的随机数,如果随机数<0.25(概率小于25),则增加一层,然后继续随机生成随机数,直到随机数大于0.25结束。层高最大限制为64。

相关推荐
海绵宝宝转agent2 分钟前
LeetCode100 LRU缓存思路讲解
java·开发语言·缓存
做运维的阿瑞6 分钟前
mysql数据库视图笔记:创建、修改、删除与适用场景
数据库·笔记·mysql
Seraphina3615 分钟前
DVWA(SQL Injection-High,XSS Reflected-Medium,XSS Stored-Medium)
数据库·经验分享·sql·网络安全·xss
@Mike@16 分钟前
12-数据库学习笔记(五种连接算法)
数据库·笔记·学习
Omics Pro28 分钟前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
龙亘川33 分钟前
探索智慧文化服务:建设初衷、整体架构、技术支撑、发展现状与实践影响
大数据·数据库·架构
风早爽太37 分钟前
Python 学习笔记:数据库迁移工具 ‌Alembic
数据库·python·fastapi·alembic
imDwAaY1 小时前
Redis 哈希表如何边扩容边服务?讲透渐进式 Rehash
redis·哈希算法·散列表
java1234_小锋1 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据库基本操作
数据库·mysql
其实防守也摸鱼1 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
android·数据库·学习·ai·oracle·自动化