Redis 基础(开发者视角)

一、Redis

Redis 是什么?

  • 类型: 基于内存的 Key-Value 数据库

  • 特点: 快、支持多种数据结构、支持持久化、支持高可用

  • 典型用途:

    • 缓存(数据库前面加一层)

    • Session 存储

    • 分布式锁

    • 限流

    • 消息队列 / 延迟队列

    • 排行榜

二、基础语法:命令行快速上手

2.1 连接与基础操作

# 连接
redis-cli -h 127.0.0.1 -p 6379

# 查看所有 key(生产环境慎用)
KEYS *

# 判断 key 是否存在
EXISTS user:1

# 删除 key
DEL user:1

# 设置过期时间(秒)
EXPIRE user:1 60

# 查看剩余 TTL
TTL user:1

开发习惯:所有 key 建议加前缀,如:user:1:nameorder:123:status

三、数据结构 + 使用场景 + 代码示例

我用 Python(redis-py)演示,安装:

pip install redis

连接代码:

import redis

r = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)

3.1 String:最常用类型

使用场景

  • 缓存单个值(如用户昵称)

  • 计数器(浏览量、点赞数)

  • 分布式锁(SET NX EX)

基础命令

SET user:1:name "doudou"
GET user:1:name

INCR article:1001:views
INCRBY article:1001:views 10

SET session:token "user_1" EX 3600   # 带过期时间
1. 设置字符串值(String)
SET user:1:name "doudou"   # 设置 key=user:1:name 的值为 "doudou",如果 key 不存在则创建,存在则覆盖
说明
  • SET 是 Redis 最基础的写入命令

  • 适合存储简单字符串:用户名、token、配置项等

  • 覆盖写入,不需要提前判断 key 是否存在

使用场景
  • 缓存用户昵称

  • 存储临时数据

  • 存储 session 信息

2. 获取字符串值
GET user:1:name   # 获取 key=user:1:name 的值
说明
  • 如果 key 不存在,返回 (nil)

  • GET 是非常快的 O(1) 操作

使用场景
  • 缓存读取

  • 配置读取

  • Session 读取

3. 自增(计数器)
INCR article:1001:views   # 将 key=article:1001:views 的值 +1,如果不存在则从 0 开始变成 1
说明
  • 原子操作:并发环境下不会出现竞争问题

  • 如果 key 不存在,会自动初始化为 0 再 +1

  • 只能对数字字符串操作,否则报错

使用场景
  • 浏览量计数

  • 点赞数计数

  • 接口调用次数统计

  • 限流计数器

4. 自增指定数值
INCRBY article:1001:views 10   # 将 key 的值增加 10
说明
  • INCR 一样是原子操作

  • 可以一次性增加任意整数

使用场景
  • 批量增加积分

  • 批量增加库存

  • 批量增加访问量

5. 设置带过期时间的 key
SET session:token "user_1" EX 3600   # 设置 token,过期时间为 3600 秒(1 小时)
说明
  • EX 3600 表示 过期时间(秒)

  • 过期后 key 会自动删除

  • 常用于 Session、验证码、临时缓存

使用场景
  • 登录 token(1 小时过期)

  • 验证码(60 秒过期)

  • 缓存数据(5 分钟过期)

注意事项
  • 强烈建议所有缓存 key 都设置过期时间,避免内存爆炸

  • 如果你需要毫秒级过期,可以用 PX

同样命令的 Python 示例(开发者最常用)

import redis

r = redis.Redis(host='127.0.0.1', port=6379, decode_responses=True)

# SET
r.set("user:1:name", "doudou")

# GET
print(r.get("user:1:name"))

# INCR
r.incr("article:1001:views")

# INCRBY
r.incrby("article:1001:views", 10)

# SET with expire
r.set("session:token", "user_1", ex=3600)

Python 示例:计数器

# 文章浏览量 +1
def incr_article_view(article_id: int):
    key = f"article:{article_id}:views"
    new_value = r.incr(key)
    return new_value

print(incr_article_view(1001))

解析:

  • INCR 是原子操作,多线程/多进程下不会出现并发问题

  • 非常适合做:点赞数、浏览量、库存计数

3.2 Hash:适合存对象

使用场景

  • 用户信息:user:1 -> {name, age, email}

  • 配置项:config:system -> {key1, key2}

基础命令


                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值