Redis 在项目中的常见使用场景

Redis 在具体项目中的应用非常广泛,主要通过其高性能的内存存储和灵活的数据结构解决多种场景的问题。以下是典型使用场景及示例:


一、缓存加速(最常用)

场景 :缓解数据库压力,提升读取速度。
实现

  1. 查询时优先读缓存,无数据则查数据库并回填缓存。
  2. 设置过期时间(如 EXPIRE key 60)避免数据长期不一致。
python 复制代码
import redis
r = redis.Redis(host='localhost', port=6379)

def get_user(user_id):
    cache_key = f"user:{user_id}"
    user_data = r.get(cache_key)
    if user_data:
        return user_data  # 缓存命中
    else:
        user_data = db.query("SELECT * FROM users WHERE id = %s", user_id)  # 查数据库
        r.setex(cache_key, 60, user_data)  # 写入缓存,60秒过期
        return user_data

二、会话管理(Session Storage)

场景 :分布式系统中存储用户会话状态。
优势 :避免多服务器间会话同步问题。
实现

python 复制代码
from flask import Flask, session
from flask_session import RedisSessionInterface

app = Flask(__name__)
app.session_interface = RedisSessionInterface(redis=r, key_prefix='sess:')

三、实时排行榜(Sorted Set)

场景 :游戏积分榜、热点文章排名等。
操作

  • ZADD 添加分数(如 ZADD leaderboard 100 "user1"
  • ZREVRANGE 获取排名(如 ZREVRANGE leaderboard 0 9 WITHSCORES
python 复制代码
# 更新用户积分
r.zadd('game_rank', {'user1': 150, 'user2': 200})

# 获取前10名
top_users = r.zrevrange('game_rank', 0, 9, withscores=True)

四、分布式锁

场景 :控制多进程/服务对共享资源的互斥访问。
实现 :通过 SET key value NX EX 实现原子操作。

python 复制代码
def acquire_lock(lock_key, expire=10):
    if r.set(lock_key, 1, nx=True, ex=expire):
        return True  # 获取锁成功
    return False

def release_lock(lock_key):
    r.delete(lock_key)

五、消息队列(Pub/Sub 或 Stream)

场景 :异步任务处理、事件通知。
示例(Pub/Sub):

python 复制代码
# 发布者
r.publish('order_channel', 'order_id_123')

# 订阅者
pubsub = r.pubsub()
pubsub.subscribe('order_channel')
for message in pubsub.listen():
    if message['type'] == 'message':
        process_order(message['data'])

六、计数器(如阅读量)

场景 :高频更新的计数场景。
操作

python 复制代码
# 增加阅读量
r.incr('article:123:views')

# 获取当前值
views = r.get('article:123:views')

注意事项:

  1. 持久化 :根据需求选择 RDB(快照)或 AOF(日志)避免数据丢失。
  2. 内存管理 :监控内存使用,设置 maxmemory 策略(如 allkeys-lru)。
  3. 集群部署:数据量较大时使用 Redis Cluster 分片存储。

通过结合具体业务需求选择数据结构(如 Hash 存储对象、Set 去重),Redis 能显著提升系统性能和扩展性。

相关推荐
v***91301 小时前
【MySQL】JDBC的连接
数据库·mysql
j***51891 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
A***F1574 小时前
Redis开启远程访问
数据库·redis·缓存
v***44674 小时前
【MySQL — 数据库基础】深入理解数据库服务与数据库关系、MySQL连接创建、客户端工具及架构解析
数据库·mysql·架构
v***59834 小时前
Django视图与URLs路由详解
数据库·django·sqlite
i***48615 小时前
MySQL中的GROUP_CONCAT()函数详解与实战应用
数据库·mysql
K***43065 小时前
MySQL中的TRUNCATE TABLE命令
数据库·mysql
tyatyatya5 小时前
MATLAB图形标注教程:title()/xlabel()/ylabel()/legend()/grid on全解析
数据库·matlab·信息可视化
e***95645 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
左灯右行的爱情5 小时前
MySQL高并发-主从架构
数据库·mysql·架构