详解Redis 核心特性与基础

Redis 核心特性与基础详解(结合实例)

Redis(Remote Dictionary Service)是一个开源的内存数据库,以高性能灵活的数据结构著称。它被广泛用于缓存、消息队列、实时排行榜等场景。下面通过实际案例和操作,深入浅出地解析 Redis 的核心特性。


一、核心特性概览
  1. 内存存储,超高性能:数据存储在内存中,读写速度达10万+/秒
  2. 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合等。
  3. 持久化:通过 RDB 和 AOF 机制保障数据不丢失(详见之前的持久化详解)。
  4. 高可用与扩展:支持主从复制、哨兵(Sentinel)、集群(Cluster)。
  5. 原子操作与事务:支持简单事务和 Lua 脚本,保证操作原子性。

二、核心数据结构与使用场景
1. 字符串(String)
  • 本质:最简单的键值对,值可以是文本、数字或二进制数据。
  • 常用命令
    SET user:1 "Alice"       # 存储用户信息
    GET user:1               # 获取用户信息
    INCR article:1001:views  # 文章阅读量+1(原子操作)
    
  • 场景
    • 缓存:存储用户会话、页面缓存。
    • 计数器:文章阅读量、商品库存。

示例:记录商品库存

> SET product:1001:stock 100  # 初始化库存为100
> DECR product:1001:stock     # 扣减库存,返回99

2. 哈希(Hash)
  • 本质:键值对的集合,适合存储对象。
  • 常用命令
    HSET user:1001 name "Bob" age 30  # 存储用户字段
    HGET user:1001 name               # 获取用户名
    HGETALL user:1001                 # 获取所有字段
    
  • 场景
    • 用户资料:存储多个字段(姓名、年龄、地址)。
    • 商品详情:价格、库存、描述等属性。

示例:存储电商商品信息

> HSET product:2001 title "iPhone 15" price 6999 stock 50
> HINCRBY product:2001 stock -1  # 扣减库存,返回49

3. 列表(List)
  • 本质:有序元素集合,支持双向插入/删除。
  • 常用命令
    LPUSH news:latest "Article A"  # 左侧插入文章
    RPUSH news:latest "Article B"  # 右侧插入文章
    LRANGE news:latest 0 2         # 获取前3篇文章
    
  • 场景
    • 消息队列:实现生产者-消费者模型。
    • 最新动态:展示用户最近浏览记录。

示例:构建简单消息队列

# 生产者发送消息
> LPUSH msg:queue "Task: Backup DB"
# 消费者获取消息
> RPOP msg:queue  # 返回"Task: Backup DB"

4. 集合(Set)
  • 本质:无序且元素唯一的集合,支持交并差运算。
  • 常用命令
    SADD tags:article:1001 "tech" "database"  # 添加标签
    SMEMBERS tags:article:1001                # 查看所有标签
    SINTER tags:article:1001 tags:user:1      # 求交集(共同标签)
    
  • 场景
    • 标签系统:文章标签、用户兴趣。
    • 抽奖去重:确保用户不重复中奖。

示例:统计共同好友

> SADD user:1001:friends "user:2001" "user:2002"
> SADD user:1002:friends "user:2001" "user:2003"
> SINTER user:1001:friends user:1002:friends  # 返回共同好友"user:2001"

5. 有序集合(ZSet)
  • 本质:元素按分数(score)排序的集合,适合排行榜。
  • 常用命令
    ZADD leaderboard 1000 "PlayerA"  # 添加玩家得分
    ZREVRANGE leaderboard 0 2 WITHSCORES  # 查看前三名
    ZRANK leaderboard "PlayerA"      # 查看玩家排名
    
  • 场景
    • 实时排行榜:游戏得分、热搜榜单。
    • 延迟队列:按执行时间排序的任务队列。

示例:游戏玩家排行榜

> ZADD game:rank 1500 "Alice"  # Alice得分1500
> ZADD game:rank 1800 "Bob"    # Bob得分1800
> ZREVRANGE game:rank 0 -1 WITHSCORES  # 返回["Bob", 1800, "Alice", 1500]

