目录

一、Redis简介

1.基本定义

2.NoSQL数据库分类

3.Redis核心特性

4.官方地址

二、服务启动与客户端连接

1.服务端启动命令

2.命令行客户端连接

3.可视化客户端工具

三、Redis 五大基础数据类型(详解)

1.字符串类型(String)

2.哈希类型(Hash)

3.列表类型(List)

4.集合类型(Set)

5.有序集合(Sorted Set / ZSet)

四、Redis 扩展数据类型(补充)

五、一句话总结(记忆版)


一、Redis简介

1.基本定义

        Redis 全称 Remote Dictionary Server(远程字典服务),是一款开源、基于内存、高性能的键值(Key-Value)型非关系型数据库,由C语言编写、支持跨平台,同时提供多种语言客户端。

2.NoSQL数据库分类

        NoSQL全称 Not Only SQL,意为不仅仅是SQL,泛指非关系型数据库,用来弥补传统关系型数据库(MySQL、Orale等)在高并发、海量数据、高可用场景下的不足,主流分为四大类:

1.键值(K-V)数据库

数据以Key-Value形式存储,读写速度极快,典型代表:Redis、Memcached。

2.列族数据库

按列簇组织数据,适合海量分布式数据存储、大数据场景,典型代表:HBase、Cassandra。

3.图形数据库

以节点、边、属性存储数据,专注于关系图谱计算,典型代表:Neo4j。

4.文档数据库 

数据以JSON / BSON 文档形式存储,结构灵活,典型代表:

MongoDB、Elasticsearch(额外支持倒排索引,多用于搜索引擎、日志检索)。

3.Redis核心特性

1.性能极高

数据主要存储在内存中,单机每秒可处理十万级读写请求;仅持久化阶段会操作磁盘,读写延迟极低

2.单线程模型

Redis处理网络请求和执行命令的主线程为单线程。优势:规避多线程线程竞争、上下文切换、锁竞争带来的开销,同时保证命令执行天然原子性

补充:Redis 6.0+ 引入多线程,仅用于处理网络 IO,命令执行依旧单线程。

3.IO 多路复用

采用 epoll、select、kqueue 等 IO 多路复用技术,单线程可同时监听上万客户端连接,实现高并发网络处理,是支撑高并发的核心。

4.数据类型丰富

除 5 种基础数据类型外,还扩展出 Bitmap、HyperLogLog、GEO、Stream、Bitfield 等特殊类型,适配各类业务场景。

5.可模拟消息中间件

基于 List、Stream 类型可实现消息队列、阻塞队列,满足简单的异步通信、任务调度需求。

6.支持分布式锁

利用命令原子性、过期时间等特性,可实现分布式锁,解决分布式系统中资源竞争问题。

7.数据持久化

支持将内存数据落地到磁盘,避免服务宕机后数据丢失,提供 RDB、AOF 两种持久化方案。

8.主从复制

支持一主多从架构,主节点负责写操作,从节点同步主节点数据,实现读写分离,提升查询性能。

9.集群架构

原生支持 Redis Cluster 集群,实现数据分片、故障自动转移,完成水平扩容与高可用。

4.官方地址

  • 官网:https://redis.io/
  • 官方文档(最新版):https://redis.io/docs/latest/

二、服务启动与客户端连接

1.服务端启动命令

Redis 默认端口 6379,启动时可指定配置文件,生产环境必须依赖配置文件运行:

# 切换到 Redis 安装目录,指定配置文件启动服务
./redis-server ./redis.conf

2.命令行客户端连接

# 连接本地 Redis,指定端口(默认6379可省略 -p 参数)
./redis-cli -p 6379

# 连接远程 Redis(指定IP+端口)
./redis-cli -h 192.168.1.100 -p 6379

3.可视化客户端工具

图形化工具便于直观查看、管理数据,常用工具:

  • Redis Desktop Manager:轻量化客户端,操作简单,适合日常开发调试。
  • DataGrip:JetBrains 旗下数据库管理工具,支持 Redis、MySQL、MongoDB 等多种数据源,适合全栈开发人员。
  • Another Redis Desktop Manager:开源免费,功能全面,跨平台。

