初遇Redis:Redis基本概念、功能、使用场景(详)

目录

目录

前言:

一、基本概念

1、Redis特性

2、数据结构

3、持久化

二、Redis相关功能

1、过期策略:

2、淘汰策略:

3、数据库:

4、事务管理:

三、使用场景


前言:

从基本概念入手,后续会在专栏持续更新相关知识

包括但不限于:linux单机部署、 主从部署、哨兵模式部署、集群部署、JAVA客户端编码级应用、Redis数据结构解析等相关信息。其他需求可留言,一起学习!

一、基本概念

Redis(Remote Dictionary Server)是一个内存中的数据存储系统,它可以作数据库、缓存和消息中间件。

1、Redis特性

  • 速度快:所有数据都存放在内存中,C语言编写,执行速度相对更快。
  • 功能丰富:提供了“键过期”、Lua脚本、简单事务等功能。
  • 客户端语言多:支持多种语言的API,如Java、Python、Ruby等。

2、数据结构

  • 常见数据结构:Redis支持多种数据结构,其中有5种常见数据结构:字符串(string)、哈希(hash)、列表(list)、集合(sets)、有序集合(sorted sets)。
  • 不常见数据结构:除上述数据结构以外:
    • 位图(Bitmap):由二进制位组成的数据结构,用于存储布尔状态信息、进行位级别的计算等;
    • HyperLogLog:用于估计一个集合中的不重复元素数量,占用固定的内存空间;
    • 地理空间数据(Geospatial):支持存储地理位置数据,并提供地理空间操作如计算距离、查找附近的元素等;
    • Redis 5.0 版本新增加的数据结构stream, 主要用于消息队列、事件驱动、数据流处理。
      • Stream结构组成:
        • Stream由一系列的消息(entries)组成,一个消息一个全局唯一 ID,单调递增;
        • 消息可以包含多个字段(field-value pairs),支持所有Redis数据类型;
        • Stream 也可以包含消费者组(consumer groups),定位消费者消费消息的位置,消费者组拥有至少一个消费者,消费者拥有唯一名称,消费者断联后Redis可根据记录消费消息的位置让消费者继续消费消息,消费完成后进行确认,将该消息标记为已读。
      • Stream的“过期策略”:Stream 也可以配置为在达到一定的内存限制时自动删除旧的消息。

3、持久化

Redis一般情况下作为内存存储使用,但它也支持将数据持久化到磁盘,确保数据在重启后不会丢失,提供两种持久化方案AOF(Append Only File)和RDB(Redis DataBase),并在redis4.0后提供混合持久化

二、Redis相关功能

1、过期策略:

  • 设置数据“键”的过期时间,使用“定期过期+惰性过期”的组合策略在周期性地扫描过程中发现过期的key会将其删除,在访问key时也会检查其是否过期并删除。
    • 定时过期:为该key创建一个定时器,当定时器到达过期时间时,key会被立即删除
      • 优点:内存友好,过期数据立即清理
      • 缺点:CPU资源处理过期数据,可能影响缓存的响应时间和吞吐量
    • 惰性过期:key被访问时,检查是否已过期,过期删除
      • 优点:节省CPU资源
      • 缺点:内存不友好,可能存在过期未被访问的key
    • 定期过期:周期性地(例如每秒10次)随机扫描一部分设置了过期时间的key,并删除其中已过期的key。属于前两种的折中方案。

2、淘汰策略:

  • noeviction(不淘汰,该策略为默认策略)
    • 当内存不足以容纳新写入数据时,写入操作会报错
    • 不主动释放内存,可能会导致系统崩溃
  • volatile-lru(基于过期时间的最近最少使用)
    • 该策略适用于缓存等使用场景,可以保留最近频繁使用的数据。
  • volatile-lfu(基于过期时间的最少使用频率)
    • 与volatile-lru类似,考虑了访问频率,适于处理访问分布均匀的数据。
  • volatile-ttl(基于过期时间的生存时间)
    • 适用于缓存等使用场景,优先淘汰即将过期的数据。
  • volatile-random(基于过期时间的随机淘汰)
    • 随机淘汰
  • allkeys-lru(全局的最近最少使用)
    • 不区分数据是否设置了过期时间,适用于全局的数据淘汰。
  • allkeys-lfu(全局的最少使用频率)
    • 不区分数据是否设置了过期时间,考虑了访问频率。
  • allkeys-random(全局的随机淘汰)
    • 任意选择数据淘汰。

LRU和LFU策略在Redis中都是近似实现的

3、数据库:

默认提供了16个数据库,编号从0到15

  • 数据库编号:分别用数字0到15进行编号。
  • 默认数据库:第0个数据库。可以使用SELECT命令来切换数据库。
  • 查看和操作
    • SELECT <编号>  命令来切换数据库 
    • KEYS *      查看当前数据库中所有的key
    • FLUSHDB      清空当前数据库的所有key
    • FLUSHALL     清空所有16个数据库的所有key
  • 独立性和隔离性:数据库独立,数据库key之间不会相互影响,可以在不同的数据库中存储不同类型或不同用途的数据。
  • 配置redis.conf文件,可以设置相关的参数来影响数据库的行为,Redis的配置文件不直接指定数据库的数量或大小,由Redis管理。
  • 应用场景:实际应用中,不建议在同一台Redis服务器上使用多个数据库来分隔不同的应用或数据。

4、事务管理:

确保多个命令作为一个整体执行,以保持数据的一致性和完整性

事务控制命令

  • MULTI:事务开始

    • 输入的命令都会依次进入命令队列中,不执行
  • EXEC:执行所有命令

    • 命令依次执行
  • DISCARD

    • 取消事务,放弃执行

三、使用场景

  1. 缓存、分布式缓存:减轻后端数据库的压力,缓存热门数据
  2. 消息:处理异步任务,如邮件发送、后台任务处理
  3. 计数器:原子递增/递减操作适合作为计数器使用。例如,统计网站的访问量、在线用户数、点赞、签到等
  4. 分布式锁setnx命令可以实现分布式锁的功能(建议使用Redission,有成熟的分布式锁设计,后续会更新相关内容)。Redis分布式锁来确保同一时间只有一个实例可以访问被竞争资源
  5. 会话管理:以分布式缓存实现,例如记录用户登录状态等信息
  6. 排行榜:有序集合数据结构实现排行榜功能,如积分榜、阅读排行榜等
  7. 限流(理论可以,不建议):实现限流功能,防止系统过载。例如,可以限制API的调用频率,以保护系统免受恶意攻击或过度使用
  8. 定时任务(理论可以,不建议):利用Redis支持设置数据的过期时间,自动清理过期数据,并支持过期事件的监听实现定时任务(扩展知识:单机情况下可以尝试ExpiringMap
  9. 实时推荐系统(理论可以,不建议):由于Redis的高性能和实时性,用作实时数据分析的存储后端,例如,存储用户的点击流数据,行为数据和偏好,实时分析行为模式,实现实时推荐功能
  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值