Redis 初学者必看:基本命令与操作大全(附实例)

原创 2025-08-01 09:57:42编程技术
430

Redis 作为一款高性能的键值存储数据库,广泛应用于缓存、消息队列和数据持久化等场景,是后端开发和系统架构中不可或缺的工具。对于初学者来说,掌握其基本命令与操作是入门的第一步。本文ZHANID工具网将详细介绍 Redis 常用命令,结合实际示例帮助你快速上手,为后续深入学习和实战应用打下坚实基础。

一、Redis 基础入门

Redis 是基于内存的高性能键值数据库,支持多种数据结构(String、Hash、List、Set、Zset),每秒可处理超11万次写入和8.1万次读取操作。其核心优势包括:

  • 原子性操作:所有命令天然支持原子性,适合计数器、分布式锁等场景

  • 持久化机制:支持RDB快照和AOF日志两种持久化方式

  • 高可用架构:通过主从复制和哨兵模式实现故障自动转移

  • 集群扩展:支持水平扩展至1000+节点,理论容量无上限

典型应用场景涵盖:

  • 缓存系统:存储热点数据,减轻数据库压力

  • 会话管理:保存用户登录状态和临时数据

  • 消息队列:利用List结构实现轻量级消息队列

  • 排行榜系统:通过Zset实现实时排名计算

  • 分布式锁:基于SETNX命令实现跨进程同步

二、环境搭建与连接管理

2.1 服务启动与配置

Windows系统

  1. 下载Redis-x64-3.2.100.msi安装包

  2. 安装时勾选"Add to PATH"选项

  3. 修改配置文件redis.windows-service.conf

    requirepass 000000 # 设置访问密码
    maxmemory 500mb   # 限制内存使用
  4. 通过服务管理器重启Redis服务

Linux系统

wget https://download.redis.io/releases/redis-7.0.5.tar.gz
tar xzf redis-7.0.5.tar.gz
cd redis-7.0.5
make && make install
redis-server --requirepass 000000 # 启动时设置密码

2.2 客户端连接

redis-cli -h 127.0.0.1 -p 6379 -a 000000 # 完整连接参数
127.0.0.1:6379> AUTH 000000 # 密码验证
OK
127.0.0.1:6379> SELECT 1   # 切换到1号数据库
OK

关键参数说明

  • -h:指定服务器IP(默认127.0.0.1)

  • -p:指定端口号(默认6379)

  • -n:直接选择数据库编号(0-15)

三、核心数据结构操作

3.1 String(字符串)

基础操作

SET username "alice" EX 3600 # 设置带过期时间的键
GET username         # 获取值
GETSET username "bob"     # 获取并设置新值
MSET user:1001:name "张三" user:1001:age 25 # 批量设置
MGET user:1001:name user:1001:age      # 批量获取

数值操作

SET counter 0
INCR counter   # 原子递增(结果1)
INCRBY counter 5 # 增加指定值(结果6)
DECR counter   # 原子递减(结果5)

典型应用

  • 存储用户会话:SET session:token "user_data" EX 3600

  • 实现计数器:INCR page:views:home

  • 限流控制:INCR rate:ip:192.168.1.1 EX 60

3.2 Hash(哈希)

字段操作

HSET user:1001 name "张三" age 25 city "北京" # 设置多个字段
HGET user:1001 name              # 获取单个字段
HMGET user:1001 name age           # 批量获取字段
HGETALL user:1001               # 获取所有字段

数值计算

HINCRBY user:1001 login_count 1 # 登录次数+1
HINCRBYFLOAT product:1001 price 0.5 # 价格增加0.5

典型应用

  • 存储用户信息:

    HSET user:1002 email "test@example.com" phone "13800138000"
  • 商品规格管理:

    HSET goods:2001 stock 100 price 299.99

3.3 List(列表)

队列操作

LPUSH msg_queue "消息1" "消息2" # 头部插入
RPUSH msg_queue "消息3"     # 尾部插入
LPOP msg_queue         # 头部弹出
RPOP msg_queue         # 尾部弹出

范围查询

LRANGE msg_queue 0 -1 # 获取全部元素
LRANGE msg_queue 1 2  # 获取索引1-2的元素
LLEN msg_queue     # 获取列表长度

典型应用

  • 消息队列实现:

    # 生产者
    RPUSH order_queue '{"order_id":1001,"amount":99.9}'
    
    # 消费者
    BLPOP order_queue 10 # 阻塞式获取消息
  • 最近访问记录:

    LPUSH user:1001:history "page1" "page2" "page3"
    LTRIM user:1001:history 0 4 # 保留最近5条记录

3.4 Set(集合)

