时间:2025-10-25 18:00
人气:
作者:admin
Redis是一个开源的基于Key-Value结构的NoSQL内存数据库。通常作为数据库与应用程序之间的缓存层,主要目的是减少数据库I/O压力。
| 常用数据结构 | 特点与应用 |
|---|---|
| String | 基础数据类型,存储文本、数字等 |
| List | 双向链表,有序且可重复 |
| Hash | 键值对集合,适合存储对象 |
| Set | 无序集合,元素唯一,支持集合运算 |
| ZSet | 有序集合,带分值排序 |
特点:
常用命令:
SET user:1 "张三" # 设置键值
GET user:1 # 获取值
INCR article:100:views # 自增计数器
APPEND key "追加内容" # 字符串追加
应用场景:
特点:
常用命令:
HSET user:1 name "李四" age 25 # 设置多个字段
HGET user:1 name # 获取单个字段
HGETALL user:1 # 获取所有字段
应用场景:
特点:
常用命令:
LPUSH tasks "任务A" # 左端插入
RPUSH tasks "任务B" # 右端插入
LRANGE tasks 0 -1 # 获取全部元素
应用场景:
特点:
常用命令:
SADD tags "技术" "编程" # 添加元素
SINTER java_users python_users # 求交集
应用场景:
特点:
常用命令:
ZADD leaderboard 1000 "玩家A" # 添加带分值元素
ZREVRANGE leaderboard 0 9 # 获取前十名
应用场景:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| 单机模式 | 部署简单,存在单点故障风险 | 开发测试环境 |
| 主从模式 | 读写分离,数据同步 | 中小型生产环境 |
| 哨兵模式 | 自动故障转移,监控告警 | 对高可用有要求的场景 |
| Cluster模式 | 分布式架构,数据分片 | 大数据量高并发场景 |
核心功能:
设计原理:
工作流程:
slot = CRC16(key) % 16384 # 计算数据存储位置
问题描述:大量请求查询不存在的key,直接打到数据库
解决方案:
问题描述:热点key突然过期,大量并发请求数据库
解决方案:
问题描述:大量key同时过期,数据库压力剧增
解决方案:
Redis与MySQL双写时的数据一致性问题
最终一致性方案:
| 特性 | Redis | Memcache |
|---|---|---|
| 持久化 | 支持RDB/AOF | 不支持 |
| 数据类型 | 丰富多样 | 简单key-value |
| 数据备份 | 主从复制 | 无内置机制 |
触发条件:
单线程优势:
| 策略类型 | 说明 |
|---|---|
| volatile-lru | 从设置了过期时间的键中使用LRU淘汰 |
| allkeys-lru | 从所有键中使用LRU淘汰 |
| volatile-lfu | 使用LFU算法淘汰过期键 |
| allkeys-lfu | 使用LFU算法淘汰所有键 |
基准性能测试:获取无干扰状态下的性能基准
慢查询分析:启用慢查询日志定位性能瓶颈
键过期优化:避免大量键同时过期
BigKey检测:使用scan命令识别大键
AOF优化:
系统层面:
Redis作为高性能的内存数据库,在缓存、会话存储、消息队列等场景中发挥着重要作用。通过合理的架构设计、数据结构和配置优化,可以充分发挥其性能优势,为应用系统提供强力支撑。
核心要点:根据业务场景选择合适的数据结构、部署模式和配置策略,是Redis应用成功的关键。
本文来自博客园,作者:萧熙,转载请注明原文链接:https://www.cnblogs.com/xiaoxiblog/p/19165230