Redix数据库基础
一、关系数据库与非关系数据库概述
1. 关系型数据库
关系型数据库基于二维表格模型(关系模型),面向记录存储,使用 SQL 语言进行操作。主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2 等。
2. 非关系型数据库
NoSQL(Not Only SQL)是非关系型数据库的总称,指除主流关系型数据库外的其他数据库。主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached、Varnish 等。
3. 两者核心区别
| 对比维度 | 关系型数据库 | 非关系型数据库 |
|---|---|---|
| 数据存储方式 | 表格式(行和列),支持关联 | 文档、键值对或图结构等大块组合存储 |
| 扩展方式 | 纵向扩展(提高单服务器性能) | 横向扩展(增加服务器节点) |
| 事务支持 | 强事务性,支持细粒度控制和回滚 | 事务支持较弱,更擅长扩展性和大数据处理 |
4. 非关系型数据库产生背景
主要为应对 Web2.0 的 "三高" 问题:
- High performance:高并发读写需求
- Huge Storage:海量数据存储与访问需求
- High Scalability & High Availability:高可扩展性与高可用性需求
实际应用中,两者常结合使用:关系数据库负责处理关系逻辑,非关系数据库负责高效存储,例如将频繁访问的数据放入非关系数据库提升速度。
二、Redis 简介
Redis 是开源的、用 C 语言编写的 NoSQL 数据库,基于内存运行并支持持久化,采用 key-value 存储形式,是分布式架构中的重要组件。
1. Redis 服务器程序的单进程模型
- 单进程模型,可在一台服务器启动多个进程
- 单进程处理多客户端时性能会下降
- 多进程可提高并发但会增加 CPU 压力
- 建议开启 2 个进程(备份和平衡并发与 CPU 压力)
2. Redis 的优点
- 极高的读写速度:读取最高 110000 次 /s,写入最高 81000 次 /s
- 支持丰富的数据类型:String、List、Hash、Set、Ordered Set
- 支持数据持久化(内存数据保存至磁盘)
- 所有操作具有原子性
- 支持 master-salve 模式的数据备份
3. 适合放入缓存的数据类型
- 即时性数据(如物流状态)
- 数据一致性要求不高的数据(如门店信息)
- 访问量大且更新频率低的数据(如首页广告)
4. Redis 为什么这么快?
- 纯内存结构,避免磁盘 I/O 耗时
- 核心模块单线程,无多线程切换消耗
- 采用 I/O 多路复用机制,提升并发效率
- 注:Redis 6.0 新增的多线程仅用于处理网络请求,数据读写仍为单线程
三、Redis 部署
环境准备
bash
# 修改内核参数
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 10000sysctl -p
安装步骤
bash
# 安装依赖
yum install -y gcc gcc-c++ make# 编译安装
tar zxvf redis-7.2.4.tar.gz -C /opt/
cd redis-7.2.4
make
make PREFIX=/usr/local/redis install# 创建工作目录
mkdir /usr/local/redis/{conf,log,data}# 配置文件处理
cp redis.conf /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/# 命令优化
ln -s /usr/local/redis/bin/* /usr/local/bin/
配置文件关键设置
bash
bind 127.0.0.1 192.168.115.111 # 监听的IP地址
protected-mode no # 关闭保护模式
port 6379 # 监听端口
daemonize yes # 守护进程模式
pidfile /usr/local/redis/log/6379.pid # PID文件路径
logfile "/usr/local/redis/log/6379.log" # 日志文件路径
dir /usr/local/redis/data # 数据文件目录
requirepass 123.com # 设置密码
服务管理
bash
# 创建systemd服务文件
vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target# 启动服务
systemctl start redis-server
systemctl enable redis-server
四、Redis 命令工具
主要命令工具
redis-server:服务器启动命令redis-benchmark:性能测试工具redis-check-aof:修复 AOF 持久化文件redis-check-rdb:修复 RDB 持久化文件redis-cli:客户端命令行工具redis-sentinel:哨兵集群工具
常用命令示例
客户端连接
bash
redis-cli -h 192.168.115.111 -p 6379 -a '123.com'
性能测试
bash
# 100个并发连接,100000个请求测试
redis-benchmark -h 192.168.115.111 -p 6379 -c 100 -n 100000 -a '123.com'# 测试100字节数据包性能
redis-benchmark -h 192.168.115.111 -p 6379 -q -d 100 -a '123.com'
五、Redis 数据库常用命令
基本操作
set key value:存放数据get key:获取数据keys pattern:查询符合规则的键(支持 *、? 通配符)exists key:判断键是否存在(1 存在,0 不存在)del key:删除指定键type key:查看值类型expire key seconds:设置键过期时间ttl key:查看剩余过期时间(-1 永不过期,-2 已过期)
键重命名
rename 源key 目标key:重命名(覆盖目标键)renamenx 源key 目标key:重命名(目标键存在则不执行)
其他常用命令
dbsize:查看当前数据库键数量config set requirepass 密码:设置密码auth 密码:验证密码append key value:追加值并返回长度strlen key:获取值的字符长度mset 键1 值1 键2 值2:批量设置mget 键1 键2:批量获取
