为什么要用 redis:(高性能、多功能、高可靠性)
怎么用:
核心操作:
set key value(存)、get key(取)、incr key(自增),适合存储简单值(如用户 token、计数器)。hset key field value(存字段)、hget key field(取字段),适合存储对象(如用户信息: user:1 {name: "xxx",age:20})。lpush key elem(左插)、rpop key(右取),适合实现队列 / 栈(如消息队列、最新消息列表)。sadd key elem(添加元素)、sinter key1 key2(交集),适合去重或关系计算(如共同好友)。redis:键值型数据库,非关系型数据库

value 的数据类型:

命令行文档:help @组名 就会列出当前组下的命令
当 key 值冲突时,如 user 和 product 都有一个 id 字段,但是在 redis 的一张表中并不能存在两个 id 的键


是 value 的类型


v 里套 k-v。


双向链表


集合




随着数据量增大,存储的压力增大,数据从单表演变为分库分表,MySQL 从单机演变为集群

且数据分冷热,热数据是经常被访问到的数据。那么将热数据存储到内存中能大大提高性能和效率
下图是 redis 的读写操作流程

既然 redis 将数据存在在内存中,那么系统断电时,数据如何确保不丢失呢?
在 redis 操作数据的同时,会将操作命令追加到AOF文件中,而 AOF 文件存储在磁盘并不会丢失
RDB 文件记录了全部的数据信息(全量数据),启动时 redis 先去读取 RDB 文件加载数据,然后对比 AOF 文件有无数据没有被操作,有就从 AOF 文件中加载对应的操作
这样就保证了 redis 的启动与之前的状态一致。

Redis 是单线程处理的系统

缓存(最核心场景):
会话存储:
为什么适合会话存储的场景:
- 会话(Session)是用户登录后服务器生成的临时凭证,几乎所有用户操作(如页面跳转、接口请求)都需要验证会话有效性,属于高频访问数据
- 会话有明确的 “时效性”(如用户 30 分钟无操作自动失效),需要自动清理过期会话以释放资源。Redis 内置了键过期机制(
expire key seconds命令),支持为会话设置精确的过期时间、- 分布式支持解决会话共享问题
lpush(生产者发消息)和rpop(消费者取消息)实现简单队列,适合低延迟、非高可靠要求的场景(高可靠需用专业 MQ 如 RabbitMQ)。IO 多路复用模型(如 epoll/kqueue),单线程可同时处理多个客户端的网络 IO 请求(非阻塞 IO);maxmemory限制):触发内存淘汰策略,按配置删除部分键,常见策略:
volatile-lru:从过期键中删除最近最少使用的;allkeys-lru:从所有键中删除最近最少使用的;volatile-ttl:删除过期键中剩余时间最短的;noeviction(默认),则不删除键,拒绝所有写操作。