redis简单命令

Redis基础认知(先了解是什么,为什么用)

  • Redis是什么 :开源、高性能的内存键值(Key-Value)数据库 ,也常作为缓存分布式存储工具。特点:速度极快(内存操作)、支持丰富数据结构、单线程但高并发友好。
  • 为什么项目要用Redis :缓解数据库压力(热点数据缓存)、实现分布式功能(锁、会话、限流)、实时统计等。典型项目中,Redis不是主数据库,而是辅助层
  • 核心优势:亚毫秒级响应、持久化支持(RDB/AOF)、主从/哨兵/集群高可用。

常用数据类型与命令(用redis-cli练习)

  • String (字符串,最常用):SET key valueGET keyINCR key(计数器)、EXPIRE key 60(设置过期)。
  • Hash (对象/哈希):HSET user:1 name "saiya" age 20HGETALL user:1(适合存用户信息)。
  • List (列表):LPUSH listkey itemLRANGE listkey 0 -1(消息队列、最新列表)。
  • Set (集合):SADD setkey memberSMEMBERS setkey(去重、标签)。
  • Sorted Set (ZSet) (有序集合):ZADD rank 100 user1ZRANGE rank 0 9(排行榜)。

在线Redis模拟网站

Sandbox

https://redis.io/try/sandbox/

特点

  • 官方出品,完全免费,无需注册、无需配置。
  • 交互式命令行界面,和真实redis-cli几乎一样。
  • 支持所有常用Redis命令和数据类型(String、Hash、List、Set、Sorted Set等)。
  • 隔离环境,数据不会持久化,适合练习和实验。

