Redis数据库(一)——Redis是什么,安装与部署+常用命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、关系型数据库 vs 非关系型数据库](#一、关系型数据库 vs 非关系型数据库)
    • [1.1 关系型数据库(SQL)](#1.1 关系型数据库(SQL))
    • [1.2 非关系型数据库(NoSQL)](#1.2 非关系型数据库(NoSQL))
    • [1.3 关系型数据库与非关系型数据库对比](#1.3 关系型数据库与非关系型数据库对比)
    • 1.4总结
  • [二、Redis 简介](#二、Redis 简介)
  • [三、Redis 安装与部署](#三、Redis 安装与部署)
    • [3.1 环境准备](#3.1 环境准备)
    • [3.2 安装流程](#3.2 安装流程)
    • [3.4 配置文件调整](#3.4 配置文件调整)
  • [四、Redis 命令工具](#四、Redis 命令工具)
    • [4.1 常用工具介绍](#4.1 常用工具介绍)
  • [五、Redis 常用命令](#五、Redis 常用命令)
    • [5.1 基本数据操作](#5.1 基本数据操作)
    • [5.2 模糊查询](#5.2 模糊查询)
    • [5.3 键值判断与删除](#5.3 键值判断与删除)
    • [5.4 键重命名](#5.4 键重命名)
    • [5.5查看当前数据库中 key 的数目](#5.5查看当前数据库中 key 的数目)
    • [5.6 密码设置与查看](#5.6 密码设置与查看)
    • [5.7 Redis 多数据库管理](#5.7 Redis 多数据库管理)
  • 总结

前言

关系型数据库 vs 非关系型数据库

Redis简介

安装与部署

常用命令

一、关系型数据库 vs 非关系型数据库

1.1 关系型数据库(SQL)

关系型数据库采用表格模型组织数据,具有严格的结构化特性。

特点:

1.表格模型(行 + 列)

2.使用 SQL 语言

3.数据必须符合表结构

4.强事务 ACID 特性,保证数据一致性

5.纵向扩展(升级硬件)

6.mysql部署在单独的物理服务器上,云上用RDS

常见产品:MySQL、Oracle、PostgreSQL

典型应用场景:

银行转账:A 转账给 B,必须保证 A 扣钱成功的同时 B 收钱成功(事务保证一致性)。

1.2 非关系型数据库(NoSQL)

非关系型数据库提供了更灵活的数据模型,适合处理大规模数据和半结构化数据。

特点:

键值对 / 文档 / 图结构存储

无需固定表结构

高并发、高可扩展

横向扩展(增加服务器节点)

常见产品:Redis、MongoDB、HBase、Memcached

典型应用场景:

微信聊天应用:一条消息可能是文字、图片、语音等多种形式,不适合用表格存储,文档型数据库更能满足这种灵活的数据结构需求。

1.3 关系型数据库与非关系型数据库对比

特性 关系型数据库 (RDBMS) 非关系型数据库 (NoSQL)
数据模型 结构化数据模型 使用表(Table)、行(Row)、列(Column)组织数据 表之间通过外键(Foreign Key)建立关系 灵活的数据模型 可以是键值对(Key-Value)、文档(Document)、列族(Column-Family)、图(Graph)等 无固定模式(Schema-less)
查询语言 结构化查询语言(SQL) 支持复杂查询、连接(JOIN)、事务等 多样化查询方式 通常使用特定API或查询语言(如MongoDB的查询语法) 部分不支持复杂连接操作
扩展性 垂直扩展为主 通过提升单机性能(CPU、内存、存储)来扩展 水平扩展(分片)较复杂 水平扩展为主 易于通过增加节点实现分布式扩展 适合处理海量数据和高并发
事务支持 强一致性(ACID) 支持复杂事务(原子性、一致性、隔离性、持久性) 最终一致性(BASE)为主 部分支持事务(如MongoDB多文档事务),但通常弱于RDBMS
适用场景 结构化数据、复杂查询、强事务需求 如:财务系统、ERP、传统业务系统 半结构化/非结构化数据、高并发读写、灵活扩展 如:社交媒体、物联网、日志系统、内容管理
代表产品 MySQL, PostgreSQL, Oracle, SQL Server MongoDB(文档型), Redis(键值型), Cassandra(列族型), Neo4j(图型)

选型建议:

  1. 选择关系型数据库:当需要强一致性事务、复杂的关系查询、数据结构稳定时。
  2. 选择非关系型数据库:当处理海量数据、需要水平扩展、数据结构灵活多变或读写并发极高时。
  3. 混合架构:许多现代系统同时使用两者(如用Redis缓存+MySQL持久化),发挥各自优势。

1.4总结

示例场景对比:

  • 电商订单系统:用RDBMS保证交易事务的准确性(如扣款、库存)。
  • 用户行为日志:用NoSQL存储大量半结构化的点击流数据,支持快速写入和灵活查询。

关键差异:

结构化 vs 灵活性:关系型数据库适合严格结构化的数据,非关系型数据库适合动态或半结构化数据。

扩展方式:关系型数据库通常通过硬件升级(垂直扩展),非关系型数据库通过分布式节点(水平扩展)。

设计哲学:关系型数据库优先保证数据一致性和完整性,非关系型数据库优先考虑性能和可扩展性。

二、Redis 简介

2.1定义:

开源、C 语言编写、基于内存、支持持久化的键值数据库。

2.2特性:

高性能:读取可达 110000 次/s,写入 81000 次/s

数据结构丰富:string、list、hash、sets、sorted sets

支持持久化:数据可保存到磁盘

原子性:单线程避免并发锁问题

主从复制:数据备份

2.3高性能原理

为什么快?

  1. 纯内存操作 → 避免磁盘 IO
  2. 单线程 → 避免锁开销
  3. I/O 多路复用 → 高并发
    举例:
    秒杀活动:库存扣减、订单写入,放到 Redis 避免数据库压力。
    抖音热搜榜:用 sorted set 存储关键词 + 热度,实时排序。

注:在 Redis 6.0 中新增加的多线程也只是针对处理网络请求过程采用了多线性,而数据的读写命令,

仍然是单线程处理的

2.4 应用场景举例

秒杀活动:库存扣减、订单写入等高频操作放到Redis中,避免直接访问数据库造成压力

抖音热搜榜:使用sorted set存储关键词和热度值,实现实时排序和更新

2.5 学习资源

Redis中文学习网:https://www.tkcnn.com/redis/Getting-started.html

官方文档:https://redis.io/docs/latest/get-started/

三、Redis 安装与部署

3.1 环境准备

bash 复制代码
# 下载地址:http://download.redis.io/releases/
systemctl stop firewalld
setenforce 0

yum install -y gcc gcc-c++ make

3.2 安装流程

bash 复制代码
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。
make && make PREFIX=/usr/local/redis install
## 标题
# 执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh    # 一直回车
# 注意:需要手动修改可执行文件路径为/usr/local/redis/bin/redis-server

安装脚本会生成以下配置:

端口:6379(默认侦听端口)

配置文件:/etc/redis/6379.conf

日志文件:/var/log/redis_6379.log

数据目录:/var/lib/redis/6379

可执行文件:/usr/local/redis/bin/redis-server

客户端工具:/usr/local/bin/redis-cli

3.3 环境配置

c 复制代码
# 创建符号链接,便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/

当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为 6379

c 复制代码
netstat -natp | grep redis
c 复制代码
# 服务管理
/etc/init.d/redis_6379 stop    # 停止
/etc/init.d/redis_6379 start   # 启动
/etc/init.d/redis_6379 restart # 重启
/etc/init.d/redis_6379 status  # 状态

3.4 配置文件调整

c 复制代码
vim /etc/redis/6379.conf

# 主要配置参数:
bind 127.0.0.1 192.168.10.110    # 70行,添加监听的主机地址
port 6379                      # 93行,Redis默认监听端口
daemonize yes                  # 137行,启用守护进程
pidfile /var/run/redis_6379.pid # 159行,指定PID文件
loglevel notice                # 167行,日志级别
logfile /var/log/redis_6379.log # 172行,指定日志文件

# 重启redis
/etc/init.d/redis_6379 restart

配置参数说明:

可以将Redis配置比喻为一个仓库:

bind:指定谁可以进入仓库(允许访问的IP)

port:仓库的大门编号(服务端口)

daemonize:仓库是否有人值守(守护进程模式)

requirepass:仓库的锁(访问密码)

四、Redis 命令工具

4.1 常用工具介绍

redis-server:Redis服务器启动程序

redis-cli:Redis命令行客户端工具

c 复制代码
# 连接语法:redis-cli -h host -p port -a password
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库

redis-cli -h 192.168.10.110 -p 6379 -a 123456

redis-benchmark:Redis性能测试工具

示例:redis-benchmark -c 100 -n 100000 → 100 并发,10 万请求

c 复制代码
# 测试示例
#向 IP 地址为 192.168.10.110、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.10.120 -p 6379 -c 100 -n 100000
c 复制代码
#测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.10.110 -p 6379 -q -d 100

redis-check-rdb / redis-check-aof:持久化文件修复工具

五、Redis 常用命令

5.1 基本数据操作

set:存放数据,命令格式为 set key value

get:获取数据,命令格式为 get key

c 复制代码
# 设置和获取值
127.0.0.1:6379> set teacher zhangsan
OK
127.0.0.1:6379> get teacher
"zhangsan"

5.2 模糊查询

#keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。

c 复制代码
127.0.0.1:6379> set k1 1
127.0.0.1:6379> set k2 2
127.0.0.1:6379> set k3 3
127.0.0.1:6379> set v1 4
127.0.0.1:6379> set v5 5
127.0.0.1:6379> set v22 5

127.0.0.1:6379> KEYS *      # 查看所有键
127.0.0.1:6379> KEYS v*     # 查看v开头的键
127.0.0.1:6379> KEYS v?     # 查看v开头且后面只有一位的键
127.0.0.1:6379> KEYS v??    # 查看v开头且后面有两位的键

应用场景:快速查看所有以user开头的缓存数

5.3 键值判断与删除

c 复制代码
# exists 命令可以判断键值是否存在。
127.0.0.1:6379> exists teacher  # 判断键是否存在
127.0.0.1:6379> exists tea
c 复制代码
# del 命令可以删除当前数据库的指定 key。
127.0.0.1:6379> keys *
127.0.0.1:6379> del v5
127.0.0.1:6379> get v5
c 复制代码
# type 命令可以获取 key 对应的 value 值类型。
127.0.0.1:6379> type k1         # 获取值类型

应用场景:检查某个商品是否还在缓存中

5.4 键重命名

rename命令重命名(会覆盖已存在的键)

cpp 复制代码
命令格式:rename 源key 目标key
使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且目标key的值会覆盖源key的值。在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行 rename 命令,以避免覆盖重要数据。
127.0.0.1:6379> keys v*
1) "v1"
2) "v22"
127.0.0.1:6379> rename v22 v2
OK
127.0.0.1:6379> keys v*
1) "v1"
2) "v2"
127.0.0.1:6379> get v1
"4"
127.0.0.1:6379> get v2
"5"
127.0.0.1:6379> rename v1 v2
OK
127.0.0.1:6379> get v1
(nil)
127.0.0.1:6379> get v2
"4"
cpp 复制代码
 # renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)
命令格式:renamenx 源key 目标key
127.0.0.1:6379> keys *
127.0.0.1:6379> get teacher
"zhangsan"
127.0.0.1:6379> get v2
"4"
127.0.0.1:6379> renamenx v2 teacher
(integer) 0
127.0.0.1:6379> keys *
127.0.0.1:6379> get teacher
"zhangsan"
127.0.0.1:6379> get v2
"4"

应用场景:公司业务调整,需要将"用户"相关键改为"客户",但要避免覆盖已有数据

5.5查看当前数据库中 key 的数目

cpp 复制代码
127.0.0.1:6379> dbsize  # 查看当前数据库key数量
127.0.0.1:6379> keys 

5.6 密码设置与查看

cpp 复制代码
#使用config set requirepass yourpassword命令设置密码
127.0.0.1:6379> config set requirepass 123456  # 设置密码

#使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)
127.0.0.1:6379> auth 123456                    # 认证密码
127.0.0.1:6379> config get requirepass         # 查看密码

5.7 Redis 多数据库管理

Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。

多数据库相互独立,互不干扰。

cpp 复制代码
#多数据库间切换
命令格式:select 序号
使用 redis-cli 连接 Redis 数据库后,默认使用的是序号为 0 的数据库。
# 数据库切换
127.0.0.1:6379> select 10  # 切换到10号数据库

127.0.0.1:6379[10]> select 15		#切换至序号为 15 的数据库

127.0.0.1:6379[15]> select 0			#切换至序号为 0 的数据库
cpp 复制代码
#多数据库间移动数据
格式:move 键值 序号
127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
(nil)
127.0.0.1:6379[1]> select 0			#切换至目标数据库 0
OK
127.0.0.1:6379> get k1				#查看目标数据是否存在
"100"
127.0.0.1:6379> move k1 1			#将数据库 0 中 k1 移动到数据库 1 中
(integer) 1
127.0.0.1:6379> select 1				#切换至目标数据库 1
OK
127.0.0.1:6379[1]> get k1			#查看被移动数据
"100"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get k1				#在数据库 0 中无法查看到 k1 的值
(nil)
cpp 复制代码
# 清除数据库内数据
FLUSHDB   # 清空当前数据库
FLUSHALL  # 清空所有数据库(慎用!)

应用场景:将测试数据放在1号库,生产数据在0号库,避免混

总结

相关推荐
老邓计算机毕设15 小时前
SSM学生选课系统xvbna(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生选课系统·ssm 框架·高校教学管理
難釋懷15 小时前
SpringDataRedis数据序列化器
redis·缓存
枷锁—sha15 小时前
【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)
数据库·sql·学习·安全·网络安全
逍遥德17 小时前
PostgreSQL 中唯一约束(UNIQUE CONSTRAINT) 和唯一索引(UNIQUE INDEX) 的核心区别
数据库·sql·postgresql·dba
工业甲酰苯胺17 小时前
字符串分割并展开成表格的SQL实现方法
数据库·sql
科技块儿18 小时前
IP定位技术:游戏反外挂体系中的精准识别引擎
数据库·tcp/ip·游戏
衫水18 小时前
[特殊字符] MySQL 常用指令大全
数据库·mysql·oracle
卓怡学长18 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
小句19 小时前
SQL中JOIN语法详解 GROUP BY语法详解
数据库·sql
阿杰 AJie19 小时前
MySQL 里给表添加索引
数据库·mysql