Redis 基础知识点
一、Redis 介绍
1. Redis 基本概念
Redis 是 C 语言开发的开源高性能键值对(key-value)数据库。 官方测试数据:50 个并发执行 100000 个请求,读速度可达 110000 次/秒,写速度可达 81000 次/秒。
Redis 通过提供多种键值数据类型,适配不同场景的存储需求。其中 key 统一为字符串类型,value 支持 5 种常用数据类型:
| 数据类型 | 说明 | 类比 Java 结构 |
|---|---|---|
| 字符串(string) | 最基础的数据类型,普通字符串 | String |
| 哈希(hash) | 字段与值的映射表,适合存储对象 | Map |
| 列表(list) | 按插入顺序排序,允许重复元素 | LinkedList |
| 集合(set) | 无序集合,元素不重复 | Set |
| 有序集合(sorted set / zset) | 元素关联分数,按分数升序排列,元素不重复 | 带排序的 Set |
Redis 核心特性
- 基于内存存储,读写性能极高
- 适合存储热点数据(热点商品、资讯、新闻等)
- 企业级应用广泛,是关系型数据库的补充,而非替代 MySQL
缓存核心思想
优先从 Redis 读取数据,降低数据库压力:
- 先查询 Redis:
- Redis 中存在数据:直接返回
- Redis 中不存在数据:
- 从 MySQL 数据库中查询数据
- 将查询结果写入 Redis 缓存
- 返回数据
本地
Map也可以实现缓存,但仅能在当前项目/单机使用;分布式部署场景下,必须使用 Redis 这类集中式缓存。
2. NoSQL 简介
NoSQL(Not Only SQL,意为“不仅仅是 SQL”)泛指非关系型数据库,是为解决大规模数据、高并发场景下传统关系型数据库的瓶颈而诞生的数据库理念。
随着 Web2.0 时代到来,纯动态、用户生成内容的网站(如短视频、社交平台)数据量爆发式增长,传统关系型数据库在超大规模、高并发场景下性能不足,非关系型数据库因此快速发展。
- Web1.0:用户仅被动访问内容
- Web2.0:以用户为中心,用户可发布内容,数据量极大,对并发和扩展性要求更高
二、Redis 基础使用
1. Redis 软件组成
redis.windows.conf:Redis 配置文件redis-server.exe:Redis 服务端程序redis-cli.exe:Redis 客户端命令行工具
2. 字符串类型(string)
最基础的数据类型,value 为普通字符串。
常用命令:
# 设置指定 key 的值
SET key value
# 获取指定 key 的值
GET key
# 设置 key 的值,并指定过期时间(秒)
SETEX key seconds value
# 仅当 key 不存在时,才设置 key 的值
SETNX key value
3. 哈希类型(hash)
Redis hash 是 string 类型的 field 与 value 的映射表,特别适合存储对象,类似 Java 的 Map 结构。
常用命令:
# 向哈希表 key 中设置字段 field 的值
HSET key field value
# 获取哈希表 key 中指定字段的值
HGET key field
# 删除哈希表 key 中的指定字段
HDEL key field
# 获取哈希表 key 中所有字段
HKEYS key
# 获取哈希表 key 中所有值
HVALS key
4. 列表类型(list)
按插入顺序排序,允许重复元素,类似 Java 的 LinkedList,支持从两端操作,可模拟队列。
常用命令:
# 将一个或多个值插入列表头部(左侧)
LPUSH key value1 [value2]
# 获取列表指定范围内的元素
# 0 表示第一个元素,-1 表示最后一个元素
LRANGE key start stop
# 移除并返回列表尾部(右侧)的元素
RPOP key
# 获取列表长度
LLEN key
下标规则:
0为第一个元素,-1为最后一个元素,-2为倒数第二个元素,以此类推。
5. 集合类型(set)
无序集合,元素不允许重复,类似 Java 的 Set,支持交集、并集等集合运算。
常用命令:
# 向集合中添加一个或多个成员
SADD key member1 [member2]
# 返回集合中的所有成员
SMEMBERS key
# 获取集合的成员数量
SCARD key
# 返回多个集合的交集
SINTER key1 [key2]
# 返回多个集合的并集
SUNION key1 [key2]
# 删除集合中一个或多个成员
SREM key member1 [member2]
6. 有序集合类型(zset / sorted set)
本质是 set,元素不重复;每个元素关联一个 double 类型的分数(score),Redis 按分数从小到大排序。
常用命令:
# 向有序集合添加一个或多个成员及对应分数
ZADD key score1 member1 [score2 member2]
# 通过索引区间返回指定范围内的成员,可选是否携带分数
ZRANGE key start stop [WITHSCORES]
# 对指定成员的分数增加增量
ZINCRBY key increment member
# 移除有序集合中一个或多个成员
ZREM key member [member ...]
7. 通用命令
# 查询所有键
keys *
# 获取指定 key 对应 value 的类型
type key
# 删除指定的 key-value
del key