【苍穹外卖 day05 | Redis安装与常用命令】

前言

刚开始学 Redis,最容易乱的地方通常不是概念,而是 装好之后怎么启动、怎么连接、常用命令到底该怎么记。如果这些基础动作没有走顺,后面再学缓存、分布式锁、排行榜,都会感觉很飘。

这篇就只做一件事:把 Redis 安装、启动、连接和常用命令 讲清楚

Redis是什么

Redis 是一个基于内存的 key-value 数据库,读写速度很快,常用在下面这些场景里:

  • 缓存热点数据
  • 保存临时状态
  • 做排行榜
  • 做计数器
  • 做消息队列或延迟处理

它和关系型数据库不一样,Redis 更强调 灵活的数据结构。除了最常见的字符串,还支持 hash、list、set、sorted set 这些结构。

Windows安装 Redis

安装后的核心文件一般会看到这几个:

  • redis-server.exe
  • redis-cli.exe
  • redis.windows.conf

这三个文件分别负责:

  • redis-server.exe:启动 Redis 服务
  • redis-cli.exe:打开 Redis 命令行客户端
  • redis.windows.conf:Redis 配置文件

Redis怎么启动

进入 Redis 的安装目录后,直接执行:

powershell 复制代码
redis-server.exe redis.windows.conf

这个命令的意思很直接:

  • redis-server.exe 启动 Redis
  • 启动时加载当前目录下的 redis.windows.conf 配置文件

Redis 默认监听端口是 6379

如果窗口正常启动,说明 Redis 服务已经起来了。这时候不要立刻关窗口,因为这个窗口本身就是 Redis 服务进程的承载窗口。

如果想停止 Redis,最直接的方法就是在当前窗口按:

text 复制代码
Ctrl + C

Redis怎么连接

Redis 服务启动后,再打开一个终端窗口,进入同一目录,执行:

powershell 复制代码
redis-cli.exe

这样会默认连接本机的 Redis,也就是:

  • 主机:127.0.0.1
  • 端口:6379

如果不是默认地址,也可以手动指定参数:

powershell 复制代码
redis-cli.exe -h 127.0.0.1 -p 6379

如果 Redis 设置了密码,还要补上认证参数:

powershell 复制代码
redis-cli.exe -h 127.0.0.1 -p 6379 -a 你的密码

这里要注意一件事:Redis 服务已经启动,不代表客户端一定能连上。如果连接失败,优先查这几个问题:

  1. Redis 服务有没有真的启动
  2. 端口是不是 6379
  3. 密码有没有写对
  4. 配置文件改完之后有没有重启 Redis

Redis密码怎么配置

如果要给 Redis 设置密码,可以修改 redis.windows.conf

配置方式通常是:

properties 复制代码
requirepass your-password

这里的 your-password 只是示例,实际博客里不要写真实密码。

改完之后有两个注意点:

  • 配置文件里的修改不会自动生效
  • 必须重启 Redis 服务

也就是说,改完 redis.windows.conf 之后,要先停掉 Redis,再重新执行启动命令。

Redis常见数据类型

Redis 最常见的 5 种数据类型分别是:

  • string:普通字符串
  • hash:键值对集合,适合存对象
  • list:有顺序、可重复的列表
  • set:无序、不可重复的集合
  • sorted set:带分数的有序集合

这几种结构不是为了背定义,而是为了根据场景选对命令。

比如:

  • 存一个验证码,适合用 string
  • 存一个用户对象的多个字段,适合用 hash
  • 存一个消息队列,适合用 list
  • 存一组不重复标签,适合用 set
  • 存积分榜,适合用 sorted set

string 常用命令

string 是 Redis 里最基础的数据类型,几乎每个初学者最先接触的都是这一组命令。

SET 和 GET

按照 Redis 官方文档,SET 用来写入字符串值,GET 用来读取字符串值。

redis 复制代码
SET name zhangsan
GET name

执行效果可以理解成:

  • SET name zhangsan:把 name 这个 key 的值设成 zhangsan
  • GET name:把 name 对应的值取出来

设置过期时间

如果这个值只想保留一段时间,可以直接在 SET 时带过期参数:

redis 复制代码
SET code 1234 EX 60

这表示:

  • key 是 code
  • value 是 1234
  • 60 秒后自动过期

这个场景很像验证码、临时 token 或一次性状态。