但是 Redis Sandbox(https://redis.io/try/sandbox/)有安全限制:

Sandbox 要求所有 Key 必须添加前缀 pg:(pg: 是 playground 的缩写),否则会直接拒绝执行,提示 "Command keys without prefix are not allowed!"。

这是官方为了防止不同用户互相干扰、保护共享环境而设计的规则。

示例:

复制代码
SET pg:name 'saiya'
GET pg:name
  • String 类型练习

    SET pg:username 'ssaiya'
    GET pg:username
    SET pg:counter 100
    INCR pg:counter
    EXPIRE pg:username 60 // 60秒后过期
    TTL pg:username

  • Hash 类型

    HSET pg:user:1 name 'saiy' age 20 city 'Singapore'
    HGETALL pg:user:1
    HGET pg:user:1 name
    HINCRBY pg:user:1 age 1

  • List 类型

    LPUSH pg:mylist 'item1' 'item2'
    RPUSH pg:mylist 'item3'
    LRANGE pg:mylist 0 -1
    LPOP pg:mylist

  • Set 类型

    SADD pg:myset 'apple' 'banana' 'orange'
    SMEMBERS pg:myset

  • Sorted Set(排行榜)

    ZADD pg:ranking 100 'user1' 85 'user2' 95 'user3'
    ZRANGE pg:ranking 0 2 WITHSCORES

  • 查看所有自己的key

    KEYS pg:*

  • 删除

    DEL pg:username

  • 清空当前会话的所有key(小心使用):

    FLUSHDB

其他

这个 Sandbox 对新手有点不友好,可以换一个不需要加 pg: 的在线练习网站:

https://rapidtoolset.com/en/tool/redis-playground

https://onecompiler.com/redis

命令

初始化和通用命令

复制代码
PING
    含义:发送一个简单的 ping 请求,测试 Redis 服务器是否正常运行。
    预期输出:PONG
INFO server
    含义:返回 Redis 服务器的基本信息(如版本、运行时间、内存使用等)。
    拓展:实际项目中可用于监控 Redis 状态,查看内存占用、客户端连接数等。
KEYS *
    含义:返回当前数据库中所有的 key(* 是通配符,匹配任意字符)。
    注意:在练习环境安全,但在真实生产环境强烈不推荐使用!因为它会扫描整个数据库,可能导致 Redis 短暂阻塞。
    拓展:生产中请改用 SCAN 0 MATCH * COUNT 100(迭代式、安全,不会阻塞)。
DBSIZE
    含义:返回当前数据库中 key 的总数量。
    拓展:快速了解数据库规模。
FLUSHDB
    含义:清空当前数据库的所有 key(谨慎使用,只在练习时用)。
    拓展:生产中很少用全清,通常用 DEL key 或按前缀批量删除。

SCAN

  • 这是 Redis 的核心命令(还有 SSCAN、HSCAN、ZSCAN 等变体)。
  • 作用:基于游标(cursor)的迭代器,用来逐步扫描集合中的元素(这里扫描的是整个数据库的 Key 空间)。
  • 优点:不会阻塞 Redis 主线程,适合生产环境大数据库使用。每次调用只处理少量数据,返回一部分结果和下一个游标。

0(游标 / cursor)

  • 表示起始游标,意思是"从头开始一次新的迭代"。
  • Redis 会返回一个新游标(一个整数)和一批匹配的 Key。
  • 下次调用时,用上一次返回的游标继续扫描(例如 SCAN 1234 MATCH * COUNT 100)。
  • 当返回的游标再次变为 0 时,表示本次完整迭代结束(所有 Key 已扫描完毕)。
  • 注意:即使某次返回的 Key 列表为空,也不代表结束,必须看游标是否为 0。

**MATCH ***(匹配模式)

  • MATCH 是可选参数,用于过滤只返回匹配特定模式的 Key。
  • * 是通配符(glob 风格模式),意思是匹配所有 Key(相当于没有过滤,扫描整个数据库)。
  • 其他常见例子:
    • MATCH user:* → 只匹配以 user: 开头的 Key
    • MATCH *cache* → 匹配包含 cache 的 Key
  • 匹配是在 Redis 取出元素之后进行的,如果取出的元素不匹配,就不会返回。

COUNT 100

  • COUNT 是可选参数,提示(hint)Redis 每次迭代大致返回多少个元素(不是严格保证)。
  • 这里 100 表示:希望 Redis 每次调用尽量扫描/返回大约 100 个 Key(实际可能会多一点或少一点,取决于内部 hash 表结构和是否有 MATCH 过滤)。
  • 默认值是 10。
  • COUNT 越大,一次调用返回越多,但单次命令耗时可能越长(对 Redis 负载有影响)。生产中常设为 100~10000,根据实际情况调整。
  • 注意:它不是"最多返回 100 个",而是"建议每次做多少工作量"。

Redis 的 SCAN 命令总是返回一个包含两个元素的数组

  1. 第一个元素 "0" :这是下一个游标(cursor)
    1. "0" 表示本次迭代已经完成,数据库中所有匹配的 Key 都已经扫描完毕。
    2. 如果返回的不是 "0",而是一个其他数字(如 "12345"),那就代表还没扫完,你需要用这个数字继续调用 SCAN 12345 MATCH *。
  1. 第二个元素 :这是一个数组,里面包含本次扫描返回的匹配 Key 列表。
    1. 这里返回了 4 个 Key:"time"、"name"、"timi"、"our"。
    2. 这些就是你数据库里目前所有匹配 * 模式(即所有 Key)的键名。

String(字符串)入门 ------ 最常用类型(缓存、计数器等)

复制代码
SET fruit name 'apple'
SET city 'Singapore'
GET fruit_name
GET city
SET counter 100
INCR counter
    含义:将 key counter 的值 原子性 +1(适合高并发计数)。
    拓展:用于页面访问量、点赞数、库存扣减等。
INCRBY counter 50
    含义:将 counter 的值 增加 50。
DECR counter
    含义:将 counter 的值 原子性 -1。
GET counter
APPEND fruit_name ' is sweet'
    含义:在 key fruit_name 的值末尾追加字符串 ' is sweet'。
    拓展:可用于日志拼接等场景。
GET fruit_name
DEL fruit_name
    含义:删除指定的 key fruit_name。
EXISTS city
    含义:检查 key city 是否存在(返回 1 表示存在,0 表示不存在)。
TTL city
    含义:查看 key city 的剩余存活时间(秒),-1 表示永不过期。
EXPIRE city 60
    含义:设置 key city 在 60 秒后自动过期删除。
    拓展:缓存必备,防止数据永远占用内存(生产中常加随机值防雪崩,如 300 + random(60))。
TTL city
TYPE fruit_name
    含义:返回 key 的数据类型(这里是 string)。
KEYS *

Hash(哈希 / 对象):

复制代码
HSET fruit:1001 name 'banana' color 'yellow' weight 120 taste 'sweet'
HGET fruit:1001 name
HGET fruit:1001 color
HGETALL fruit:1001
HSET fruit:1001 weight 150
HINCRBY fruit:1001 weight 30
HMGET fruit:1001 name color weight
HDEL fruit:1001 taste
HGETALL fruit:1001
KEYS *

List(列表):

复制代码
LPUSH fruitlist 'apple' 'banana' 'orange'
RPUSH fruitlist 'mango' 'grape'
LRANGE fruitlist 0 -1
LPOP fruitlist
RPOP fruitlist
LRANGE fruitlist 0 -1
LLEN fruitlist
LINDEX fruitlist 1
KEYS *

Set(集合):

复制代码
SADD fruits 'apple' 'banana' 'orange' 'apple'
SMEMBERS fruits
SCARD fruits
SISMEMBER fruits 'banana'
SADD fruits2 'banana' 'grape' 'kiwi'
SINTER fruits fruits2
SUNION fruits fruits2
SDIFF fruits fruits2
SPOP fruits
KEYS *

Sorted Set(有序集合 / 排行榜):

复制代码
ZADD fruit_ranking 100 'apple' 85 'banana' 95 'orange' 120 'mango'
ZRANGE fruit_ranking 0 -1 WITHSCORES
ZREVRANGE fruit_ranking 0 2 WITHSCORES
ZSCORE fruit_ranking 'mango'
ZINCRBY fruit_ranking 10 'mango'
ZRANK fruit_ranking 'mango'
ZREM fruit_ranking 'banana'
ZCARD fruit_ranking
ZCOUNT fruit_ranking 90 110
KEYS *

综合练习(模拟实际项目场景):

复制代码
# 1. 水果缓存(String)
SET cache:fruit:1001 '{"name":"banana","color":"yellow","weight":150}'
GET cache:fruit:1001

# 2. 访问计数器
SET views:home 0
INCR views:home
INCRBY views:home 10

# 3. 最新水果列表(List)
LPUSH fruits:recent 'apple' 'banana' 'orange' 'mango'
LRANGE fruits:recent 0 9

# 4. 水果标签(Set)
SADD fruit:1001:tags 'sweet' 'tropical' 'yellow'
SMEMBERS fruit:1001:tags

# 5. 水果甜度排行榜(Sorted Set)
ZADD sweetness_ranking 95 'banana' 88 'apple' 92 'mango' 75 'grape' 98 'orange'
ZREVRANGE sweetness_ranking 0 4 WITHSCORES

KEYS *

过期与清理:

复制代码
SET temp_fruit 'will_expire_soon'
EXPIRE temp_fruit 30
TTL temp_fruit
PERSIST temp_fruit
DEL temp_fruit
FLUSHDB
KEYS *
相关推荐
色空大师1 天前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
亚历克斯神1 天前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
IAUTOMOBILE1 天前
用Python批量处理Excel和CSV文件
jvm·数据库·python
sghuter1 天前
Ubuntu安装Redis
redis·ubuntu·bootstrap
常利兵1 天前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring
liqianpin11 天前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
kgduu1 天前
js之客户端存储
javascript·数据库·oracle
light blue bird1 天前
原生控件GDI完成作业协同界面
jvm·数据库·.net·winform·gdi+界面
聊点儿技术1 天前
利用IP归属地查询识别异地登录风险:企业账号安全的技术探索
数据库·tcp/ip·安全
Ricky_Theseus1 天前
SQL Server 的五种约束类型
数据库·sql·oracle