三、其他核心功能
1. 过期时间与自动删除
  • 本质:为键设置生存时间(TTL),到期自动删除。
  • 常用命令
    SET session:1234 "{...}" EX 3600  # 会话1小时后过期
    TTL session:1234                 # 查看剩余生存时间(秒)
    
  • 场景
    • 会话缓存:用户登录态自动失效。
    • 限时优惠:促销活动倒计时。

2. 事务(Transactions)
  • 本质:将多个命令打包执行(类似数据库事务),但不支持回滚。
  • 操作步骤
    MULTI                   # 开启事务
    SET balance:Alice 1000
    DECRBY balance:Alice 100
    EXEC                    # 提交执行(或 DISCARD 取消)
    
  • 注意:Redis 事务是原子性的,但中间命令出错不会回滚已执行的命令。

3. 发布订阅(Pub/Sub)
  • 本质:消息通信模式,生产者发布消息,消费者订阅频道。
  • 常用命令
    # 消费者订阅频道
    SUBSCRIBE news:tech
    # 生产者发布消息
    PUBLISH news:tech "Redis 7.0 released!"
    
  • 场景
    • 实时通知:订单状态更新、系统告警。

四、高可用与扩展
1. 主从复制(Replication)
  • 原理:主节点(Master)异步复制数据到从节点(Slave),实现读写分离。
  • 配置步骤
    1. 启动主节点(默认模式)。
    2. 在从节点配置文件(redis.conf)中添加:
      replicaof <master-ip> <master-port>
      
  • 示例:电商系统将读请求分流到从节点,减轻主节点压力。

2. 哨兵(Sentinel)
  • 原理:监控主从节点,自动故障转移(主节点宕机时选举新主)。
  • 配置步骤
    1. 创建哨兵配置文件 sentinel.conf
      sentinel monitor mymaster 127.0.0.1 6379 2  # 监控主节点
      sentinel down-after-milliseconds mymaster 5000  # 5秒无响应判定宕机
      
    2. 启动哨兵:
      redis-sentinel sentinel.conf
      

3. 集群(Cluster)
  • 原理:数据分片存储在多个节点,支持水平扩展。
  • 操作步骤
    1. 创建集群(至少3主3从):
      redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 ... --cluster-replicas 1
      
    2. 客户端连接集群:
      redis-cli -c -p 7000  # -c 表示启用集群模式
      

五、实战:使用 Redis 实现文章投票系统

需求:用户可为文章投票,每篇文章最多投1票,按票数实时排行。

1. 数据结构设计
  • 文章信息:哈希存储(标题、作者、发布时间等)。
  • 文章得分:有序集合(按票数和时间排序)。
  • 用户投票记录:集合(记录已投票的用户)。
2. 关键操作
# 发布文章
HMSET article:1001 title "Redis Guide" author "Alice" time 1630000000
# 用户投票(原子操作:检查是否已投票 + 更新得分)
WATCH article:1001:votes  # 开启乐观锁
MULTI
SADD user:2001:votes 1001  # 记录用户投票
ZINCRBY article:scores 432 article:1001  # 432=票数*权重 + 时间衰减
EXEC

六、总结
  • 核心优势
    • 数据结构多样性:灵活应对不同场景。
    • 内存级速度:适用于高并发读写。
    • 高可用架构:主从复制、哨兵、集群保障稳定性。
  • 学习路径
    1. 掌握基础数据结构(String/Hash/List/Set/ZSet)。
    2. 熟悉事务、过期时间、Pub/Sub 等进阶功能。
    3. 部署高可用架构(主从、哨兵、集群)。

行动建议

  • 本地安装 Redis,通过 redis-cli 练习基础命令。
  • 结合业务场景(如缓存、排行榜)设计数据结构。
  • 生产环境优先使用哨兵或集群保障高可用。

通过理解这些核心特性,你可以充分发挥 Redis 的潜力,构建高性能、可靠的应用系统!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39237.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ftrans飞驰云联受邀参加“2025汽车零部件CIO年会“并荣获智象奖

