• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2024-12-31 19:11 Aet 隐藏边栏 |   抢沙发  4 
文章评分 1 次,平均分 5.0

概述

用途场景

  1. Redis 最常见的用途之一是作为缓存系统,用于加速应用程序性能
    1. 缓存经常访问的数据(如用户信息、页面内容、热点数据等)
    2. 减少数据库的压力,降低查询响应时间

  1. Redis 可以用来实现 分布式锁,以解决分布式系统中的并发问题
    1. 防止多个服务或进程同时修改同一个资源
    2. 确保资源访问的互斥性

  1. Redis 可以用来存储用户会话(Session),尤其在需要共享会话的分布式系统中
    1. Web 应用中存储登录状态、购物车信息等
    2. 不同服务器之间共享会话数据
  2. Redis 的原子操作(如 INCRDECR)非常适合实现 实时计数器
    1. 统计页面访问量(PV/UV
    2. 统计用户操作(如点赞、评论数等)
    3. 限流控制,如限制某个接口的每秒请求次数

  1. Redis 支持 发布/订阅(Pub/Sub) 和基于列表(List)的队列模式,用于实现消息队列
    1. 构建简单的消息队列系统
    2. 在微服务中实现组件之间的异步通信
  2. Redis 的 有序集合(Sorted Set) 非常适合实现排行榜
    1. 游戏中的玩家积分排行榜
    2. 电商平台的商品热度排名

  1. Redis 的键值可以设置过期时间,用于临时数据存储或延迟任务调度
    1. 设置验证码有效期
    2. 处理延迟任务,例如延迟消息投递

  1. Redis 提供了 Geo 功能,可以存储和查询地理位置相关的数据
    1. 计算两点之间的距离
    2. 查找某点附近的地点(如外卖配送站、用户位置等)

  1. Redis 提供了 Streams 数据结构,支持日志、事件流等实时数据处理
    1. 实时日志收集
    2. 事件流分析

  1. Redis 可以用作轻量级的配置中心,存储应用程序的配置信息
    1. 存储动态配置信息,方便应用读取和更新
    2. 支持集中管理配置

特点

  1. 高性能
    1. Redis 是以 内存 为基础的数据存储,读写性能极高
  2. 丰富的数据结构
    1. Redis 支持多种灵活的数据结构,满足不同场景需求
  3. 内存存储与持久化支持
    1. Redis 是一个内存数据库,但它也支持将数据持久化到磁盘
  4. 单线程模型
    1. Redis 是单线程模型(从 Redis 6.0 开始支持多线程 IO
  5. 支持分布式
    1. Redis 可以轻松部署为分布式架构,支持以下模式
    2. 主从复制
    3. 高可用
    4. 分布式集群
  6. 发布/订阅机制
    1. Redis 内置了简单的 消息系统
  7. 数据过期与自动清理
    1. Redis 支持对每个键设置过期时间(TTL
  8. Lua 脚本支持
    1. Redis 支持 Lua 脚本,可以将多个操作组合成原子操作
  9. 高可用和故障恢复
    1. Redis 提供高可用机制,确保服务在出现故障时仍可用
  10. 易用性
    1. Redis 的安装和使用非常简单,且支持多种客户端库
    2. 几乎支持所有主流编程语言(如 PythonJavaC++
  11. 扩展功能
    1. Redis 不仅是一个内存数据库,还支持多种扩展功能

数据结构

  1. 字符串
    1. 单个键值对的值可以是字符串、整数或浮点数,最大支持 512MB
  2. 哈希(Hash
    1. 存储键值对集合的映射(类似于 Python 的字典)
    2. 适合存储对象的属性

  1. 列表(List
    1. 存储有序的字符串列表(双向链表)
    2. 支持从头部和尾部插入/弹出元素

  1. 集合(Set
    1. 存储无序、唯一的字符串集合
    2. 支持集合运算(交集、并集、差集)

  1. 有序集合(Sorted Set
    1. 类似集合,但每个元素附带一个分数,用于排序
    2. 元素唯一,分数可以重复

  1. 位图(Bitmap
    1. 操作二进制位的数组

  1. HyperLogLog
    1. 用于估算集合中不重复元素的数量,允许误差
    2. 内存占用固定(~12 KB

  1. 地理位置(Geo
    1. 存储地理位置信息(经纬度)
    2. 支持计算两地之间的距离
    3. 支持查询指定半径内的元素

  1. 流(Stream
    1. 用于日志和事件流处理的高级数据结构
    2. 类似消息队列,但提供更多功能

一些操作

启动客户端

退出客户端

连接到不同的 Redis 实例

  1. 比如远程服务器

设置一个键值对

获取一个键的值

删除一个键

检查键是否存在

列出所有的键

设置一个过期时间(单位:秒)

查看当前数据库的键数量

清空当前数据库的所有键

哈希(Hash)

简述

  1. 哈希类型是 Redis 支持的数据结构之一,用来存储键值对

设置哈希字段

获取哈希字段的值

获取哈希的所有字段和值

列表(List)

简述

  1. 列表是 Redis 中的另一种数据结构,用于存储一系列有序元素

将元素添加到列表的头部

将元素添加到列表的尾部

获取列表中的所有元素

一些问题

发布订阅模式怎么实现

  1. 订阅阶段
    1. 客户端C2C3 启动时,通过应用服务器 S 调用 RedisSUBSCRIBE 接口,订阅频道 Test
    2. Redis 将这些订阅与客户端的连接(TCP 长连接)关联起来,记录在 Redis 内部的“频道-连接映射表”中
  2. 发布阶段
    1. C1 客户端向服务器程序 S 发送请求,要求向频道 Test 发布一条消息
    2. 服务器程序 S 调用 RedisPUBLISH 接口,将消息发布到频道 Test
  3. 消息分发阶段
    1. Redis 检查频道 Test 的订阅列表,发现有 C2C3 的连接订阅了该频道
    2. Redis 通过现有的 TCP 长连接,将消息立即推送给 C2C3

关于上面的长连接

  1. 客户端 C2C3 启动时,通过中间的应用服务器与 Redis 建立的长连接确实是基于 TCP 的通信,并且该连接会一直保持,直到客户端主动断开或连接因其他原因(如网络异常、超时等)被关闭
    1. 一旦连接建立,Redis 会将这条连接与订阅的频道(如 Test)进行关联
    2. 之后,Redis 会通过这条连接向客户端推送该频道的消息

队列模式怎么实现

  1. 一些任务描述(比如一个任务是由JSON描述的,包含了发起时间,任务类型,以及其他信息)被添加到Redis的队列中
  2. 然后服务器工作线程从队列中取出一条任务描述后,进行解析,然后进行处理
  3. 关于任务
    1. 将队列用于存放任务时,不能为队列里面的键值对设置过期时间,但可以为整个队列设置一个过期时间

任务调度怎么实现

  1. Redis 用于任务调度的核心思想就是通过存储任务描述信息(例如订单 IDJSON 字符串)来管理任务队列
  2. 任务处理系统则从 Redis 中获取这些任务并进行处理

怎么做缓存

  1. Redis 缓存通常用于存储有过期时间的数据,目的是减少对数据库的访问,提高数据的读取速度
  2. 设置过期时间是 Redis 缓存的一大优势,通过设置过期时间,Redis 能够自动清除过期的数据,保持缓存数据的新鲜度

怎么做分布式锁

  1. Redis 做分布式锁的原理是利用 Redis 的原子操作来实现跨多个分布式系统的锁机制
    1. 分布式锁常用于多个进程或服务器之间的资源共享和竞争控制,确保在同一时刻只有一个客户端能够获得锁并操作共享资源

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-03-10
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享