无论是面试还是实际项目开发,Redis都是高频出现的核心技术之一。本文就从基础概念出发,带大家全面认识Redis,搞懂它是什么、为什么好用、能用来做什么以及核心的基础用法,适合刚接触Redis的新手入门,也适合老鸟回顾巩固基础。

一、Redis是什么?

Redis 全称 Remote Dictionary Server(远程字典服务),是由意大利开发者 Salvatore Sanfilippo 开发的一款开源的、高性能的键值对(Key-Value)数据库。它不同于传统的关系型数据库(如MySQL),属于NoSQL(非关系型数据库)的一种,主要用于存储高频访问、需要快速响应的数据。

核心亮点:Redis将数据主要存储在内存中,同时支持数据持久化到磁盘(防止内存数据丢失),这使得它的读写速度远超传统磁盘数据库——官方测试数据显示,Redis的读速度可达110000次/秒,写速度可达81000次/秒,性能优势极为明显。

二、Redis的核心特点

Redis之所以被广泛应用,核心在于它的五大核心特点,这也是它区别于其他Key-Value数据库的关键:

1. 高性能:基于内存的读写

正如前面所说,Redis的数据默认存储在内存中,内存IO的速度远高于磁盘IO(内存读写速度通常是磁盘的100倍以上)。同时,Redis采用了单线程模型(避免了多线程上下文切换的开销),并通过IO多路复用技术处理并发请求,进一步提升了并发处理能力。

2. 持久化:数据可持久化到磁盘

虽然数据存在内存中,但Redis支持将内存数据异步持久化到磁盘(两种方式:RDB和AOF),即使服务器重启,数据也能从磁盘恢复,避免了内存数据丢失的问题。后续会单独写文章详解RDB和AOF的区别与选型。

3. 丰富的数据结构

这是Redis最强大的优势之一。不同于传统Key-Value数据库只支持“字符串-字符串”的简单映射,Redis支持多种复杂的数据结构,满足不同场景的需求:

  • String(字符串):最基础的类型,可存储文本、数字等
  • Hash(哈希):适合存储对象(如用户信息、商品详情)
  • List(列表):有序可重复,适合实现队列、栈、消息列表等
  • Set(集合):无序不可重复,支持交集、并集、差集等集合运算
  • Sorted Set(有序集合):有序不可重复,通过分数排序,适合实现排行榜、优先级队列等
  • 此外还有 Bitmap、HyperLogLog、Geo(地理位置)等特殊数据结构

4. 高可用与分布式支持

Redis支持主从复制(Master-Slave),通过主节点同步数据到从节点,实现读写分离(主写从读),提升读负载能力;同时支持哨兵模式(Sentinel)和集群模式(Redis Cluster),实现故障自动切换和水平扩容,保证服务的高可用性和稳定性。

5. 丰富的功能扩展

除了基础的增删改查,Redis还提供了很多实用功能:

  • 过期键自动删除(支持多种过期策略)
  • 发布/订阅(Pub/Sub):实现简单的消息通知
  • 事务(Multi/Exec):保证一系列命令的原子性执行
  • Lua脚本:支持自定义脚本,实现复杂的业务逻辑

三、Redis的核心应用场景

基于以上特点,Redis在实际开发中有着广泛的应用,核心场景包括:

1. 缓存(最核心场景)

将高频访问的数据(如用户信息、商品详情、热点新闻)缓存到Redis中,用户请求时直接从Redis获取,避免频繁查询数据库,减轻数据库压力,提升系统响应速度。比如电商平台的商品详情页,百万级访问量下,直接查数据库会导致服务瘫痪,而Redis缓存能轻松支撑。

2. 分布式锁

在分布式系统中,为了避免并发问题(如秒杀、库存扣减),需要一个全局的锁机制。Redis通过SETNX(SET if Not Exists)命令实现分布式锁,保证同一时间只有一个线程操作资源。

3. 计数器与排行榜

利用Redis的String类型实现计数器(如文章阅读量、商品销量),支持原子性的自增自减操作;利用Sorted Set的排序特性,实现各种排行榜(如用户积分排行榜、商品销量排行榜)。

4. 消息队列

基于Redis的List类型(LPUSH/RPOP或RPUSH/LPOP)实现简单的消息队列,支持生产者-消费者模式;也可以通过Pub/Sub实现发布订阅式的消息通知(如系统通知、实时消息推送)。

5. 会话存储

在分布式系统中,用户的会话信息(如登录状态)需要共享,将会话信息存储到Redis中,实现多服务节点间的会话共享,避免用户重复登录。

四、Redis核心数据结构及基础操作

前面提到Redis支持多种数据结构,这里重点讲解最常用的5种,并给出核心操作命令(Redis命令不区分大小写,推荐大写)。

