前言
刚开始学 Redis,最容易乱的地方通常不是概念,而是 装好之后怎么启动、怎么连接、常用命令到底该怎么记。如果这些基础动作没有走顺,后面再学缓存、分布式锁、排行榜,都会感觉很飘。
这篇就只做一件事:把 Redis 安装、启动、连接和常用命令 讲清楚
Redis是什么
Redis 是一个基于内存的 key-value 数据库,读写速度很快,常用在下面这些场景里:
- 缓存热点数据
- 保存临时状态
- 做排行榜
- 做计数器
- 做消息队列或延迟处理
它和关系型数据库不一样,Redis 更强调 快 和 灵活的数据结构。除了最常见的字符串,还支持 hash、list、set、sorted set 这些结构。
Windows安装 Redis
安装后的核心文件一般会看到这几个:
redis-server.exeredis-cli.exeredis.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 服务已经启动,不代表客户端一定能连上。如果连接失败,优先查这几个问题:
- Redis 服务有没有真的启动
- 端口是不是 6379
- 密码有没有写对
- 配置文件改完之后有没有重启 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 的值设成zhangsanGET 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对应zhangsanage对应20city对应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 *:查看当前库里所有 keyKEYS 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:
SET、GET - hash:
HSET、HGET - list:
LPUSH、LRANGE - set:
SADD、SMEMBERS - sorted set:
ZADD、ZRANGE - 通用命令:
KEYS、EXISTS、TYPE、DEL
先把这一组敲熟,后面再慢慢补:
- 过期时间
- 条件写入
- 交集并集
- 分数递增
这样学下来会比直接背命令表顺很多。
常见问题
1. Redis 启动了,为什么连不上
优先检查:
- 当前 Redis 进程是不是还活着
- 端口是不是 6379
- 有没有设置密码
- 配置文件改完后是不是没重启
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.exeredis-cli.exeredis.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 服务已经启动,不代表客户端一定能连上。如果连接失败,优先查这几个问题:
- Redis 服务有没有真的启动
- 端口是不是 6379
- 密码有没有写对
- 配置文件改完之后有没有重启 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 的值设成zhangsanGET 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对应zhangsanage对应20city对应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 *:查看当前库里所有 keyKEYS 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:
SET、GET - hash:
HSET、HGET - list:
LPUSH、LRANGE - set:
SADD、SMEMBERS - sorted set:
ZADD、ZRANGE - 通用命令:
KEYS、EXISTS、TYPE、DEL
先把这一组敲熟,后面再慢慢补:
- 过期时间
- 条件写入
- 交集并集
- 分数递增
这样学下来会比直接背命令表顺很多。
常见问题
1. Redis 启动了,为什么连不上
优先检查:
- 当前 Redis 进程是不是还活着
- 端口是不是 6379
- 有没有设置密码
- 配置文件改完后是不是没重启
2. 为什么同一个 key 换个命令就报错
通常是因为 数据类型不匹配。
比如一个 key 实际上是 list,你却拿 GET 去读,就会报错。这时候先用 TYPE 看类型。
3. 为什么 KEYS * 能看到数据,但读不出来
这时候要先确认两件事:
- key 名字有没有写错
- 读取命令和数据类型是不是匹配
很多初学阶段的问题,本质上都不是 Redis 坏了,而是命令和结构没对上。
总结
Redis 入门最重要的不是一下子会多少高级特性,而是先把 安装、启动、连接和常用命令 这一套动作练熟。
只要 string、hash、list、set、sorted set 这几组命令能自己敲通,后面再学缓存、排行榜、消息队列和分布式锁,就会轻松很多。