基础操作

SADD tags "java" "redis" "mysql" # 添加元素
SMEMBERS tags           # 获取所有成员
SISMEMBER tags "java"       # 检查元素存在
SCARD tags            # 获取集合大小

集合运算

SADD dev_tags "java" "spring" "mysql"
SADD ops_tags "redis" "linux" "mysql"
SINTER dev_tags ops_tags     # 交集(返回mysql)
SUNION dev_tags ops_tags     # 并集
SDIFF dev_tags ops_tags     # 差集(返回java,spring)

典型应用

  • 用户标签系统:

    SADD user:1001:tags "vip" "tech" "young"
  • 文章去重处理:

    SADD article:md5 "a1b2c3d4" "e5f6g7h8"

3.5 Zset(有序集合)

基础操作

ZADD rankings 100 "张三" 200 "李四" 150 "王五" # 添加带分数的成员
ZRANGE rankings 0 -1 WITHSCORES        # 获取全部成员(带分数)
ZREVRANGE rankings 0 2            # 获取分数最高的3个成员
ZSCORE rankings "李四"            # 获取成员分数

排名操作

ZINCRBY rankings 50 "张三" # 张三分数增加50
ZRANK rankings "王五"    # 获取王五的排名(升序)
ZREVRANK rankings "李四"  # 获取李四的排名(降序)

典型应用

  • 实时排行榜:

    ZADD game:score 1500 "player1" 1200 "player2" 1800 "player3"
  • 热度排序:

    ZINCRBY hot:articles 1 "article:1001" # 文章点击量+1

redis.webp

四、高级功能与技巧

4.1 事务处理

MULTI # 开启事务
SET key1 "value1"
INCR counter
EXEC  # 执行事务

使用场景

  • 银行转账:

    MULTI
    DECR account:from 100
    INCR account:to 100
    EXEC

4.2 发布订阅

订阅端

SUBSCRIBE channel1 channel2 # 订阅多个频道

发布端

PUBLISH channel1 "Hello Redis" # 向频道发送消息

典型应用

  • 实时通知系统:

    # 订单服务
    PUBLISH order:notify '{"order_id":1001,"status":"paid"}'
    
    # 通知服务
    SUBSCRIBE order:notify

4.3 持久化配置

RDB配置(redis.conf):

save 900 1   # 15分钟内至少1次修改
save 300 10   # 5分钟内至少10次修改
rdbcompression yes # 启用压缩
dbfilename dump.rdb # 快照文件名

AOF配置

appendonly yes    # 启用AOF
appendfsync everysec # 每秒同步一次
no-appendfsync-on-rewrite yes # 重写期间不阻塞

五、性能优化与监控

5.1 性能优化技巧

  1. 避免大键:单个键值对不超过512KB

  2. 使用Pipeline:批量执行命令减少网络往返

    # 使用管道发送1000个SET命令
    echo -e "SET key1 value1\nSET key2 value2\n...1000条命令..." | redis-cli --pipe
  3. 合理选择数据结构

    • 计数器用String

    • 对象存储用Hash

    • 排行榜用Zset

5.2 监控命令

INFO         # 查看服务器统计信息
INFO memory      # 内存使用详情
INFO commandstats   # 命令执行统计
CLIENT LIST      # 查看所有客户端连接
SLOWLOG GET 10    # 获取最近10条慢查询

监控指标解读

  • instantaneous_ops_per_sec:当前QPS

  • used_memory_rss:系统总内存占用

  • keyspace_hits:缓存命中次数

  • keyspace_misses:缓存未命中次数

六、常见问题解决方案

6.1 连接问题排查

错误现象

Could not connect to Redis at 127.0.0.1:6379: Connection refused

解决方案

  1. 检查Redis服务是否运行:

    systemctl status redis
  2. 检查防火墙设置:

    sudo ufw allow 6379
  3. 检查配置文件绑定地址:

    bind 0.0.0.0 # 允许所有IP连接

6.2 内存不足处理

错误现象

OOM command not allowed when used memory > 'maxmemory'

解决方案

  1. 增加内存限制:

    maxmemory 2gb # 修改为2GB
  2. 设置淘汰策略:

    maxmemory-policy allkeys-lru # 使用LRU算法淘汰数据
  3. 优化数据结构:

    • 使用Hash存储对象减少内存占用

    • 对大集合使用分片存储

6.3 键管理最佳实践

  1. 命名规范

    • 使用冒号分隔命名空间:user:1001:profile

    • 避免使用*等特殊字符

  2. 过期策略

    • 为临时数据设置合理过期时间

    • 使用EXPIREAT设置绝对过期时间

  3. 批量删除

    # 删除所有以"temp:"开头的键
    redis-cli --scan --pattern "temp:*" | xargs redis-cli del