1. String(字符串)

最基础的类型,value可以是字符串、数字(整数/浮点数),最大存储容量为512MB。适合存储单个值、计数器等。

核心命令:

  • SET key value:设置键值对(如 SET name “zhangsan”)
  • GET key:获取值(如 GET name)
  • INCR key:值自增1(仅支持数字类型,如 INCR view_count)
  • DECR key:值自减1
  • EXPIRE key seconds:设置键的过期时间(如 EXPIRE name 60,60秒后过期)
  • SETNX key value:不存在则设置(用于分布式锁的核心命令)

2. Hash(哈希)

适合存储对象,value是键值对的集合(类似Java中的Map),可以单独操作对象的某个字段,节省存储空间。

核心命令:

  • HSET key field value:设置对象的字段值(如 HSET user id 1 name “zhangsan”)
  • HGET key field:获取对象的字段值(如 HGET user name)
  • HGETALL key:获取对象的所有字段和值
  • HDEL key field:删除对象的某个字段
  • HLEN key:获取对象的字段数量

3. List(列表)

有序可重复的元素集合,底层是双向链表,适合实现队列(先进先出)、栈(先进后出)、消息列表等。

核心命令:

  • LPUSH key value1 value2…:从列表左侧插入元素(如 LPUSH message “msg1” “msg2”)
  • RPUSH key value1 value2…:从列表右侧插入元素
  • LPOP key:从列表左侧弹出元素(获取并删除)
  • RPOP key:从列表右侧弹出元素
  • LRANGE key start end:获取列表指定范围的元素(如 LRANGE message 0 -1,获取所有元素)

4. Set(集合)

无序不可重复的元素集合,支持交集、并集、差集等集合运算,适合实现去重、共同好友、标签等功能。

核心命令:

  • SADD key member1 member2…:向集合中添加元素(如 SADD tags “java” “redis”)
  • SMEMBERS key:获取集合中的所有元素
  • SISMEMBER key member:判断元素是否在集合中(返回1存在,0不存在)
  • SINTER key1 key2:求两个集合的交集(如共同好友)
  • SUNION key1 key2:求两个集合的并集
  • SREM key member:删除集合中的元素

5. Sorted Set(有序集合)

在Set的基础上增加了“分数(score)”属性,元素按分数排序,且不可重复。适合实现排行榜、优先级队列等。

核心命令:

  • ZADD key score1 member1 score2 member2…:添加元素及对应的分数(如 ZADD rank 95 “zhangsan” 88 “lisi”)
  • ZRANGE key start end [WITHSCORES]:按分数升序获取元素(WITHSCORES显示分数)
  • ZREVRANGE key start end [WITHSCORES]:按分数降序获取元素(排行榜常用)
  • ZSCORE key member:获取元素的分数
  • ZINCRBY key increment member:增加元素的分数(如 ZINCRBY rank 2 “zhangsan”)

五、Redis的安装与基础使用(Linux环境)

这里给出Redis的简易安装步骤,适合新手快速上手:

1. 下载并解压Redis


# 下载Redis(推荐稳定版,如7.2.4)
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
# 解压
tar -zxvf redis-7.2.4.tar.gz
# 进入解压目录
cd redis-7.2.4

2. 编译与安装


# 编译(依赖gcc,若未安装则执行 yum install gcc -y)
make
# 安装(指定安装目录,如 /usr/local/redis)
make PREFIX=/usr/local/redis install

3. 启动Redis


# 复制配置文件到安装目录
cp redis.conf /usr/local/redis/bin/
# 进入安装目录的bin文件夹
cd /usr/local/redis/bin/
# 启动Redis(默认前台启动,加 & 后台启动)
./redis-server redis.conf &
# 连接Redis客户端
./redis-cli
# 测试是否连接成功(输入ping,返回PONG则成功)
127.0.0.1:6379> ping
PONG

六、总结与后续学习方向

本文从Redis的定义、核心特点、应用场景、核心数据结构及基础安装使用等方面,为大家梳理了Redis的基础知识点。作为后端开发的核心技术,Redis的学习需要“理论+实践”结合:

  • 基础阶段:熟练掌握5种核心数据结构的使用场景和命令
  • 进阶阶段:深入理解Redis的持久化机制(RDB/AOF)、过期策略、内存淘汰策略
  • 高级阶段:学习Redis主从复制、哨兵模式、集群模式,掌握分布式部署与高可用设计

后续我会继续更新Redis的进阶内容,比如持久化机制详解、分布式锁的实现与避坑、集群搭建实战等。如果本文对你有帮助,欢迎点赞、收藏、关注,有问题也可以在评论区留言讨论~

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