三、Redis 五大基础数据类型(详解)

Redis 所有数据类型的外层统一为 Key,Key 为字符串格式,全局唯一;不同类型的差异体现在 Value 的数据结构

1.字符串类型(String)

String 是 Redis 最基础、使用最广泛的数据类型。

  • 底层结构:动态字符串 SDS;
  • 存储限制:单个 Value 最大可存储512MB;
  • 存储内容:普通文本、数字、JSON 字符串、二进制数据等都可存放。

核心常用命令:

# 1. 设置键值对,key存在则覆盖
set key value
# 2. 根据key获取值,key不存在返回nil
get key
# 3. 删除指定key,返回删除的数量
del key
# 4. 设置key并指定过期时间(单位:秒),到期自动删除
setex key 过期秒数 value
# 或者
expire key 过期秒数
# 5. 仅当key不存在时才设置(原子操作,分布式锁常用)
setnx key value
# 6. 数值自增1(原子操作,仅value为整数时生效)
incr key
# 7. 数值自减1
decr key
# 8. 自增指定步长
incrby key 步长

典型应用场景:

  1. 热点数据缓存:缓存商品信息、首页数据、用户基本信息,减轻数据库压力;
  2. 计数器:文章阅读量、视频播放量、点赞数、粉丝数;
  3. 分布式 Session:统一存储多服务节点的用户会话;
  4. 简单分布式锁:基于 setnx 命令实现;
  5. 限流控制:统计单位时间内接口访问次数。

2.哈希类型(Hash)

结构说明

Hash 是字段 - 值映射结构,整体结构:Key --> Field:Value。

  • 类比:编程语言中的 Map、数据库中的行数据;
  • 特点:一个 Key 下可以存储多个 Field-Value 键值对,适合存储结构化对象;
  • 对比:如果用 String 存储对象,需要序列化 / 反序列化,Hash 可直接修改对象单个字段,效率更高。

核心常用命令

# 1. 给hash设置单个字段及值
hset key field value
# 2. 批量设置多个字段
hmset key field1 value1 field2 value2
# 3. 获取单个字段的值
hget key field
# 4. 批量获取多个字段
hmget key field1 field2
# 5. 获取当前hash中所有字段和对应值
hgetall key
# 6. 仅获取所有字段名
hkeys key
# 7. 仅获取所有字段的值
hvals key
# 8. 删除hash中的指定字段
hdel key field
# 9. 判断字段是否存在
hexists key field

典型应用场景

  1. 对象信息缓存:用户信息、员工信息、商品基础信息(无需序列化,可单独修改某一字段);
  2. 购物车实现:Key = 用户 ID,Field = 商品 ID,Value = 商品数量;
  3. 系统配置项:一组关联的配置参数统一存储。

补充:大 Key 问题
        当一个 Hash 中 Field 数量极多(上万级别),会形成大 Key,导致查询卡顿、网络传输耗时增加。优化思路:拆分大 Hash 为多个小 Hash。

3.列表类型(List)

结构说明

List 底层是双向链表,特性:

  1. 有序:元素按插入顺序排序;
  2. 可重复:允许存储相同元素;
  3. 两端操作高效:头部、尾部增删数据速度极快,中间元素操作性能较差;
  4. 天然支持阻塞:可实现阻塞队列。

核心常用命令

# 左侧插入元素(表头),可批量插入
lpush key value1 value2
# 右侧插入元素(表尾),可批量插入
rpush key value1 value2

# 左侧弹出元素(表头取出)
lpop key
# 右侧弹出元素(表尾取出)
rpop key

# 阻塞式左侧弹出:无元素时阻塞等待指定秒数,0表示永久阻塞
blpop key 阻塞秒数
# 阻塞式右侧弹出
brpop key 阻塞秒数

# 查看指定范围元素,0为第一个元素,-1代表最后一个元素
lrange key 0 -1
# 获取列表长度
llen key
# 根据索引修改元素
lset key 索引 value