只在 key 不存在时设置

redis 复制代码
SET lock_key 1 NX EX 30

这条命令的意思是:

  • 只有 lock_key 不存在时,才允许设置成功
  • 成功后 30 秒过期

hash 常用命令

hash 很适合存对象,因为它能把一个对象拆成多个字段来保存。

HSET 和 HGET

redis 复制代码
HSET user:1 name zhangsan age 20 city beijing
HGET user:1 name
HGET user:1 age

这里可以把 user:1 理解成一个对象:

  • name 对应 zhangsan
  • age 对应 20
  • city 对应 beijing

相比 string,hash 的优势是一个 key 下面可以挂很多字段,读取和修改某个字段都很方便。

HKEYS、HVALS、HDEL

redis 复制代码
HKEYS user:1
HVALS user:1
HDEL user:1 age

这几个命令分别表示:

  • HKEYS:查看这个 hash 里有哪些字段
  • HVALS:查看这个 hash 里有哪些值
  • HDEL:删除某个字段

如果只是想存一个人的多个属性,hash 通常比把整段 JSON 塞进 string 更直观。

list 常用命令

list 可以理解成一个有顺序的队列,元素允许重复。

LPUSH 和 LRANGE

redis 复制代码
LPUSH mylist a
LPUSH mylist b
LPUSH mylist c
LRANGE mylist 0 -1

这里要注意:

  • LPUSH 是从左侧插入
  • LRANGE mylist 0 -1 表示查看整个列表

如果连续从左侧插入,最终顺序会和插入顺序有点反着来,这个刚开始很容易看晕,最好自己在命令行敲一遍。

RPOP 和 LLEN

redis 复制代码
RPOP mylist
LLEN mylist

作用分别是:

  • RPOP:弹出最右边的元素
  • LLEN:查看列表长度

list 很适合做简单消息队列或者任务缓冲区。

set 常用命令

set 的特点是 无序元素不重复

SADD、SMEMBERS、SCARD

redis 复制代码
SADD myset java
SADD myset redis
SADD myset mysql
SMEMBERS myset
SCARD myset

这几个命令分别表示:

  • SADD:往集合里加元素
  • SMEMBERS:查看集合全部元素
  • SCARD:查看集合元素个数

如果重复添加同一个元素,set 不会重复保存,这就是它和 list 最大的区别之一。

SINTER 和 SUNION

redis 复制代码
SADD set1 a b c
SADD set2 b c d
SINTER set1 set2
SUNION set1 set2

这里很适合记两个词:

  • SINTER:交集
  • SUNION:并集

如果以后要做共同标签、共同好友、共同兴趣这类需求,set 会非常顺手。

sorted set 常用命令

sorted set 可以理解成 每个元素都带一个分数的集合,Redis 会根据分数自动排序。

ZADD 和 ZRANGE

Redis 官方文档里给出的典型场景就是这种带分值排序的数据结构。

redis 复制代码
ZADD score 10 tom
ZADD score 20 jack
ZADD score 15 rose
ZRANGE score 0 -1
ZRANGE score 0 -1 WITHSCORES

这几条命令的含义是:

  • ZADD:添加成员并指定分数
  • ZRANGE score 0 -1:按分数顺序查看全部成员
  • WITHSCORES:把分数一起显示出来

这就是排行榜场景最常见的基础命令。

ZINCRBY 和 ZREM

redis 复制代码
ZINCRBY score 5 tom
ZREM score jack

作用分别是:

  • ZINCRBY:给某个成员增加分数
  • ZREM:删除某个成员

只要业务里出现"积分""热度""排名"这种词,通常都可以先想到 sorted set。

通用命令

除了按数据类型分的命令,Redis 还有一组几乎所有场景都会用到的通用命令。

KEYS

redis 复制代码
KEYS *
KEYS user:*

作用是按模式查找 key。

  • KEYS *:查看当前库里所有 key
  • KEYS user:*:查看以 user: 开头的 key

这个命令平时学习和排查非常方便,但线上环境不要滥用,因为 key 太多时会影响性能。

EXISTS

redis 复制代码
EXISTS name

用来检查某个 key 是否存在。

如果返回 1,说明存在;返回 0,说明不存在。

TYPE

redis 复制代码
TYPE mylist
TYPE user:1

