Redis 核心数据结构介绍

Redis 核心数据结构介绍

2.1 String(字符串)

核心命令

  • SET key value:设置 key 对应的字符串值
  • GET key:获取 key 对应的值
  • INCR key:将 key 中存储的数字值加一
  • EXPIRE key seconds:设置 key 的过期时间
  • APPEND key value:追加字符串到指定 key 的末尾

企业应用场景

  • 用户登录状态缓存
  • 短信验证码临时存储(过期自动删除)
  • PV/UV 计数器、接口访问次数统计

Python 示例(短信验证码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import redis
import random

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

def send_sms_code(phone):
code = str(random.randint(100000, 999999))
key = f"sms:{phone}"
r.set(key, code)
r.expire(key, 300) # 设置5分钟过期
print(f"验证码已发送至 {phone}{code}")

def validate_sms_code(phone, code_input):
key = f"sms:{phone}"
code = r.get(key)
return code_input == code

# 示例
send_sms_code("13800000000")
print(validate_sms_code("13800000000", "123456")) # False

2.2 List(列表)

核心命令

  • LPUSH key value:从左侧推入元素
  • RPUSH key value:从右侧推入元素
  • LPOP key:从左侧弹出元素
  • LRANGE key start stop:获取指定区间内的元素列表

企业应用场景

  • 消息队列系统(左进右出/右进左出)
  • 实时评论系统
  • 待处理任务队列

Python 示例(待处理任务队列)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def push_task(task):
r.lpush("task_queue", task)

def process_task():
task = r.rpop("task_queue")
if task:
print("处理任务:", task)
else:
print("当前无任务")

# 示例
push_task("任务1")
push_task("任务2")
process_task()
process_task()

2.3 Hash(哈希表)

核心命令

  • HSET key field value:设置哈希字段
  • HGET key field:获取哈希字段的值
  • HGETALL key:获取整个哈希表内容
  • HDEL key field:删除指定字段

企业应用场景

  • 用户基本信息缓存
  • 商品详情缓存
  • 配置项快速读取

Python 示例(用户信息存储)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
user_id = "user:1001"

def set_user_info(uid, field, value):
r.hset(uid, field, value)

def get_user_info(uid):
return r.hgetall(uid)

# 示例
set_user_info(user_id, "name", "Alice")
set_user_info(user_id, "email", "[email protected]")

info = get_user_info(user_id)
print(info)

2.4 Set(集合)

核心命令

  • SADD key value:向集合添加元素
  • SREM key value:移除集合元素
  • SISMEMBER key value:判断是否是集合成员
  • SDIFF key1 key2:返回 key1 独有的元素

企业应用场景

  • 标签系统(如兴趣、分类标签)
  • 用户黑名单系统
  • 抽奖系统去重存储(唯一参与者)

Python 示例(黑名单系统)

1
2
3
4
5
6
7
8
9
10
11
blacklist_key = "user:blacklist"

def add_to_blacklist(user_id):
r.sadd(blacklist_key, user_id)

def is_blacklisted(user_id):
return r.sismember(blacklist_key, user_id)

# 示例
add_to_blacklist("user:1002")
print(is_blacklisted("user:1002")) # True

2.5 Sorted Set(有序集合)

核心命令

  • ZADD key score value:添加元素及分数
  • ZRANGE key start stop [WITHSCORES]:获取元素按分数升序排列
  • ZREM key value:删除指定元素
  • ZSCORE key value:获取某个元素的分数

企业应用场景

  • 实时排行榜(如积分、活跃度)
  • 热搜榜(搜索次数排名)
  • 新闻/文章推荐系统(根据时间和热度排序)

Python 示例(积分排行榜)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
leaderboard = "game:scoreboard"

def add_score(user, score):
r.zadd(leaderboard, {user: score})

def get_top_users(n=3):
return r.zrange(leaderboard, 0, n - 1, withscores=True)

# 示例
add_score("Alice", 80)
add_score("Bob", 95)
add_score("Charlie", 90)

top_users = get_top_users()
print("排行榜:", top_users)


Redis 核心数据结构介绍
https://dreamshao.github.io/2025/07/10/redis核心数据结构/
作者
Yun Shao
发布于
2025年7月10日
许可协议