10年世界杯冠军_梅西2018年世界杯 - kefulq.com

Redis 学习路径(分级版),学习redis,看这一篇就够了

直播女篮世界杯 2025-12-10 06:45:33

入门级:Redis基础与核心概念

1. Redis简介与价值定位

什么是Redis:Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,支持多种数据结构,可作为数据库、缓存和消息中间件使用。

为什么选择Redis:

性能卓越:基于内存操作,读速达110000次/秒,写速达81000次/秒

功能丰富:支持多种数据结构和高级特性

高可用性:提供完整的集群方案

生态完善:客户端支持几乎所有编程语言

典型应用场景:

缓存系统(减轻数据库压力)

计数器(文章阅读量、商品库存)

消息队列(异步通信)

排行榜(游戏积分、商品销量)

实时系统(秒杀、直播在线人数)

2. 环境搭建与基础配置

2.1 安装Redis(Linux环境)

# Ubuntu/Debian

sudo apt update && sudo apt install redis-server

# CentOS/RHEL

sudo yum install redis

# 启动服务

sudo systemctl start redis

sudo systemctl enable redis # 设置开机自启

# 验证安装

redis-cli ping # 应返回 PONG

2.2 核心配置解析

配置文件路径:/etc/redis/redis.conf

必知配置项:

# 网络配置

bind 0.0.0.0 # 绑定地址,生产环境建议指定具体IP

port 6379 # 端口号(默认6379,源自作者antirez的名字缩写)

# 安全配置

requirepass yourpassword # 设置访问密码

rename-command FLUSHALL "" # 重命名危险命令,增强安全性

# 持久化配置

save 900 1 # 900秒内至少1个key变化触发RDB快照

appendonly yes # 开启AOF持久化

# 内存管理

maxmemory 2gb # 最大使用内存

maxmemory-policy allkeys-lru # 内存淘汰策略

配置生效方式:

# 修改配置后重启

sudo systemctl restart redis

# 动态修改配置(无需重启,重启后失效)

redis-cli config set maxmemory 4gb

3. 基础数据结构与操作

3.1 字符串(String)

定义:二进制安全的字符串,可存储文本、数字和二进制数据(最大512MB)

核心命令:

SET name "Redis" # 设置键值对

GET name # 获取值 → "Redis"

INCR counter # 数值自增 → 1

DECR counter # 数值自减 → 0

APPEND name " Tutorial" # 追加内容 → "Redis Tutorial"

STRLEN name # 获取长度 → 14

应用场景:

缓存用户信息:SET user:1001 '{"name":"John","age":30}'

计数器:INCR article:1001:views

分布式锁:SET lock:order NX PX 30000

3.2 哈希(Hash)

定义:键值对集合,适合存储对象类型数据

核心命令:

HSET user:1001 name "John" age 30 # 设置字段

HGET user:1001 name # 获取字段 → "John"

HGETALL user:1001 # 获取所有字段 → name "John" age "30"

HDEL user:1001 age # 删除字段

HLEN user:1001 # 字段数量 → 1

应用场景:

存储用户资料、商品信息等对象数据

配置参数管理

购物车实现

3.3 列表(List)

定义:有序字符串列表,支持两端插入和弹出操作

核心命令:

LPUSH fruits apple banana # 左侧插入 → [banana, apple]

RPUSH fruits orange # 右侧插入 → [banana, apple, orange]

LPOP fruits # 左侧弹出 → banana

LRANGE fruits 0 -1 # 获取所有元素 → [apple, orange]

LLEN fruits # 列表长度 → 2

应用场景:

消息队列:LPUSH+RPOP或RPUSH+LPOP

最新消息列表:LPUSH+LRANGE

栈(LPUSH+LPOP)和队列(LPUSH+RPOP)

3.4 集合(Set)

定义:无序唯一元素集合,支持集合运算

核心命令:

SADD tags programming redis database # 添加元素

SMEMBERS tags # 获取所有元素

SISMEMBER tags redis # 判断元素是否存在 → 1

SINTER set1 set2 # 交集运算

SUNION set1 set2 # 并集运算

SDIFF set1 set2 # 差集运算

应用场景:

标签系统:文章标签、用户兴趣标签

好友关系:共同关注、好友推荐

去重操作:UV统计基础

3.5 有序集合(Sorted Set)

定义:有序唯一元素集合,每个元素关联一个分数(score)

核心命令:

ZADD ranking 95 "Alice" 88 "Bob" 92 "Charlie" # 添加元素及分数

ZRANGE ranking 0 -1 WITHSCORES # 升序获取所有元素

ZREVRANGE ranking 0 1 # 降序获取前两名

ZSCORE ranking "Alice" # 获取分数 → 95

ZINCRBY ranking 3 "Bob" # 增加分数 → 91

应用场景:

排行榜:游戏积分、商品销量

延迟队列:按时间戳作为score

范围查询:获取分数区间的元素

4. 客户端使用与基本操作

4.1 命令行客户端

redis-cli -h host -p port -a password # 连接远程Redis

redis-cli --raw # 显示中文不乱码

redis-cli info memory # 获取内存信息

4.2 Python客户端示例

import redis

# 建立连接

r = redis.Redis(

host='localhost',

port=6379,

password='yourpassword',

decode_responses=True # 自动解码为字符串

)

# 字符串操作

r.set('name', 'Redis')

print(r.get('name')) # 输出: Redis

# 哈希操作

r.hset('user:1001', mapping={

'name': 'John', 'age': '30'})

print(r.hgetall('user:1001')) # 输出: {'name': 'John', 'age': '30'}

# 列表操作

r.lpush('fruits', 'apple', 'banana')

print(r.lrange('fruits', 0, -1)) # 输出: ['banana', 'apple']

5. 入门级必备知识与实践

5.1 键命名规范

[业务]:[模块]:[对象]:[id]

示例:

user:profile:1001(用户资料)

article:views:2023(文章阅读量)

order:status:pending(待处理订单)

5.2 常用命令速查

功能

命令示例

键管理

KEYS pattern EXISTS key DEL key EXPIRE key seconds

数据操作

SET GET HSET HGET LPUSH LRANGE SADD ZADD

服务器信息

INFO CONFIG GET DBSIZE FLUSHDB

5.3 入门实践任务

搭建本地Redis环境

使用5种基本数据结构实现一个简单的博客系统缓存层

实现文章阅读量计数器和排行榜功能

设置键过期时间,观察过期效果

提高级:核心机制与原理深入

1. 数据结构进阶与内部编码

1.1 字符串(String)的三种编码

Redis会根据字符串内容自动选择合适的编码:

int:8个字节的长整型(如SET num 123)

embstr:短字符串(<=44字节),内存连续分配

raw:长字符串(>44字节),内存分开分配

编码转换:

SET num 123 # int编码

APPEND num "abc" # 转为raw编码

设计原因:

针对不同长度字符串优化内存使用

embstr适合短字符串,减少内存碎片

int编码直接存储数值,避免字符串解析开销

1.2 哈希(Hash)的两种编码

ziplist(压缩列表):字段少且小的时候使用

hashtable(哈希表):字段多或大的时候使用

转换条件:

hash-max-ziplist-entries 512 # 字段数超过512转为hashtable

hash-max-ziplist-value 64 # 字段值超过64字节转为hashtable

设计原因:

ziplist内存紧凑,适合小对象存储

hashtable支持O(1)查找,适合大对象

1.3 列表(List)的两种编码

z