这个命令很适合排查问题。

比如你明明以为某个 key 是 string,结果它其实是 list,这时候很多命令报错就很正常了。先用 TYPE 看清楚,再决定后面怎么操作。

DEL

redis 复制代码
DEL name
DEL mylist

DEL 用来删除 key。

如果你在练习命令时把数据写乱了,最直接的处理方式就是把测试 key 删除,再重新来一遍。

刚开始练 Redis,建议怎么记命令

Redis 命令看起来多,但刚开始不要想着一口气全背下来。更实用的办法是按数据类型记。

可以先记这一组最小闭环:

  • string:SETGET
  • hash:HSETHGET
  • list:LPUSHLRANGE
  • set:SADDSMEMBERS
  • sorted set:ZADDZRANGE
  • 通用命令:KEYSEXISTSTYPEDEL

先把这一组敲熟,后面再慢慢补:

  • 过期时间
  • 条件写入
  • 交集并集
  • 分数递增

这样学下来会比直接背命令表顺很多。

常见问题

1. Redis 启动了,为什么连不上

优先检查:

  1. 当前 Redis 进程是不是还活着
  2. 端口是不是 6379
  3. 有没有设置密码
  4. 配置文件改完后是不是没重启

2. 为什么同一个 key 换个命令就报错

通常是因为 数据类型不匹配

比如一个 key 实际上是 list,你却拿 GET 去读,就会报错。这时候先用 TYPE 看类型。

3. 为什么 KEYS * 能看到数据,但读不出来

这时候要先确认两件事:

  • key 名字有没有写错
  • 读取命令和数据类型是不是匹配

很多初学阶段的问题,本质上都不是 Redis 坏了,而是命令和结构没对上。

总结

Redis 入门最重要的不是一下子会多少高级特性,而是先把 安装、启动、连接和常用命令 这一套动作练熟。

只要 string、hash、list、set、sorted set 这几组命令能自己敲通,后面再学缓存、排行榜、消息队列和分布式锁,就会轻松很多。

Redis安装与常用命令

前言

刚开始学 Redis,最容易乱的地方通常不是概念,而是 装好之后怎么启动、怎么连接、常用命令到底该怎么记。如果这些基础动作没有走顺,后面再学缓存、分布式锁、排行榜,都会感觉很飘。

这篇就只做一件事:把 Redis 安装、启动、连接和常用命令 讲清楚,不展开项目代码,先把最基础的使用链路跑通。

Redis是什么

Redis 是一个基于内存的 key-value 数据库,读写速度很快,常用在下面这些场景里:

  • 缓存热点数据
  • 保存临时状态
  • 做排行榜
  • 做计数器
  • 做消息队列或延迟处理

它和关系型数据库不一样,Redis 更强调 灵活的数据结构。除了最常见的字符串,还支持 hash、list、set、sorted set 这些结构。

Windows下怎么安装 Redis

如果当前是跟着课程资料学,最省事的方式通常不是自己从零编译,而是直接使用已经准备好的 Windows 版 Redis 文件。

安装后的核心文件一般会看到这几个:

  • redis-server.exe
  • redis-cli.exe
  • redis.windows.conf

这三个文件分别负责:

  • redis-server.exe:启动 Redis 服务
  • redis-cli.exe:打开 Redis 命令行客户端
  • redis.windows.conf:Redis 配置文件

如果只是本地学习,这套文件已经够用了。

Redis怎么启动

进入 Redis 的安装目录后,直接执行:

powershell 复制代码
redis-server.exe redis.windows.conf

这个命令的意思很直接:

  • redis-server.exe 启动 Redis
  • 启动时加载当前目录下的 redis.windows.conf 配置文件

Redis 默认监听端口是 6379

如果窗口正常启动,说明 Redis 服务已经起来了。这时候不要立刻关窗口,因为这个窗口本身就是 Redis 服务进程的承载窗口。

如果想停止 Redis,最直接的方法就是在当前窗口按:

text 复制代码
Ctrl + C

Redis怎么连接

Redis 服务启动后,再打开一个终端窗口,进入同一目录,执行:

powershell 复制代码
redis-cli.exe

这样会默认连接本机的 Redis,也就是:

  • 主机:127.0.0.1
  • 端口:6379

如果不是默认地址,也可以手动指定参数:

