MySQL 与 Redis 基础入门:从安装到核心操作
对于刚接触数据库的开发者来说,MySQL 和 Redis 是两个绕不开的重要工具。MySQL 作为关系型数据库的代表,适合存储结构化数据;Redis 作为高性能键值数据库,在缓存和实时场景中表现出色。本文将从基础入手,带你快速掌握这两个数据库的核心操作。
一、MySQL 基础
1. 安装与连接
安装:
- 官网下载对应系统的安装包(MySQL 官网)
- 安装过程中设置 root 密码(记住这个密码,后续连接需要)
- 验证安装:命令行输入
mysql --version
,显示版本信息则安装成功
连接数据库:
# 命令行连接
mysql -u root -p
# 输入设置的密码后进入MySQL交互界面
2. 核心概念与 SQL 语句
MySQL 的核心是数据库(Database) 和表(Table),表由行(Row) 和列(Column) 组成,类似 Excel 的工作簿和工作表。
基础 SQL 操作
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4;
-- 2. 使用数据库
USE mydb;
-- 3. 创建表(用户表示例)
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键
name VARCHAR(50) NOT NULL, -- 姓名(非空)
age INT, -- 年龄
email VARCHAR(100) UNIQUE, -- 邮箱(唯一)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间
);
-- 4. 插入数据
INSERT INTO users (name, age, email)
VALUES
('张三', 20, 'zhangsan@test.com'),
('李四', 25, 'lisi@test.com');
-- 5. 查询数据
SELECT * FROM users; -- 查询所有用户
SELECT name, age FROM users WHERE age > 20; -- 条件查询
-- 6. 更新数据
UPDATE users SET age = 21 WHERE name = '张三';
-- 7. 删除数据
DELETE FROM users WHERE id = 2;
3. Python 操作 MySQL
需要先安装驱动:pip install mysql-connector-python
import mysql.connector
# 连接数据库
db = mysql.connector.connect(
host="localhost",
user="root",
password="你的密码",
database="mydb"
)
# 创建游标(用于执行SQL)
cursor = db.cursor()
# 执行查询
cursor.execute("SELECT * FROM users")
# 获取结果
results = cursor.fetchall() # 获取所有行
for row in results:
print(row) # 输出格式:(id, name, age, email, created_at)
# 插入数据
sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
val = ("王五", 30, "wangwu@test.com")
cursor.execute(sql, val)
db.commit() # 提交事务
print(f"插入了{cursor.rowcount}条数据,ID为{cursor.lastrowid}")
# 关闭连接
cursor.close()
db.close()
二、Redis 基础
1. 安装与连接
安装:
- 官网下载安装包(Redis 官网)
- Windows 用户可使用Redis Desktop Manager或 WSL
- 启动 Redis 服务:命令行输入
redis-server
- 验证安装:新窗口输入
redis-cli ping
,返回PONG
则成功
连接数据库:
# 命令行连接
redis-cli
# 默认连接本地6379端口,如需远程连接:
redis-cli -h 服务器IP -p 端口号 -a 密码
2. 核心数据结构与命令
Redis 的核心是键值对(Key-Value),支持多种数据结构,最常用的有:
字符串(String)
最基础的键值对,适合存储简单值:
# 设置键值
set username "zhangsan"
# 设置带过期时间的键(300秒后过期)
setex verify_code 300 "123456"
# 获取值
get username
# 删除键
del verify_code
# 查看键是否存在
exists username
哈希(Hash)
适合存储对象(如用户信息),键值对中的键值对:
# 设置哈希字段
hset user:1001 name "张三" age 25 email "zhangsan@test.com"
# 获取所有字段
hgetall user:1001
# 获取单个字段
hget user:1001 age
# 删除字段
hdel user:1001 email
列表(List)
有序可重复的集合,适合存储序列数据:
# 左侧添加元素
lpush fruits "apple"
lpush fruits "banana"
# 右侧添加元素
rpush fruits "orange"
# 获取范围内元素(0到-1表示所有)
lrange fruits 0 -1
# 弹出左侧第一个元素
lpop fruits
集合(Set)与有序集合(Sorted Set)
- 集合:无序不重复,适合去重
- 有序集合:带分数的集合,适合排行榜
# 集合操作
sadd tags "python" "mysql" "redis"
smembers tags # 查看所有元素
sismember tags "java" # 判断元素是否存在
# 有序集合操作(分数用于排序)
zadd rank 80 "张三" 90 "李四" 70 "王五"
zrevrange rank 0 2 withscores # 降序取前3名(带分数)
3. Python 操作 Redis
需要先安装客户端:pip install redis
import redis
# 连接Redis
r = redis.Redis(
host="localhost",
port=6379,
db=0, # 数据库编号(0-15)
decode_responses=True # 自动转换字节为字符串
)
# 字符串操作
r.set("site", "https://example.com")
print(r.get("site")) # 输出:https://example.com
# 哈希操作
r.hset("user:1002", mapping={
"name": "李四",
"age": 30
})
print(r.hgetall("user:1002")) # 输出:{'name': '李四', 'age': '30'}
# 列表操作
r.lpush("languages", "python", "java")
r.rpush("languages", "c++")
print(r.lrange("languages", 0, -1)) # 输出:['java', 'python', 'c++']
三、两者核心差异对比
特性 | MySQL | Redis |
---|---|---|
数据存储 | 磁盘(持久化) | 内存(可选持久化) |
数据模型 | 表结构(行列) | 键值对(多数据结构) |
查询方式 | SQL 语句 | 自定义命令 |
优势场景 | 复杂查询、事务、关系数据 | 缓存、实时统计、临时数据 |
读写速度 | 较慢(磁盘 IO) | 极快(内存操作) |
数据安全 | 强(事务、日志) | 可配置(默认内存存储) |
四、入门实践:用户登录案例
结合 MySQL 和 Redis 实现一个简单的用户登录功能:
# 1. 先检查Redis中是否有登录状态(缓存)
def check_login(user_id):
# 尝试从Redis获取登录状态
login_status = r.get(f"login:status:{user_id}")
if login_status:
return True, "已登录(来自缓存)"
# 缓存未命中,查询MySQL
db = mysql.connector.connect(
host="localhost",
user="root",
password="你的密码",
database="mydb"
)
cursor = db.cursor()
cursor.execute("SELECT id FROM users WHERE id = %s", (user_id,))
user = cursor.fetchone()
db.close()
if user:
# 登录状态存入Redis(2小时过期)
r.setex(f"login:status:{user_id}", 7200, "1")
return True, "已登录(来自数据库)"
else:
return False, "用户不存在"
# 测试
print(check_login(1001)) # 第一次查询数据库
print(check_login(1001)) # 第二次查询缓存
五、入门总结
- MySQL:先掌握
CREATE
/SELECT
/INSERT
/UPDATE
/DELETE
这 5 类基础 SQL,理解表结构设计,再逐步学习索引和事务。 - Redis:重点掌握字符串、哈希、列表这三种常用数据结构,记住
set
/get
/hset
/hgetall
/lpush
/lrange
这些核心命令。
作为入门,先学会用 Python 连接并执行基础操作,再根据实际需求深入学习高级特性。这两个数据库是后端开发的基础,熟练掌握后能应对大部分开发场景。