目录
关系型&非关系型数据库
一、核心原理对比
-
关系型数据库
- 数据模型:基于二维表结构(行/列),通过主键(Primary Key)建立唯一标识,外键(Foreign Key)维护表间关联关系。
- 事务机制:严格遵循 ACID 原则(原子性、一致性、隔离性、持久性),保障数据操作的可靠性。
- 存储引擎:数据存储在磁盘的预定义结构中,读写需通过 SQL 解析层,依赖索引优化查询。
-
非关系型数据库
- 数据模型:支持灵活结构,如键值对(Redis)、文档(MongoDB)、列族(HBase)、图(Neo4j)等,无固定 Schema。
- 分布式架构:采用 BASE 理论(基本可用、柔性状态、最终一致性),优先保证高可用和分区容错性。
- 存储机制:部分数据库(如 Redis)支持内存存储,显著提升读写性能;数据分片(Sharding)实现水平扩展。
二、核心特性对比
特性 | 关系型数据库 | 非关系型数据库 |
---|---|---|
数据结构 | 固定表结构(Schema 约束) | 动态模式(Schema-less) |
扩展方式 | 垂直扩展(升级硬件) | 水平扩展(分布式集群) |
事务支持 | 完整 ACID 事务 | 部分支持,最终一致性为主 |
查询语言 | 标准 SQL(支持复杂 JOIN) | 专用 API/查询语法(如 MongoDB Aggregation) |
典型应用场景 | 金融交易、ERP 系统(强一致性需求) | 社交网络、物联网(高并发、低延迟) |
三、关键区别剖析
-
设计哲学差异
- 关系型:以数据一致性为核心,牺牲部分扩展性换取可靠事务。
- 非关系型:以高可用性与灵活性优先,适应大数据与实时处理需求。
-
性能与扩展性
- 关系型数据库在海量数据写入时易遇 I/O 瓶颈,而非关系型通过分布式架构轻松应对 PB 级数据。
- 非关系型数据库读写性能通常优于关系型(尤其在内存数据库场景)。
-
适用场景
数据库类型 优势场景 劣势场景 关系型 复杂关联查询、强事务系统(如银行转账) 高并发写入、非结构化数据 非关系型 实时推荐、日志处理、缓存层 多表关联分析、强一致性事务
四、典型产品示例
- 关系型:MySQL(开源)、Oracle(企业级)、PostgreSQL(高级特性支持)。
- 非关系型:
- 键值型:Redis(内存缓存)
- 文档型:MongoDB(JSON 存储)
- 列存储:Cassandra(大规模分布式)
总结
关系型数据库通过结构化数据与事务保障满足精准业务需求,而非关系型数据库以灵活性和扩展性支撑互联网级应用。选择依据需综合考量数据一致性要求、并发规模及数据结构复杂度。
Redis
Redis核心原理
-
内存数据结构存储
Redis基于键值对存储,所有数据常驻内存,通过异步持久化机制(RDB快照/AOF日志)保障数据安全。单线程事件循环模型(6.0后支持多线程I/O)避免了锁竞争,利用epoll实现高并发。 -
数据结构引擎
支持5种基础数据结构:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Sorted Set(有序集合),每种结构针对特定场景优化,如跳表实现有序集合的O(logN)复杂度操作。
核心特性
-
高性能
单节点可达10万+ QPS,依赖:-
内存访问纳秒级延迟
-
IO多路复用与非阻塞调用
-
协议优化(RESP二进制安全协议)
-
-
持久化机制
-
RDB:定时全量快照,适合灾难恢复
-
AOF:记录写指令,支持秒级同步
-
混合持久化(Redis 4.0+)
-
-
高可用架构
-
哨兵模式(Sentinel)实现自动故障转移
-
集群模式(Cluster)支持数据分片与线性扩展
-
技术意义
-
缓存场景革命
解决传统数据库磁盘IO瓶颈,将热点数据访问速度提升1000倍以上,支持电商秒杀、社交Feed流等高并发场景。 -
新型数据结构应用
如GEO模块实现地理位置计算,HyperLogLog做基数统计,BitMap处理签到等二值状态场景。 -
生态融合
作为消息队列(Pub/Sub)、分布式锁(RedLock算法)的轻量级解决方案,与MySQL等组成多级存储体系。
配置文件解析
1. 基础配置
# 守护进程模式(yes/no)
daemonize yes
# 绑定IP地址(默认127.0.0.1仅本地访问)
bind 0.0.0.0
# 监听端口
port 6379
# 数据库数量(默认16个)
databases 16
2. 持久化配置
# RDB快照策略(格式:seconds changes)
save 900 1 # 900秒内1次修改触发
save 300 10 # 300秒内10次修改触发
dbfilename dump.rdb # RDB文件名
# AOF配置
appendonly yes
appendfsync everysec # 同步策略(always/everysec/no)
auto-aof-rewrite-percentage 100 # AOF重写触发条件
3. 内存管理
maxmemory 4gb # 最大内存限制
maxmemory-policy volatile-lru # 淘汰策略(LRU/LFU等)
4. 高可用配置
# 主从复制
replicaof <masterip> <masterport>
masterauth <password> # 主节点密码
# 集群模式
cluster-enabled yes
cluster-config-file nodes.conf
5. 性能调优
# 线程模型(6.0+)
io-threads 4
# TCP连接队列
tcp-backlog 511
# 客户端超时(秒)
timeout 300
6. 安全配置
requirepass foobared # 访问密码
rename-command FLUSHDB "" # 禁用危险命令
配置最佳实践
-
生产环境必须设置
requirepass
和bind
-
AOF+RDB混合持久化推荐配置:
aof-use-rdb-preamble yes
-
内存淘汰策略根据业务选择:
-
缓存场景:
allkeys-lru
-
持久化场景:
volatile-lru
-
命令行工具
一、Redis-CLI(命令行客户端)
1. 基础操作
# 连接Redis服务器(带密码) redis-cli -h 127.0.0.1 -p 6379 -a password
# 执行单条命令 redis-cli set foo bar redis-cli get foo
2. 批量操作模式
# 管道模式(高效批量执行) echo -e "set k1 v1\nget k1" | redis-cli --pipe
# 交互式批量操作 redis-cli --eval script.lua key1 key2 , arg1 arg2
3. 监控与调试
# 实时监控命令执行 redis-cli monitor
# 性能测试(10万次SET操作) redis-benchmark -t set -n 100000
二、Redis-Benchmark(性能测试工具)
1. 基础压测
# 测试GET/SET命令性能 redis-benchmark -t get,set -q -n 100000
2. 高级参数
# 模拟100并发连接,测试管道性能 redis-benchmark -t set -P 16 -c 100 -n 1000000
三、Redis-Check工具集
1. RDB文件检查
# 分析RDB文件内存占用 redis-rdb-tools --command memory dump.rdb
2. AOF文件修复
# 修复损坏的AOF文件 redis-check-aof --fix appendonly.aof
四、Redis-Sentinel(高可用管理)
# 启动哨兵节点 redis-sentinel sentinel.conf
# 查看主从状态 redis-cli -p 26379 sentinel masters
五、Redis-Cluster(集群管理)
# 创建集群节点 redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002
# 集群节点检查 redis-cli --cluster check 127.0.0.1:7001
六、特殊工具
1. 数据迁移
# 将数据迁移到新Redis实例 redis-cli --rdb dump.rdb
# 导出RDB scp dump.rdb new_server:/path
redis-server --dbfilename dump.rdb # 新实例加载
2. Lua脚本调试
# 调试Lua脚本 redis-cli --ldb --eval script.lua
工具选择建议
- 日常运维:优先使用
redis-cli
+monitor
- 性能优化:
redis-benchmark
+redis-rdb-tools
- 故障恢复:
redis-check-aof
+redis-cli --cluster fix
常用命令
一、Redis-CLI(命令行客户端)
1. 基础操作
# 连接Redis服务器(带密码) redis-cli -h 127.0.0.1 -p 6379 -a password
# 执行单条命令
redis-cli set foo bar
redis-cli get foo
2. 批量操作模式
# 管道模式(高效批量执行) echo -e "set k1 v1\nget k1" | redis-cli --pipe
# 交互式批量操作 redis-cli --eval script.lua key1 key2 , arg1 arg2
3. 监控与调试
# 实时监控命令执行 redis-cli monitor
# 性能测试(10万次SET操作) redis-benchmark -t set -n 100000
二、Redis-Benchmark(性能测试工具)
1. 基础压测
# 测试GET/SET命令性能 redis-benchmark -t get,set -q -n 100000
2. 高级参数
# 模拟100并发连接,测试管道性能 redis-benchmark -t set -P 16 -c 100 -n 1000000
三、Redis-Check工具集
1. RDB文件检查
# 分析RDB文件内存占用 redis-rdb-tools --command memory dump.rdb
2. AOF文件修复
# 修复损坏的AOF文件 redis-check-aof --fix appendonly.aof
四、Redis-Sentinel(高可用管理)
# 启动哨兵节点
redis-sentinel sentinel.conf # 查看主从状态 redis-cli -p 26379 sentinel masters
五、Redis-Cluster(集群管理)
# 创建集群节点
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002
# 集群节点检查
redis-cli --cluster check 127.0.0.1:7001
六、特殊工具
1. 数据迁移
# 将数据迁移到新Redis实例
redis-cli --rdb dump.rdb # 导出RDB
scp dump.rdb new_server:/path
redis-server --dbfilename dump.rdb # 新实例加载
2. Lua脚本调试
# 调试Lua脚本 redis-cli --ldb --eval script.lua
工具选择建议
- 日常运维:优先使用
redis-cli
+monitor
- 性能优化:
redis-benchmark
+redis-rdb-tools
- 故障恢复:
redis-check-aof
+redis-cli --cluster fix
每个工具均支持--help
查看详细参数。生产环境操作前建议先备份数据。
请再为我对于redis的常用命令进行详细的讲解一下,并对于其各自的使用方法与作用进行详细的讲解
DeepSeek-R1 回答完成
搜索全网26篇资料
以下是Redis常用命令的详细分类解析,涵盖五大核心数据类型及管理命令:
一、Key(键)操作命令
- 基础操作
SET key value # 设置键值对(覆盖已存在值):ml-citation{ref="1,5" data="citationList"} GET key # 获取键对应的字符串值:ml-citation{ref="1,6" data="citationList"} DEL key # 删除指定键(支持批量删除):ml-citation{ref="4,5" data="citationList"} EXISTS key # 检查键是否存在(1存在/0不存在):ml-citation{ref="5,10" data="citationList"}
- 生命周期控制
EXPIRE key 60 # 设置键60秒后过期:ml-citation{ref="4,12" data="citationList"} TTL key # 查看键剩余生存时间(秒):ml-citation{ref="5,10" data="citationList"} PERSIST key # 移除键的过期时间:ml-citation{ref="4,12" data="citationList"}
二、String(字符串)命令
- 数值操作
INCR counter # 值自增1(原子计数器):ml-citation{ref="1,5" data="citationList"} INCRBY num 5 # 值增加指定整数:ml-citation{ref="5,9" data="citationList"} DECRBY num 3 # 值减少指定整数:ml-citation{ref="9,14" data="citationList"}
- 位操作
SETBIT login:20240605 1 1 # 记录用户ID为1的登录状态:ml-citation{ref="7,14" data="citationList"} BITCOUNT login:20240605 # 统计当天登录用户数:ml-citation{ref="7" data="citationList"}
三、Hash(哈希表)命令
HSET user:1001 name "Alice" age 28 # 设置对象字段:ml-citation{ref="8,9" data="citationList"}
HGET user:1001 name # 获取单个字段值:ml-citation{ref="6,9" data="citationList"}
HGETALL user:1001 # 获取所有字段和值:ml-citation{ref="9,11" data="citationList"}
HINCRBY user:1001 age 1 # 字段值原子递增:ml-citation{ref="14" data="citationList"}
四、List(列表)命令
LPUSH tasks "task1" # 左侧插入元素(模拟队列):ml-citation{ref="7,11" data="citationList"}
RPOP tasks # 右侧弹出元素:ml-citation{ref="11" data="citationList"}
LRANGE tasks 0 -1 # 获取全部元素:ml-citation{ref="9,11" data="citationList"}
LTRIM tasks 0 99 # 保留最近100条数据:ml-citation{ref="11" data="citationList"}
五、Set(集合)命令
SADD tags "redis" "db" # 添加元素(自动去重):ml-citation{ref="8,9" data="citationList"}
SINTER tags1 tags2 # 计算集合交集:ml-citation{ref="9" data="citationList"}
SMEMBERS tags # 获取所有元素:ml-citation{ref="9,10" data="citationList"}
SISMEMBER tags "redis" # 检查元素是否存在:ml-citation{ref="9" data="citationList"}
六、Sorted Set(有序集合)命令
ZADD rank 95 "Alice" # 添加带分数的成员:ml-citation{ref="9,11" data="citationList"}
ZREVRANGE rank 0 2 # 获取TOP3(按分数降序):ml-citation{ref="11" data="citationList"}
ZSCORE rank "Alice" # 查询成员分数:ml-citation{ref="11" data="citationList"}
ZCOUNT rank 80 100 # 统计分数区间成员数:ml-citation{ref="11" data="citationList"}
七、管理命令
- 服务控制
INFO memory # 查看内存使用详情:ml-citation{ref="5,12" data="citationList"} CLIENT LIST # 列出所有客户端连接:ml-citation{ref="12" data="citationList"} FLUSHDB # 清空当前数据库:ml-citation{ref="10,12" data="citationList"}
- 事务与脚本
MULTI # 开启事务:ml-citation{ref="14" data="citationList"} EXEC # 执行事务:ml-citation{ref="14" data="citationList"} EVAL "return ARGV[1]" 0 "hello" # 执行Lua脚本:ml-citation{ref="14" data="citationList"}
命令使用建议
- 生产环境慎用:
KEYS *
(改用SCAN
迭代)和FLUSHALL
- 性能优化:批量操作使用
MSET/HMSET
替代多次SET/HSET
- 数据安全:敏感操作前先
SAVE
备份数据