powershell 复制代码
redis-cli.exe -h 127.0.0.1 -p 6379

如果 Redis 设置了密码,还要补上认证参数:

powershell 复制代码
redis-cli.exe -h 127.0.0.1 -p 6379 -a 你的密码

这里要注意一件事:Redis 服务已经启动,不代表客户端一定能连上。如果连接失败,优先查这几个问题:

  1. Redis 服务有没有真的启动
  2. 端口是不是 6379
  3. 密码有没有写对
  4. 配置文件改完之后有没有重启 Redis

Redis密码怎么配置

如果要给 Redis 设置密码,可以修改 redis.windows.conf

配置方式通常是:

properties 复制代码
requirepass your-password

这里的 your-password 只是示例,实际博客里不要写真实密码。

改完之后有两个注意点:

  • 配置文件里的修改不会自动生效
  • 必须重启 Redis 服务

也就是说,改完 redis.windows.conf 之后,要先停掉 Redis,再重新执行启动命令。

Redis常见数据类型

Redis 最常见的 5 种数据类型分别是:

  • string:普通字符串
  • hash:键值对集合,适合存对象
  • list:有顺序、可重复的列表
  • set:无序、不可重复的集合
  • sorted set:带分数的有序集合

这几种结构不是为了背定义,而是为了根据场景选对命令。

比如:

  • 存一个验证码,适合用 string
  • 存一个用户对象的多个字段,适合用 hash
  • 存一个消息队列,适合用 list
  • 存一组不重复标签,适合用 set
  • 存积分榜,适合用 sorted set

string 常用命令

string 是 Redis 里最基础的数据类型,几乎每个初学者最先接触的都是这一组命令。

SET 和 GET

按照 Redis 官方文档,SET 用来写入字符串值,GET 用来读取字符串值。

redis 复制代码
SET name zhangsan
GET name

执行效果可以理解成:

  • SET name zhangsan:把 name 这个 key 的值设成 zhangsan
  • GET name:把 name 对应的值取出来

设置过期时间

如果这个值只想保留一段时间,可以直接在 SET 时带过期参数:

redis 复制代码
SET code 1234 EX 60

这表示:

  • key 是 code
  • value 是 1234
  • 60 秒后自动过期

这个场景很像验证码、临时 token 或一次性状态。

只在 key 不存在时设置

redis 复制代码
SET lock_key 1 NX EX 30

这条命令的意思是:

  • 只有 lock_key 不存在时,才允许设置成功
  • 成功后 30 秒过期

Redis 官方文档里也把这种写法作为常见的条件写入方式,后面学分布式锁时会经常碰到。

hash 常用命令

hash 很适合存对象,因为它能把一个对象拆成多个字段来保存。

HSET 和 HGET

redis 复制代码
HSET user:1 name zhangsan age 20 city beijing
HGET user:1 name
HGET user:1 age

这里可以把 user:1 理解成一个对象:

  • name 对应 zhangsan
  • age 对应 20
  • city 对应 beijing

相比 string,hash 的优势是一个 key 下面可以挂很多字段,读取和修改某个字段都很方便。

HKEYS、HVALS、HDEL

redis 复制代码
HKEYS user:1
HVALS user:1
HDEL user:1 age

这几个命令分别表示:

  • HKEYS:查看这个 hash 里有哪些字段
  • HVALS:查看这个 hash 里有哪些值
  • HDEL:删除某个字段

如果只是想存一个人的多个属性,hash 通常比把整段 JSON 塞进 string 更直观。

list 常用命令

list 可以理解成一个有顺序的队列,元素允许重复。

LPUSH 和 LRANGE

redis 复制代码
LPUSH mylist a
LPUSH mylist b
LPUSH mylist c
LRANGE mylist 0 -1

这里要注意:

  • LPUSH 是从左侧插入
  • LRANGE mylist 0 -1 表示查看整个列表

如果连续从左侧插入,最终顺序会和插入顺序有点反着来,这个刚开始很容易看晕,最好自己在命令行敲一遍。

RPOP 和 LLEN

redis 复制代码
RPOP mylist
LLEN mylist

作用分别是:

  • RPOP:弹出最右边的元素
  • LLEN:查看列表长度

list 很适合做简单消息队列或者任务缓冲区。

set 常用命令

set 的特点是 无序元素不重复

SADD、SMEMBERS、SCARD

