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)-阿里云帮助中心
分布式锁
SetNX
RedLock
……
全局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
- ……