2025年3月6日&#xff0c;由栖观汽车、栖观资讯和飞羽商务主办的“2025第二届中国汽车&零部件CIO年会暨智象奖颁奖盛典”于上海盛大召开&#xff0c;Ftrans飞驰云联作为国内领先的企业文件传输与数据交换解决方案提供商&#xff0c;受邀出席了年会&#xff0c;并凭借卓越的…

西门子 CPU 1513-1 PN TCP Server 接收字符串前多了一个问号

TIA V17编程环境中(CPU 1513-1 PN),调用TSEND_C以TCP协议向TCP Server发送字符串:abded1234,TCP Server接收到的字符串多了一个问号:?avded1234. TSEND_C 指令的 DATA DB为非优化string类型数据 截图如下: 字符串前面两个字节不是起始字符,第一个是字节是字符串最大长度…

Matlab2024a免费版下载教程

Matlab是一个高性能的数学计算与仿真软件&#xff0c;广泛应用于科学计算、数据分析、算法开发以及工程绘图等多个领域。它提供了强大的矩阵运算能力、丰富的内置函数库以及灵活的编程环境&#xff0c;使得用户能够高效地解决复杂的数学问题。本文&#xff0c;我将为大家详细介…

SpringCould微服务架构之Docker(1)

项目中微服务比较多的时候&#xff0c;一个一个手动的部署太麻烦了&#xff0c;所以就需要用到Docker。 项目部署中的问题&#xff1a; Docker是一种快速交付应用、运行应用的技术。

软件公司高新技术企业代办:机遇与陷阱并存-优雅草卓伊凡

软件公司高新技术企业代办&#xff1a;机遇与陷阱并存-优雅草卓伊凡 在科技飞速发展的当下&#xff0c;软件公司如雨后春笋般涌现&#xff0c;众多企业渴望通过申请高新技术企业来获得政策支持与发展助力。随之而来的&#xff0c;是高新技术企业代办业务的兴起。然而&#xff…

动捕技术革新虚拟直播:解码虚拟主播的“拟真感“破局之路

在元宇宙技术加速落地的今天&#xff0c;虚拟直播已从早期的卡通形象展示&#xff0c;进化为具备情感交互的沉浸式体验&#xff0c;用户对"高拟真度互动"的需求也逐渐增加&#xff0c;这场行业变革的核心驱动力&#xff0c;离不开动捕技术的持续迭代。 虚拟直播的&q…

python字节码文件.pyc反编译成.py文件

一、前言 在 Python 开发过程中&#xff0c;.pyc 文件&#xff08;Python 字节码文件&#xff09;是 Python 解释器运行程序时生成的一种中间文件。它通常用于提高程序的运行效率&#xff0c;避免每次运行时都重新编译源代码。然而&#xff0c;由于各种原因&#xff0c;我们可…

C++友元:跨墙访问的三种姿势

目录 友元 友元之普通函数形式 友元之成员函数形式 友元类 友元的特点 友元 什么叫友元&#xff1f; 一般来说&#xff0c;类的私有成员只能在类的内部访问&#xff0c;类之外是不能访问它们的。但如果将其他类/函数设置为类的友元&#xff0c;那么友元类/函数就可以在前…

Typora安装使用教程 简单易用的Markdown编辑器

Typora markdown 编辑器下&#xff0c;最后一个免费版本 0.11.18&#xff0c;但可能会提示过期无法使用, 建议大家可以使用 0.9.96 Windows 版&#xff0c;下载 Windows X64 版。 Typora简介 Typora 是一款由 Abner Lee 开发的轻量级 Markdown 编辑器&#xff0c;与其他 Mark…

图解AUTOSAR_SWS_WatchdogInterface

AUTOSAR Watchdog Interface (WdgIf) 详解 AUTOSAR经典平台看门狗接口模块技术详解 目录 1. 概述 1.1 WdgIf模块的作用1.2 WdgIf在AUTOSAR中的位置2. 架构设计 2.1 WdgIf架构概览2.2 接口设计2.3 序列设计3. 配置详解 3.1 配置参数3.2 配置结构3.3 配置类型4. 总结 4.1 主要特点…

(Arxiv-2025)Magic 1-For-1:在一分钟内生成一分钟视频剪辑