redis 复制代码
SADD myset java
SADD myset redis
SADD myset mysql
SMEMBERS myset
SCARD myset

这几个命令分别表示:

  • SADD:往集合里加元素
  • SMEMBERS:查看集合全部元素
  • SCARD:查看集合元素个数

如果重复添加同一个元素,set 不会重复保存,这就是它和 list 最大的区别之一。

SINTER 和 SUNION

redis 复制代码
SADD set1 a b c
SADD set2 b c d
SINTER set1 set2
SUNION set1 set2

这里很适合记两个词:

  • SINTER:交集
  • SUNION:并集

如果以后要做共同标签、共同好友、共同兴趣这类需求,set 会非常顺手。

sorted set 常用命令

sorted set 可以理解成 每个元素都带一个分数的集合,Redis 会根据分数自动排序。

ZADD 和 ZRANGE

Redis 官方文档里给出的典型场景就是这种带分值排序的数据结构。

redis 复制代码
ZADD score 10 tom
ZADD score 20 jack
ZADD score 15 rose
ZRANGE score 0 -1
ZRANGE score 0 -1 WITHSCORES

这几条命令的含义是:

  • ZADD:添加成员并指定分数
  • ZRANGE score 0 -1:按分数顺序查看全部成员
  • WITHSCORES:把分数一起显示出来

这就是排行榜场景最常见的基础命令。

ZINCRBY 和 ZREM

redis 复制代码
ZINCRBY score 5 tom
ZREM score jack

作用分别是:

  • ZINCRBY:给某个成员增加分数
  • ZREM:删除某个成员

只要业务里出现"积分""热度""排名"这种词,通常都可以先想到 sorted set。

通用命令

除了按数据类型分的命令,Redis 还有一组几乎所有场景都会用到的通用命令。

KEYS

redis 复制代码
KEYS *
KEYS user:*

作用是按模式查找 key。

  • KEYS *:查看当前库里所有 key
  • KEYS user:*:查看以 user: 开头的 key

这个命令平时学习和排查非常方便,但线上环境不要滥用,因为 key 太多时会影响性能。

EXISTS

redis 复制代码
EXISTS name

用来检查某个 key 是否存在。

如果返回 1,说明存在;返回 0,说明不存在。

TYPE

redis 复制代码
TYPE mylist
TYPE user:1

这个命令很适合排查问题。

比如你明明以为某个 key 是 string,结果它其实是 list,这时候很多命令报错就很正常了。先用 TYPE 看清楚,再决定后面怎么操作。

DEL

redis 复制代码
DEL name
DEL mylist

DEL 用来删除 key。

如果你在练习命令时把数据写乱了,最直接的处理方式就是把测试 key 删除,再重新来一遍。

刚开始练 Redis,建议怎么记命令

Redis 命令看起来多,但刚开始不要想着一口气全背下来。更实用的办法是按数据类型记。

可以先记这一组最小闭环:

  • string:SETGET
  • hash:HSETHGET
  • list:LPUSHLRANGE
  • set:SADDSMEMBERS
  • sorted set:ZADDZRANGE
  • 通用命令:KEYSEXISTSTYPEDEL

先把这一组敲熟,后面再慢慢补:

  • 过期时间
  • 条件写入
  • 交集并集
  • 分数递增

这样学下来会比直接背命令表顺很多。

常见问题

1. Redis 启动了,为什么连不上

优先检查:

  1. 当前 Redis 进程是不是还活着
  2. 端口是不是 6379
  3. 有没有设置密码
  4. 配置文件改完后是不是没重启

2. 为什么同一个 key 换个命令就报错

通常是因为 数据类型不匹配

比如一个 key 实际上是 list,你却拿 GET 去读,就会报错。这时候先用 TYPE 看类型。

3. 为什么 KEYS * 能看到数据,但读不出来

这时候要先确认两件事:

  • key 名字有没有写错
  • 读取命令和数据类型是不是匹配

很多初学阶段的问题,本质上都不是 Redis 坏了,而是命令和结构没对上。

总结

Redis 入门最重要的不是一下子会多少高级特性,而是先把 安装、启动、连接和常用命令 这一套动作练熟。

只要 string、hash、list、set、sorted set 这几组命令能自己敲通,后面再学缓存、排行榜、消息队列和分布式锁,就会轻松很多。