Redis基本使用总结
Redis简介
底层数据结构
动态字符串
链表
字典
跳表
整数集合
压缩列表
数据类型
String
List
Set
Hash
Sorted Set
GEO
STREAM(流)
应用场景
作为高性能的内存数据库系统,Redis广泛多种场景:
缓存:提高数据访问速度;
会话管理:在Web应用中,Redis可以用于存储用户会话信息,减少数据库负载;
分布式锁:Redis可用于实现分布式锁,进行并发控制
计数器:利用Redis的字符串类型,可以实现计数器功能,如商品库存、点赞数、密码重试次数等
限流:通过设置键值对的过期时间,Redis可以用作限流工具。如锁定密码错误次数超过一定次数的用户
消息队列:Redis支持发布/订阅模式,可以用作消息队列系统
全局ID生成:Redis可以生成全局唯一ID,适用于分布式系统中的ID生成
数据共享:在分布式系统中,Redis可以用于数据共享和同步
会话管理
使用Redis在Web应用中实现会话管理最佳实践_云数据库 Redis 版(Redis)-阿里云帮助中心
分布式锁
全局ID生成
Redis 部署模式
单机模式
主从模式
基础的高可用方案。支持读写分离、数据冗余和负载均衡,不支持自动故障转移。
哨兵模式
简单的高可用方案,适合数据量不大、不需要对数据进行分片存储的场景,主服务器如果出现故障,哨兵将其中一个从服务器升级为主服务器。
集群模式
数据按照键分区存储
Redis性能优化策略
(TODO)
缩短键值对的长度
过期时间
限制Redis内存大小
选择合适的淘汰策略
命令优化
持久化和备份策略
监控和日志记录
Redis内存淘汰策略
volatile-lru
allkeys-lru
volatile-lfu
……
Redis持久化策略
定期
关闭时
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
- ……