Magic 1-For-1&#xff1a;在一分钟内生成一分钟视频剪辑 paper是PKU发布在Arxiv 2025的工作 paper title:Magic 1-For-1: Generating One Minute Video Clips within One Minute Code&#xff1a;地址 Abstract 在本技术报告中&#xff0c;我们提出了 Magic 1-For-1&#xff…

谷歌大型推理模型曝光!击败Claude-3.7-Thinking

哎&#xff01;最近推特上的网友在LMSYS Arena 发现了个泄漏的大模型 Nebula&#xff0c;效果据说特别好&#xff0c;打败了o1、o3-mini、Claude 3.7 Thinking等模型&#xff1a; 网友们通过询问和分析 API&#xff0c;发现这似乎是谷歌正在秘密测试的新推理模型&#xff01;推…

css-grid布局

文章目录 1、布局2、网格轨道3、间距Gap4、网格线5、网格别名 当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后&#xff0c;它就变成了一个网格容器&#xff0c;这个元素的所有直系子元素将成为网格元素。 1、布局 启用grid布局类似与flex布局&#xff0c;不过g…

菱形虚拟继承的原理

一 &#xff1a;菱形继承的问题 普通的菱形继承存在数据冗余和二义性的问题 &#xff0c;如下代码&#xff1a; class Person { public:string _name; //姓名 };class Student : public Person { protected:int _num; //学号 };class Teacher : public Person { protected:int…

<数据集>轨道异物识别数据集<目标检测>

数据集下载链接&#xff1a;https://download.csdn.net/download/qq_53332949/90527370 数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1659张 标注数量(xml文件个数)&#xff1a;1659 标注数量(txt文件个数)&#xff1a;1659 标注类别数&#xff1a;6 标注类别…

高效PDF翻译解决方案:多引擎支持+格式零丢失

软件介绍 在AI翻译工具大行其道的今天&#xff0c;传统翻译软件市场逐渐饱和&#xff0c;但专业领域的深度需求依然存在。本文推荐的PDF翻译工具凭借20余种专业翻译接口&#xff0c;为学术文献、技术文档等复杂内容提供更精准的翻译服务&#xff0c;在保留文档原始排版的同时…

AI智能新标尺:诺姆·布朗谈token成本革命

第一章&#xff1a;从德州扑克到AI革命——诺姆布朗的“顿悟时刻” 1.1 从“人机对战”到“思维革命” 诺姆布朗的AI研究生涯始于2012年卡内基梅隆大学的实验室。彼时&#xff0c;国际象棋AI“深蓝”已横扫棋坛&#xff0c;围棋AI“AlphaGo”初露锋芒&#xff0c;但非完美信息…

碰一碰发视频系统开发者源码分析(一)

#碰一碰发视频系统# #碰一碰发视频saas系统#搭建 碰一碰发视频&#xff0c;是采用前沿技术搭载一套 AI 智能剪辑系统“碰一碰发视频”是一种基于近场通信&#xff08;NFC&#xff09;或蓝牙技术的创新交互方式&#xff0c;用户通过设备轻触即可触发视频传输或播放。本文将详细…

ROS2下MoveIt+Rviz+MuJoCo 三剑合璧!Panda 机械臂联动仿真!

视频讲解&#xff1a; ROS2下MoveItRvizMuJoCo 三剑合璧&#xff01;Panda 机械臂联动仿真&#xff01; 仓库代码&#xff1a;GitHub - LitchiCheng/ros2_package 今天介绍下&#xff0c;ros2下使用moveit在Rviz和mujoco联合仿真&#xff0c;结合上一期视频《MuJoCo 仿真 Pand…

Virtual BOX安装ubuntu及其环境配置(个人一些踩坑补充)

目录 设置中文操作界面和环境时候&#xff0c;下图内容切忌不要选错&#xff01;安装过程中因为分辨率原因&#xff0c;可能安装界面无法显示全面&#xff0c;如何临时解决这篇文章中的缺少如何调出中文输出法部分unbuntu换源安装terminal终端小鱼一键ros安装opencv环境配置 ub…