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号库,避免混

总结

相关推荐
我是高手高手高高手3 小时前
TP8 增加数据时在数据回滚事务时没错误数据却没有插入(表数据插入不了)startTrans() rollback()Db::transaction
数据库
小光学长3 小时前
基于web的影视网站设计与实现14yj533o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·前端·数据库
菜鸟小九3 小时前
redis基础(数据结构)
数据结构·数据库·redis
bkspiderx3 小时前
libmysqlclient:MySQL 底层客户端库的全面指南
数据库·mysql·mysqlclient·libmysqlclient·mysql 底层客户端库
Arva .3 小时前
详细描述一条 SQL 在 MySQL 中的执行过程
数据库·sql·mysql
数据库学啊3 小时前
好用的车联网时序数据库机构有哪些
大数据·数据库·时序数据库
Elastic 中国社区官方博客3 小时前
如何通过个性化、分群感知排序来提升电商搜索相关性
大数据·数据库·elasticsearch·搜索引擎·全文检索
urkay-4 小时前
Android 数据库操作线程安全吗
android·数据库·安全
ZeroNews内网穿透4 小时前
RStudio Server 结合 ZeroNews,实现远程访问管理
运维·服务器·网络·数据库·网络协议·安全·web安全
李白你好4 小时前
Redis 漏洞图形化利用工具
数据库·redis·缓存