【Redis】关于redis的数据结构详解

【Redis】关于redis的数据结构详解

🧠 Redis 数据结构详解

引言 🎯

嘿,老铁们!欢迎回到老曹的 Redis 课堂。上一节课我们聊了 Redis 是啥以及怎么把它搞到手,今天咱们深入挖掘一下它的内功心法 —— 数据结构

💬 老曹吐槽:你以为 Redis 只是个简单的 KV 存储?Too young too simple!它可是藏着十八般武艺呢!

学习目标 🎯

  • 掌握五大基本数据类型的操作
  • 理解每种类型的适用场景
  • 学会灵活运用这些数据结构解决问题

一、String(字符串) 🔤

这是最基础也是最常用的一种类型,用来存储文本或者二进制数据都可以。

基本操作

命令功能示例
SET key value设置键值对SET name "老曹"
GET key获取指定键的值GET name"老曹"
INCR key自增1(仅限数字)INCR age
DECR key自减1(仅限数字)DECR score
APPEND key value追加内容到末尾APPEND msg "你好世界"

应用场景

  • 计数器:页面浏览次数统计
  • 缓存:临时存放网页片段或API结果
  • 分布式锁:利用 SETNX 实现互斥访问

二、Hash(哈希表) 🗂️

相当于一个小型的对象映射关系,适合保存对象属性。

基本操作

命令功能示例
HSET key field value设置字段值HSET user:id1001 name "张三"
HGET key field获取某个字段值HGET user:id1001 name"张三"
HMSET key field1 val1 [field2 val2 ...]批量设值HMSET user:id1001 name "李四" age 25
HGETALL key获取全部字段及其值HGETALL user:id1001
HDEL key field [field ...]删除一个或多个字段HDEL user:id1001 age

应用场景

  • 用户资料管理:每个用户ID对应一条记录
  • 购物车信息:商品编号 => 数量 映射关系
  • 配置项存储:系统参数集中存放便于修改

三、List(列表) 📋

双向链表结构,可以从两端插入/弹出元素。

基本操作

命令功能示例
LPUSH key value [value ...]左侧推入LPUSH tasks task1 task2
RPUSH key value [value ...]右侧推入RPUSH messages hello world
LPOP key左侧弹出LPOP tasks
RPOP key右侧弹出RPOP messages
LRANGE key start stop查看范围内的元素LRANGE tasks 0 -1

应用场景

  • 消息队列:生产者消费者模式经典实现
  • 最新N条记录缓存:如微博动态流展示
  • 任务调度系统:待处理作业排队等候执行

四、Set(无序集合) 🔘

不允许重复成员的存在,内部采用哈希表实现去重逻辑。

基本操作

命令功能示例
SADD key member [member ...]添加成员SADD tags python java c++
SMEMBERS key显示所有成员SMEMBERS tags
SISMEMBER key member判断是否包含某成员SISMEMBER tags python
SREM key member [member ...]移除成员SREM tags java
SCARD key返回集合大小SCARD tags

应用场景

  • 共同好友查找:两个用户的兴趣标签交集运算
  • 抽奖活动候选池构建
  • 黑名单过滤机制

五、Sorted Set(有序集合) 📊

在普通 Set 的基础上增加了权重排序功能,非常适合做排行榜之类的业务。

基本操作

命令功能示例
ZADD key score member [score member ...]添加带分数的成员ZADD leaderboard 100 alice 200 bob
ZRANGE key start stop [WITHSCORES]正向获取排名区间ZRANGE leaderboard 0 9 WITHSCORES
ZREVRANGE key start stop [WITHSCORES]逆向获取排名区间ZREVRANGE leaderboard 0 9 WITHSCORES
ZSCORE key member查询特定成员得分ZSCORE leaderboard alice
ZREM key member [member ...]删除成员ZREM leaderboard bob

应用场景

  • 积分排行版:游戏玩家等级榜单
  • 热门文章推荐:根据点赞数倒序排列
  • 地理位置服务:附近的人搜索基于距离远近排序

六、综合实战演练 🏋️‍♂️

让我们通过一个小例子把这些知识点串联起来吧!

假设你要开发一款在线问答社区,需要用到以下几种数据结构:

  1. 用户基本信息 → Hash
  2. 用户发表的问题列表 → List
  3. 问题的关注者集合 → Set
  4. 最受欢迎问题排行榜 → Sorted Set

具体实现代码如下(伪代码形式):

# 创建用户档案 redis.hset("user:1", mapping={"username":"Alice","email":"[email protected]"})# 发布新问题 question_id = redis.incr("global:question_id") redis.lpush(f"user:{user_id}:questions", question_id) redis.hmset(f"question:{question_id}",{"title": title,"content": content,"author_id": user_id})# 关注问题 redis.sadd(f"question:{question_id}:followers", follower_id)# 投票加分 redis.zincrby("popular_questions",1, question_id)

是不是感觉思路清晰多了?


七、面试题精选 ❓

又到了激动人心的答题环节啦!准备好迎接挑战了吗?