典型应用场景

  1. 简单消息队列 / 任务队列:rpush 生产消息,lpop 消费消息;
  2. 阻塞队列:基于 blpop/brpop 实现,消费端无数据时阻塞等待,替代简易 MQ;
  3. 时间线 / 信息流:朋友圈动态、用户发帖记录(按插入顺序展示);
  4. 栈结构:利用 lpush + lpop 实现栈(先进后出)。

4.集合类型(Set)

结构说明

Set 是无序、不可重复的元素集合:

  1. 无序:元素存储顺序和插入顺序无关;
  2. 去重:自动剔除重复元素,同一集合内元素唯一;
  3. 支持集合运算:交集、并集、差集,是核心特色。

核心常用命令

# 1. 向集合添加元素,自动去重
sadd key value1 value2
# 2. 查看集合中所有元素
smembers key
# 3. 获取集合元素总数
scard key

# 4. 判断某个元素是否在集合中,存在返回1,不存在返回0
sismember key value
# 5. 随机弹出一个元素
spop key
# 6. 删除指定元素
srem key value

# 集合运算(多集合操作)
# 交集:两个集合共同的元素
sinter key1 key2
# 并集:合并两个集合所有元素(自动去重)
sunion key1 key2
# 差集:key1中有、key2中没有的元素
sdiff key1 key2

典型应用场景

  1. 数据去重:访问用户去重、黑名单 / 白名单管理;
  2. 社交关系:共同好友、共同关注、粉丝交集;
  3. 随机抽奖:sadd 存入抽奖用户,spop 随机抽取中奖人员;
  4. 标签筛选:根据标签交集 / 并集筛选用户、商品。

5.有序集合(Sorted Set / ZSet)

结构说明

ZSet 简称 ZSet,是 Set 的升级版,有序 + 不可重复,是 Redis 特色类型:

  • 组成:每个元素包含 成员(member) + 分数(score);
  • 排序规则:默认按照 score 分数从小到大 排序;
  • 唯一性:member 不可重复,score 可以重复。

核心常用命令

# 1. 添加元素:score(分数) member(成员),可批量添加
zadd key score1 member1 score2 member2

# 2. 正序查询(按score从小到大),0 -1 查询全部
zrange key 0 -1
# 3. 倒序查询(按score从大到小)
zrevrange key 0 -1

# 4. 查询元素对应的分数
zscore key member
# 5. 获取元素排名(正序排名,从0开始)
zrank key member
# 6. 获取倒序排名
zrevrank key member

# 7. 根据分数范围查询元素
zrangebyscore key 最小分数 最大分数
# 8. 删除指定成员
zrem key member
# 9. 获取集合元素总数
zcard key

典型应用场景

  1. 各类排行榜:文章阅读榜、商品销量榜、直播间热度榜、学生成绩排名;
  2. 延时队列:用分数存储时间戳,按时间顺序取出任务;
  3. 带权重的任务分配:根据权重(score)排序执行任务。

四、Redis 扩展数据类型(补充)

除五大基础类型外,Redis 提供多种特殊类型,适配细分业务场景:
Bitmap(位图)

  • 本质:基于 String 实现的位操作,用二进制位(0/1) 存储状态;
  • 特点:极度节省内存,1 个字符串可存储上千万个状态位;
  • 场景:用户每日签到、在线状态判断、活跃用户统计。

HyperLogLog

  • 作用:海量数据基数统计(统计不重复元素数量);
  • 特点:占用内存极小,存在低误差(约 0.81%),不存储原始数据;
  • 场景:网站每日 UV(独立访客)、页面独立访问数统计。

GEO(地理坐标)

  • 作用:存储经纬度坐标,计算两地距离、查询附近元素;
  • 场景:附近的人、门店位置检索、打车距离计算。

Stream

  • 定位:Redis 5.0 推出的专业消息队列;
  • 特点:支持消息持久化、消费者组、消息回溯、阻塞消费,功能远强于 List 实现的简易队列;
  • 场景:高可靠异步消息、日志收集、事件推送。

五、一句话总结(记忆版)

  • Redis = 内存 KV 数据库 + 高性能 + 单线程 + 多路复用
  • 5 种基础类型:String、Hash、List、Set、ZSet
  • 核心能力:缓存、消息队列、分布式锁、持久化、集群
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