当前位置: 首页 > news >正文

Redis 新手入门:从命令行掌握 String、Hash、List、Set、ZSet 和常用操作

Redis 新手入门:从命令行掌握 String、Hash、List、Set、ZSet 和常用操作

最近在命令行里学习 Redis,整理一下 Redis 的基础数据结构、常用命令,以及后续需要继续掌握的进阶内容。

Redis 是一个基于内存的 key-value 数据库。它不像 MySQL 那样需要提前建库建表,而是通过不同命令直接创建不同类型的数据。

比如:

SET name zhangsan # 创建 String HSET user:1 name zhangsan # 创建 Hash LPUSH mylist a # 创建 List SADD myset java # 创建 Set ZADD rank 100 zhangsan # 创建 ZSet

Redis 里每个 key 都有自己的类型。同一个 key 不能既是 String,又是 Hash。如果类型用错,会报:

WRONGTYPE Operation against a key holding the wrong kind of value

一、StringRedisTemplate 和 Redisson 是什么区别?

在 Java 项目里操作 Redis,经常会看到两个工具:StringRedisTemplateRedisson

1. StringRedisTemplate

StringRedisTemplate是 Spring Data Redis 提供的 Redis 操作模板。

它更像是 Redis 命令的 Java 封装。

例如:

stringRedisTemplate.opsForValue().set("user:1","zhangsan");Stringvalue=stringRedisTemplate.opsForValue().get("user:1");

对应 Redis 命令:

SET user:1 zhangsan GET user:1

它适合做基础 Redis 操作,比如:

缓存 验证码 token 计数器 Hash/List/Set/ZSet 操作

2. Redisson

Redisson 是一个基于 Redis 的分布式工具框架。

它不只是操作 Redis 数据,还封装了很多分布式能力,例如:

分布式锁 延迟队列 布隆过滤器 分布式信号量 分布式限流

比如分布式锁:

RLocklock=redissonClient.getLock("coupon:stock:1001");lock.lock();try{// 执行业务逻辑}finally{lock.unlock();}

表面上是 Java 的lock.lock(),底层其实是 Redisson 用 Redis 帮我们实现了分布式锁。

3. 简单总结

StringRedisTemplate:直接操作 Redis 数据结构。 Redisson:把 Redis 封装成分布式工具。

常见选择:

普通缓存读写:StringRedisTemplate 分布式锁、延迟队列、限流:Redisson

它们不是互相替代的关系,真实项目里经常一起使用。


二、String 类型和 incr 自增

Redis 的 String 类型可以存普通文本,也可以存数字字符串。

例如:

SET count 10 GET count

如果 value 是整数形式的字符串,就可以执行自增:

INCR count INCRBY count 5

执行后:

GET count

结果会变成:

16

Java 中:

Longvalue=redisTemplate.opsForValue().increment("count",1);

底层对应的就是 Redis 的INCRBY命令。

但是注意:如果 value 不是整数,不能自增。

例如:

SET name zhangsan INCR name

会报错:

ERR value is not an integer or out of range

下面这些不能自增:

"abc" "zhangsan" "1.5" "{\"count\":1}"

下面这些可以自增:

"1" "100" "-5" "0"

还有一个特殊情况:如果 key 不存在,Redis 会把它当成 0,然后执行自增。

DEL count INCR count GET count

结果:

1

三、如何查看当前 Redis 里有哪些 key?

1. KEYS 命令

本地学习时,可以用:

KEYS *

查看当前库中所有 key。

例如:

KEYS *

可能返回:

1) "mylist" 2) "myzset" 3) "mykey" 4) "myhash" 5) "myset"

但是KEYS *会一次性扫描所有 key。数据量很大时可能阻塞 Redis,所以生产环境不推荐使用。

2. SCAN 命令

更推荐使用:

SCAN 0 MATCH * COUNT 100

例如:

SCAN 0 MATCH * COUNT 100

返回:

1) "0" 2) 1) "mylist" 2) "myzset" 3) "mykey" 4) "myhash" 5) "myset"

这个结果分成两部分:

第一部分:"0" 是下一次扫描用的游标 cursor。 第二部分:本次扫描出来的 key 列表。

如果返回的 cursor 是"0",说明扫描结束了。

如果返回的 cursor 不是 0,比如:

1) "384" 2) 1) "user:1" 2) "user:2"

说明还没有扫描完,下一次需要继续:

SCAN 384 MATCH * COUNT 100

直到某次返回的游标是"0",才表示扫描完成。

可以把SCAN理解成分页查询:

第一行:下一页页码 第二行:这一页查到的 key

四、查看 key 的类型和值

Redis 里不同类型的 key,要用不同命令查看。

先查看类型:

TYPE key

例如:

TYPE mylist TYPE myhash TYPE myset TYPE myzset

根据类型选择查看命令:

GET key # String HGETALL key # Hash LRANGE key 0 -1 # List SMEMBERS key # Set ZRANGE key 0 -1 WITHSCORES # ZSet,从小到大 ZREVRANGE key 0 -1 WITHSCORES # ZSet,从大到小

五、Hash:适合存对象

Hash 类似 Java 里的Map<String, String>,适合存对象的多个字段。

创建 Hash:

HSET user:1 name zhangsan age 18 city nanjing

查看整个 Hash:

HGETALL user:1

查看某个字段:

HGET user:1 name

修改字段:

HSET user:1 age 20

删除字段:

HDEL user:1 city

查看所有字段名:

HKEYS user:1

查看所有字段值:

HVALS user:1

可以理解成:

user:1={"name":"zhangsan","age":"18","city":"nanjing"}

适合存:

用户信息 商品信息 优惠券信息 配置项

六、List:有顺序的列表

List 是有序列表,可以从左边插入,也可以从右边插入。

从左边插入:

LPUSH mylist a LPUSH mylist b LPUSH mylist c

此时列表大概是:

c b a

查看整个 List:

LRANGE mylist 0 -1

从右边插入:

RPUSH mylist d RPUSH mylist e

查看:

LRANGE mylist 0 -1

弹出左边元素:

LPOP mylist

弹出右边元素:

RPOP mylist

查看长度:

LLEN mylist

按下标查看:

LINDEX mylist 0

List 适合:

消息队列雏形 最近浏览记录 任务列表 时间线

七、Set:无序去重集合

Set 是无序、不重复集合。

创建 Set:

SADD myset java SADD myset redis SADD myset mysql SADD myset java

虽然java添加了两次,但是 Set 里只会保留一份。

查看所有成员:

SMEMBERS myset

判断元素是否存在:

SISMEMBER myset java

删除元素:

SREM myset mysql

查看数量:

SCARD myset

Set 还支持集合运算。

交集:

SINTER set1 set2

并集:

SUNION set1 set2

差集:

SDIFF set1 set2

Set 适合:

去重 标签 黑名单 白名单 共同关注 抽奖名单

八、ZSet:有序集合

ZSet 也叫 Sorted Set,有序集合。

它和 Set 一样,成员不重复;但是每个成员都有一个分数score,Redis 根据 score 排序。

创建排行榜:

ZADD rank 100 zhangsan ZADD rank 90 lisi ZADD rank 120 wangwu

查看从小到大排序:

ZRANGE rank 0 -1 WITHSCORES

结果类似:

lisi 90 zhangsan 100 wangwu 120

查看从大到小排序:

ZREVRANGE rank 0 -1 WITHSCORES

查看某个成员分数:

ZSCORE rank zhangsan

增加某个成员分数:

ZINCRBY rank 10 zhangsan

查看排名,从小到大:

ZRANK rank zhangsan

查看排名,从大到小:

ZREVRANK rank zhangsan

删除成员:

ZREM rank lisi

ZSet 适合:

排行榜 热搜榜 积分榜 按时间排序的数据 延迟任务

九、给 key 设置过期时间

Redis 的 key 可以设置过期时间,到期后自动删除。

1. 设置过期时间

先创建 key:

SET name zhangsan

设置 60 秒后过期:

EXPIRE name 60

2. 创建时直接设置过期

单位是秒:

SET code 123456 EX 60

单位是毫秒:

SET code 123456 PX 60000

3. 查看剩余过期时间

TTL name

返回值含义:

正数:还剩多少秒过期 -1:key 存在,但是没有设置过期时间 -2:key 不存在

毫秒级查看:

PTTL name

4. 延长过期时间

重新设置过期时间即可:

EXPIRE name 300

注意:这不是在原来的基础上增加 300 秒,而是从当前时刻开始重新设置为 300 秒。

5. 取消过期时间

PERSIST name

取消后:

TTL name

会返回:

-1

表示 key 存在,但没有过期时间。


十、Redis 新手必须掌握的通用命令

1. key 相关

KEYS * SCAN 0 MATCH * COUNT 100 EXISTS key DEL key TYPE key RENAME oldkey newkey EXPIRE key 60 TTL key PERSIST key

其中最重要的是:

TYPE key

因为只有知道 key 的类型,才知道应该用什么命令查看它。

2. 数据库切换

Redis 默认有多个库,编号从 0 开始。

查看当前库:

KEYS *

切换到 1 号库:

SELECT 1

切回 0 号库:

SELECT 0

查看当前库 key 数量:

DBSIZE

清空当前库:

FLUSHDB

清空所有库:

FLUSHALL

注意:

FLUSHDB FLUSHALL

这两个命令很危险,本地学习可以用,生产环境不要乱敲。

3. 查看 Redis 信息

查看全部信息:

INFO

查看内存信息:

INFO memory

查看客户端连接:

INFO clients

查看持久化信息:

INFO persistence

4. 慢查询

查看慢查询日志:

SLOWLOG GET

查看最近 10 条:

SLOWLOG GET 10

查看慢查询数量:

SLOWLOG LEN

十一、后续要学的进阶内容

目前先掌握 String、Hash、List、Set、ZSet、过期时间、SCAN、TYPE、DEL 等基础操作即可。

后续可以继续学习下面这些内容。


1. Redis 事务

Redis 事务主要命令是:

MULTI 命令1 命令2 命令3 EXEC

例如:

MULTI SET a 1 SET b 2 INCR count EXEC

MULTI开始,命令不会立刻执行,而是先进入队列。

直到执行EXEC,Redis 才会把队列里的命令按顺序执行。

如果想取消事务:

DISCARD

需要注意的是:Redis 事务和 MySQL 事务不完全一样。

MySQL 事务强调:

要么全部成功,要么全部失败,可以回滚。

Redis 事务更像:

把多个命令排队,然后一次性按顺序执行。

Redis 事务不支持 MySQL 那种复杂回滚。


2. Lua 脚本

Lua 脚本可以把多个 Redis 操作封装成一个原子操作。

简单例子:

EVAL "return redis.call('GET', KEYS[1])" 1 name

意思是:执行 Lua 脚本,读取name这个 key。

Lua 在 Redis 里很常见,尤其适合处理这种场景:

判断库存是否足够 扣减库存 记录用户领取

如果这几步分开执行,可能出现并发问题。

例如抢优惠券时,逻辑可能是:

1. 判断库存是否大于 0 2. 判断用户是否领取过 3. 扣库存 4. 记录用户已领取

这些操作如果拆开执行,中间可能被其他请求插入。

用 Lua 可以让这一组操作在 Redis 里一次性执行完,保证原子性。

所以后面做优惠券、秒杀、分布式锁时,Lua 很重要。


3. Stream

Stream 是 Redis 提供的消息流数据结构,有点像 Redis 自带的消息队列。

添加消息:

XADD mystream * user zhangsan action login

查看消息:

XRANGE mystream - +

读取消息:

XREAD COUNT 2 STREAMS mystream 0

Stream 支持:

消息追加 消息读取 消费者组 消息确认 阻塞读取

它适合做:

简单消息队列 日志流 异步任务 事件流

但是在大型系统里,专业消息队列一般还是会用 RocketMQ、Kafka、RabbitMQ 等。

Redis Stream 可以理解为:

Redis 自带的轻量级消息队列能力。