序号问题解析
1Redis 中 String 类型最大能存多少数据?默认最大 512MB
2Hash 和 Set 在底层分别用了什么数据结构?Hash 用的是压缩列表或哈希表;Set 通常是整数集合或哈希表
3List 类型支持随机访问吗?不支持,只能从头尾两端操作
4ZSet 怎么做到既能快速查找又能维持顺序?跳跃表+字典双重索引结构
5如果要设计一个支持撤回的消息系统你会怎么做?利用 List 存储历史消息,每次撤回就从右边 POP 出来即可

八、知识点归纳总结 📚

数据类型时间复杂度主要用途
StringO(1)缓存、计数器
HashO(1)对象存储
ListO(N) for range ops队列、栈
SetO(1) average去重、集合运算
Sorted SetO(log N)排行榜、优先级队列

结语 🎉

好啦朋友们,今天我们一口气啃下了 Redis 的五大数据结构这块硬骨头。希望你们不仅能记住它们各自的特点,更重要的是能在实际项目中活学活用哟~

下期预告:我们将进入更加刺激刺激的话题 —— Redis 命令行工具与键管理,敬请期待!

拜了个拜~👋


Read more

openclaw喂饭教程!在 Linux 环境下快速完成安装、初始化与 Web UI 配置

openclaw喂饭教程!在 Linux 环境下快速完成安装、初始化与 Web UI 配置

前言 OpenClaw 是一款开源的 AI Agent 工具,但对第一次接触的用户来说,完整跑通流程并不直观。本文以 Linux 环境为例,详细记录了 OpenClaw 的安装、初始化流程、模型选择、TUI 使用方式,以及 TUI 与 Web UI 认证不一致导致的常见问题与解决方法,帮助你最快速度把 OpenClaw 真正跑起来 环境准备 1)安装nodejs curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs > node

By Ne0inhk
cpolar远程辅助Open-Lovable实现随时随地克隆网页超实用

cpolar远程辅助Open-Lovable实现随时随地克隆网页超实用

Open-Lovable 是一款面向前端开发者的开源工具,核心功能是将任意网页克隆为可编辑的 React 应用,还支持多类 AI 模型辅助生成代码,适配新手学习、中小企业原型开发等场景。它的优点很贴合实际需求:拆分代码组件清晰,保留完整 CSS 样式,能大幅减少手动搭建页面框架的时间,比如新手学习电商网站布局时,不用再逐行拆解复杂的源代码,直接克隆后就能看清 header、footer 等组件的逻辑,中小企业做产品原型时,克隆同类网页后稍作修改就能快速出效果。 使用这款工具时也有一些实用的小提醒💡:克隆的网页仅能还原静态布局和样式,像登录态、动态交互这类内容无法完整复刻,而且使用前需要准备好 E2B、Firecrawl 等平台的 API 密钥,密钥保管要注意隐私,避免外泄造成不必要的损失。 不过 Open-Lovable 默认只能在本地局域网内使用,这会带来不少不便:比如开发者在家调试的克隆项目,想让公司的设计师远程查看效果,只能通过传文件、远程协助的方式,不仅耗时,还可能出现版本不一致的问题;要是出差在外需要修改克隆的代码,没法直接访问本地的工具,只能等回到电脑前操作,耽误工作

By Ne0inhk
ollama 模型管理、删除模型 、open-webui 开启大模型交互

ollama 模型管理、删除模型 、open-webui 开启大模型交互

文章目录 * ollama 基本信息 * ollama 运行模型 * ollama 模型管理 * 🔧 **方法一:使用命令行删除单个模型** * ⚙️ **方法二:批量删除所有模型** * 🗑️ **方法三:彻底卸载 Ollama(含所有数据)** * ⚠️ **注意事项** * ✅ **验证是否删除成功** * open-webui 安装 开启大模型交互 * open-webui pip 安装 * open-webui 启动服务 * 浏览器访问 http://IP:8082/ : * ❤️ 时不我待,一起学AI ollama 基本信息 * https://ollama.com/ ollama 运行模型 命令行执行即可 0.6B parameter model ollama run qwen3:0.6b 1.7B

By Ne0inhk
他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

个人主页-爱因斯晨 文章专栏-赛博算命 原来我们在已往的赛博算命系列文章中的源码已经传到我的Github仓库中,有兴趣的家人们可以自己运行查看。 Github 源码中的一些不足,还恳请业界大佬们批评指正! 本文章的源码已经打包至资源绑定,仓库中也同步更新。 一、引言 在数字化浪潮席卷全球的当下,传统塔罗牌占卜这一古老智慧也迎来了新的表达形式 ——“赛博塔罗”。本文档旨在深入剖析塔罗牌的核心原理,并详细介绍如何利用 Java 语言实现一个简易的塔罗牌预测程序,展现传统神秘学与现代编程技术的融合。 二、塔罗牌原理 (一)集体潜意识与原型理论 瑞士心理学家卡尔・荣格提出的 “集体潜意识” 理论,为塔罗牌的运作提供了重要的心理学支撑。该理论认为,人类拥有超越个体经验的共同心理结构,其中蕴含着 “原型”—— 即普遍存在的、象征性的模式或形象。 塔罗牌的 22 张大阿尔卡那牌恰好与这些基本原型相对应。例如,“愚人” 代表着天真与新开始的原型,“魔术师” 象征着创造力与潜能的原型,“女祭司” 则体现了智慧与直觉的原型。这些原型是全人类共通的心理元素,这也正是不同文化背景的人都能

By Ne0inhk