Redis基本使用总结

Redis简介

底层数据结构

  • 动态字符串

  • 链表

  • 字典

  • 跳表

  • 整数集合

  • 压缩列表

数据类型

  1. String

  2. List

  3. Set

  4. Hash

  5. Sorted Set

  6. GEO

  7. STREAM(流)

应用场景

作为高性能的内存数据库系统,Redis广泛多种场景:

  • 缓存:提高数据访问速度;

  • 会话管理:在Web应用中,Redis可以用于存储用户会话信息,减少数据库负载;

  • 分布式锁:Redis可用于实现分布式锁,进行并发控制

  • 计数器:利用Redis的字符串类型,可以实现计数器功能,如商品库存、点赞数、密码重试次数等

  • 限流:通过设置键值对的过期时间,Redis可以用作限流工具。如锁定密码错误次数超过一定次数的用户

  • 消息队列:Redis支持发布/订阅模式,可以用作消息队列系统

  • 全局ID生成:Redis可以生成全局唯一ID,适用于分布式系统中的ID生成

  • 数据共享:在分布式系统中,Redis可以用于数据共享和同步

会话管理

使用Redis在Web应用中实现会话管理最佳实践_云数据库 Redis 版(Redis)-阿里云帮助中心

Redis入门实战:使用Redis实现会话管理 - 掘金

分布式锁

基于Redis的分布式锁实现 - 掘金

  • SetNX

  • RedLock

  • ……

全局ID生成

Redis 实现全局唯一id-阿里云开发者社区

Redis 部署模式

  • 单机模式

  • 主从模式

    基础的高可用方案。支持读写分离、数据冗余和负载均衡,不支持自动故障转移。

  • 哨兵模式

    简单的高可用方案,适合数据量不大、不需要对数据进行分片存储的场景,主服务器如果出现故障,哨兵将其中一个从服务器升级为主服务器。

  • 集群模式

    数据按照键分区存储

Redis性能优化策略

(TODO)

  • 缩短键值对的长度

  • 过期时间

  • 限制Redis内存大小

  • 选择合适的淘汰策略

  • 命令优化

  • 持久化和备份策略

  • 监控和日志记录

Redis内存淘汰策略

  • volatile-lru

  • allkeys-lru

  • volatile-lfu

  • ……

Redis持久化策略

虽然一般被称为“内存数据库”,但redis支持持久化以确保数据在重启后不丢失,主要有三种持久化方式:

  • RDB(Redis DataBase,快照)

    在指定时间间隔内将内存中的数据集以二进制形式保存到磁盘上。RDB文件是一个紧凑的二进制文件,适合做备份和灾难恢复。优点:快照文件占用空间小,传输速度快;恢复数据速度比AOF快,只需要加载一次文件。缺点:生成快照时会占用较高的内存和CPU;两次生成快照之间发生故障,可能丢失部份数据。

  • AOF(Append Only File,追加文件)

    持久化记录每次写操作的日志,当Redis重启时,日志被重新执行以恢复原始数据。优点:实时或近实时地记录Redis内存的数据,数据安全性更高;文件可以自动进行重写,减少冗余命令。缺点:AOF文件通常比RDB文件大,占用更多磁盘;恢复数据速度比RDB慢,因为需要重新执行所有命令。

  • 混合持久化

    结合RDB和AOF,先建立一个RDB文件,在此基础上添加AOF记录变化。保留RDB的快速恢复特性,同时具备AOF的数据完整性优势。

如何选择持久化策略?考虑以下因素:

  • 数据完整性要求

  • 数据恢复速度

  • 存储空间

  • 性能

AOF策略有哪些参数

appendfsync:

  • always

  • everysec

  • no

Redis如何实现分布式锁

pass

常见缓存异常问题及应对思路

  • 缓存击穿

    描述:热点数据缓存过期后,大量请求直接打到数据库中,导致数据库压力骤增。

    解决方法:1. 热点数据永不过期; 2. 异步刷新热点数据缓存

  • 缓存穿透

    描述:当查询一个实际上不存在的数据时,如果对该查询没有做任何处理(如缓存),每次都会访问数据库,这种现象称为缓存穿透。

    解决方法:对空结果进行缓存,设置较短的过期时间

  • 缓存雪崩

    描述:当大量的缓存数据在同一时间段内同时失效,导致这些请求都落到了数据库上,数据库压力骤增

    解决方法:设计缓存失效时间时采用随机化策略,避免所有缓存同时过期。

  • 数据一致性问题

    描述:缓存数据与数据库数据不一致。

    解决思路:

    • 写后更新

    • 读时更新

    • 同步双写

    • 异步双写

    • 延迟双删

  • 内存溢出

    描述:如果Redis内存使用超出限制,可能会导致写入失败或其他异常行为。

    解决方案

    • 合理配置Redis的最大内存限制以及淘汰策略(如LRU、TTL等)。
    • 定期监控Redis的内存使用情况,及时调整策略或扩展资源。

Redis基本命令

连接redis服务

redis-cli -h REDIS_HOST -p REDIS_PORT -a REDIS_PASSWORD

查看信息相关命令

  • 获取redis服务器统计信息
INFO
  • 查看有多少键
DBSIZE
  • ……

文档

CoolCats
CoolCats
理学学士

我的研究兴趣是时空数据分析、知识图谱、自然语言处理与服务端开发