4. 持久化:RDB 和 AOF

Redis 是内存数据库,数据主要存在内存里。

但是如果服务器重启,内存数据会丢失。为了避免数据完全丢失,Redis 提供了持久化机制,把数据保存到磁盘。

主要有两种方式:

RDB AOF
RDB

RDB 是快照持久化。

可以理解成:

隔一段时间给 Redis 当前数据拍一张照片,保存到磁盘。

优点:

文件紧凑 恢复速度较快 适合备份

缺点:

如果 Redis 宕机,可能丢失最近一次快照之后的数据。
AOF

AOF 是追加日志。

可以理解成:

Redis 每执行一个写命令,就把这个写命令记录到日志文件里。

Redis 重启时,可以重新执行这些写命令,把数据恢复出来。

优点:

数据更安全,丢失更少。

缺点:

文件通常比 RDB 大 恢复时可能比 RDB 慢

简单记忆:

RDB:拍照片。 AOF:记账本。

5. 淘汰策略

Redis 数据存在内存里,而内存是有限的。

如果 Redis 内存满了,该怎么办?

这就涉及 Redis 的淘汰策略。

常见策略有:

noeviction:不淘汰,内存满了后写入直接报错。 allkeys-lru:从所有 key 中淘汰最近最少使用的 key。 volatile-lru:只从设置了过期时间的 key 中淘汰最近最少使用的 key。 allkeys-random:从所有 key 中随机淘汰。 volatile-random:从设置了过期时间的 key 中随机淘汰。 volatile-ttl:优先淘汰快过期的 key。

其中 LRU 可以简单理解成:

最近很少被访问的数据,优先被删除。

真实项目中,如果 Redis 主要用来做缓存,通常需要配置最大内存和合适的淘汰策略。

否则内存满了之后,可能导致 Redis 写入失败。


6. 主从、哨兵、集群

单机 Redis 有一个问题:

如果这一台 Redis 挂了,服务就不可用了。

所以生产环境通常不会只用单机 Redis,而是会考虑高可用和扩展。

主从复制

主从复制就是:

一个主节点 master,多个从节点 slave。

主节点负责写,从节点同步主节点的数据。

常见用途:

读写分离 数据备份 提高读取能力

但是主从模式有一个问题:

如果 master 挂了,需要有人把 slave 提升为新的 master。

这个过程如果手动做,就不够自动化。

哨兵 Sentinel

哨兵就是用来监控 Redis 主从节点的。

它可以:

监控 master 是否存活 发现 master 挂掉 自动选举新的 master 通知客户端新的 master 地址

所以哨兵主要解决的是:

Redis 主从架构下的自动故障转移问题。
Redis Cluster 集群

Redis Cluster 是分片集群。

它解决的不只是高可用,还解决容量和性能扩展问题。

简单理解:

数据被分散存储到多个 Redis 节点上。

比如:

key1 在节点 A key2 在节点 B key3 在节点 C

这样可以突破单机内存限制,也能提高整体吞吐量。

简单总结:

主从复制:复制数据,提高读能力。 哨兵:监控主从,自动故障转移。 Cluster:数据分片,支持更大规模。

十二、Redis 新手学习路线

建议按照下面顺序学习:

第一阶段:基础数据结构

String Hash List Set ZSet

重点掌握:

SET / GET / INCR / INCRBY HSET / HGET / HGETALL LPUSH / RPUSH / LRANGE / LPOP / RPOP SADD / SMEMBERS / SISMEMBER / SINTER ZADD / ZRANGE / ZREVRANGE / ZINCRBY

第二阶段:key 通用操作

查看 key 查看类型 删除 key 过期时间 扫描 key 切换数据库

重点掌握:

KEYS * SCAN 0 MATCH * COUNT 100 TYPE key DEL key EXISTS key EXPIRE key seconds TTL key PERSIST key SELECT index DBSIZE

第三阶段:项目常用能力

缓存 计数器 验证码 token 排行榜 分布式锁 延迟队列

对应工具:

StringRedisTemplate:基础 Redis 操作 Redisson:分布式锁、延迟队列等高级工具