七、综合应用案例

7.1 分布式锁实现

-- 获取锁(Lua脚本保证原子性)
if redis.call("SETNX", KEYS[1], ARGV[1]) == 1 then
  redis.call("EXPIRE", KEYS[1], ARGV[2])
  return 1
else
  return 0
end

使用方式

# 获取锁(锁键为lock:resource,值为UUID,过期时间10秒)
EVAL "if redis.call('SETNX', KEYS[1], ARGV[1]) == 1 then redis.call('EXPIRE', KEYS[1], ARGV[2]) return 1 else return 0 end" 1 lock:resource $(uuidgen) 10

# 释放锁(仅当锁值匹配时删除)
if redis.call("GET", KEYS[1]) == ARGV[1] then
  return redis.call("DEL", KEYS[1])
else
  return 0
end

7.2 限流器实现

# 初始化计数器(设置过期时间60秒)
SET rate:ip:192.168.1.1 0 EX 60

# 请求处理(使用WATCH实现乐观锁)
WATCH rate:ip:192.168.1.1
current = GET rate:ip:192.168.1.1
if current < 100 then
  MULTI
  INCR rate:ip:192.168.1.1
  EXEC
  # 执行成功则允许请求
else
  # 超过限流阈值
  UNWATCH
fi

7.3 购物车实现

# 添加商品到购物车(Hash存储)
HSET cart:user:1001 1001 2 1002 1 # 商品ID:1001 数量:2

# 获取购物车商品列表
HKEYS cart:user:1001

# 更新商品数量
HINCRBY cart:user:1001 1001 1 # 商品1001数量+1

# 计算总价(使用Lua脚本)
local total = 0
local items = redis.call("HGETALL", KEYS[1])
for i=1,#items,2 do
  local price = redis.call("HGET", "product:"..items[i], "price")
  total = total + (tonumber(items[i+1]) * tonumber(price))
end
return total

八、学习资源推荐

  1. 官方文档

  2. 实践平台

  3. 进阶书籍

    • 《Redis设计与实现》

    • 《Redis实战》

  4. 监控工具

    • RedisInsight(官方可视化工具)

    • Prometheus + Grafana监控方案

通过系统学习本文涵盖的200+个核心命令和典型应用场景,初学者可以在3-5天内掌握Redis的基础操作,并为后续学习分布式缓存、消息队列等高级主题打下坚实基础。建议通过实际项目(如电商购物车、排行榜系统)巩固所学知识,并定期参考Redis官方文档保持技术更新。

Redis Redis命令
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

Redis 日志分析实战:如何快速定位慢查询与异常请求?
在分布式系统架构中,Redis作为核心缓存组件,其性能直接影响业务系统的响应速度。当系统出现接口超时、数据库压力骤增等异常时,80%的性能问题可归因于Redis的慢查询或异常请...
2025-09-15 编程技术
527

hset怎么用?Redis哈希表操作入门与简单示例
Redis作为高性能的键值数据库,其哈希表(Hash)数据类型凭借灵活的字段-值映射能力,成为存储结构化数据的核心工具。本文ZHANID工具网从基础语法到实战场景,系统梳理HSET命...
2025-09-01 编程技术
469

Redis 内存占用过高怎么办?一文教你精准分析和释放!
Redis作为高性能内存数据库,其内存占用直接影响系统稳定性与成本。当内存占用超过物理内存限制时,可能引发频繁的OOM(Out of Memory)错误、性能骤降甚至服务中断。本文ZHA...
2025-08-19 编程技术
552

Redis 哨兵模式详解:自动故障转移配置实战
Redis作为高性能的内存数据库,其哨兵模式(Sentinel)通过自动化监控与故障转移机制,为Redis主从架构提供了可靠的高可用解决方案。本文ZHANID工具网将深入解析哨兵模式的核...
2025-08-15 编程技术
530

Redis 如何实现消息队列?一步步教你构建轻量级MQ
在分布式系统中,消息队列是解耦服务、异步处理与流量削峰的关键工具,Redis凭借轻量、高性能的特性,成为构建轻量级消息队列的理想选择。本文将结合原理与实操,一步步带你掌...
2025-08-14 编程技术
485

Redis 高并发场景下的线程模型与性能瓶颈分析
当并发请求量达到每秒数万甚至数十万时,Redis 的单线程模型与内存特性可能引发性能瓶颈。本文ZHANID工具网将从线程模型、性能瓶颈成因及优化策略三个维度展开分析,为高并发...
2025-08-13 编程技术
465