第四阶段:进阶能力

事务 Lua Stream 持久化 淘汰策略 主从复制 哨兵 Cluster 集群

十三、总结

Redis 新手最重要的是先理解这几个点:

1. Redis 是 key-value 数据库。 2. 每个 key 都有自己的数据类型。 3. 不同数据类型要用不同命令操作。 4. Redis 不需要提前建表,第一次写入时类型就确定了。 5. String、Hash、List、Set、ZSet 是最核心的五种基础数据结构。 6. key 可以设置过期时间,适合做缓存、验证码、token。 7. 本地学习可以用 KEYS *,生产环境更推荐 SCAN。 8. 后续做项目时,普通缓存读写用 StringRedisTemplate,分布式锁等高级能力可以用 Redisson。

最简单的记忆方式:

String:存简单值、JSON、计数器。 Hash:存对象。 List:存有序列表。 Set:存去重集合。 ZSet:存排行榜。 TTL/EXPIRE:控制过期。 SCAN:安全扫描 key。 TYPE:判断 key 类型。

学 Redis 不需要一开始就把所有高级概念都学完。先把基础命令练熟,再结合 Java 项目里的缓存、分布式锁、优惠券库存、排行榜等场景去理解,会更容易掌握。

http://www.jsqmd.com/news/987125/

相关文章:

  • Multi-Agent 系统扩容:水平扩展 vs 垂直扩展的选择与配置
  • 详解HTTP中的URL
  • 2026年厦门ISO认证与数字化转型咨询服务商对标评测 - 优质企业观察收录
  • PinForge:一款通用的 MCU 图形化引脚配置器
  • 爽WiFi产品拆解:一个香港WiFi蛋品牌的服务设计逻辑|选型参考
  • 金价还在跌!2026 杭州紧急行情:现在卖就是止损,再等可能更低 - 奢侈品回收评测
  • NSK BSS50100-2E 超高速滚珠丝杠技术详解
  • 小程序毕设选题推荐:基于springboot+微信小程序的文化旅游小程序系统文化景区旅游微信小程序【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 03-状态管理与路由——01-Context + useReducer 模式
  • 【设计模式-策略模式】
  • 徐州懂事星球推荐门店
  • AI 时代,IT 职业教育如何为学习者赋能?——职坐标的 AI+教育实践
  • 倒置显微镜生产厂家推荐|蔡司、徕卡、尼康与实了个验集团对比分析 - 实了个验
  • 2026山西地区配电箱厂家综合实力排行及选型参考指南 - 起跑123
  • 【INACCESSIBLE_BOOT_DEVICE】安装 Config Tool 后 Windows 蓝屏,最终通过 VMware 虚拟机解决
  • 【计算机毕业设计案例】基于springboot+微信小程序的文化旅游小程序系统(程序+文档+讲解+定制)
  • 影刀RPA完全指南_非技术人员学习自动化的心智模型
  • 网安学习笔记一阶段08——计算机网络基础安全3
  • AI产品经理 vs AI研发工程师:大厂为什么开始招中学生了?
  • 2026武汉防水补漏哪家靠谱?正规公司排名及避坑价格指南 - 苏易修缮
  • 什么是 AI 算能基础设施?企业如何选型
  • 影刀RPA实操指南_1688商品数据自动化采集
  • 深入解析LPC55S3x:从Flexcomm到EdgeLock,如何高效利用外设与安全子系统
  • Windows 10/11 下用 Conda 搞定 MFA 2.0 语音对齐,保姆级避坑指南(含网络问题解决)
  • VScode cmake mingw 使用opencv调用笔记本摄像头进行人脸识别,并生成动态库、静态库
  • 2026年执业药师资格考试高频易错题库精编(第005卷)
  • 2026全球AI大模型大战:OpenAI冲击IPO,Meta豪赌超级智能,AI Agent时代来了
  • 从 PMF 到规模化:AI Agent Harness Engineering 创业全生命周期路线图
  • 两款全网难找的“神器”,用过的都说牛!
  • 数字孪生与 Agent Harness 的协同仿真