Redis基础
一、概述
Redis是开源高性能,基于内存允许的键值对NoSQL数据库
- 支持数据的持久化,可以将数据保存在磁盘中,重启之后加载到内存中
- 支持多种数据类型
- 支持master-slave模式的数据备份
二、应用场景
1. 缓存
- 用途:用于缓存热点数据,减轻数据库压力,提高系统性能。
- 场景:通过缓存查询结果、页面数据、API 响应等,将频繁访问的数据存储在 Redis 中。这样,当相同的数据请求出现时,可以直接从缓存中读取,而不必每次都访问数据库。
- 示例:用户登录信息、商品详情、热点新闻。
2. 分布式锁
- 用途:在分布式系统中,多个进程可能会同时操作共享资源,Redis 提供了简单有效的分布式锁机制,确保同一时刻只有一个进程能获取锁。
- 场景:需要控制多个实例并发访问共享资源时,如支付系统中的库存扣减、订单处理等操作。
- 示例:商品秒杀、库存扣减的场景。
3. 消息队列
- 用途:Redis 的
List
数据结构可以用来实现轻量级的消息队列,支持生产者消费者模型。 - 场景:任务异步处理、流量削峰、解耦服务模块。
- 示例:订单系统中,用户下单后,系统可以将订单写入 Redis 队列中,后台异步处理订单。
4. 会话存储
- 用途:将用户会话数据(如登录状态、购物车信息)存储在 Redis 中,适用于分布式应用中的会话管理。
- 场景:在负载均衡的情况下,用户请求可能被分发到不同的服务器,将会话数据存储在 Redis 中可以确保所有服务器访问到相同的会话信息。
- 示例:用户登录状态、购物车信息等。
5. 实时计数器和统计
- 用途:利用 Redis 的原子自增操作,可以快速实现实时的计数和统计。
- 场景:统计网站的访问量、点赞数、观看数等场景,Redis 的
INCR
操作可以帮助快速实现自增。 - 示例:文章浏览量、视频播放次数、用户点赞次数。
6. 排行榜
- 用途:Redis 的
Sorted Set
数据结构可以用来实现排行榜功能,支持按照分数对元素进行排序。 - 场景:需要根据某个数值(如分数、点赞数、成交额)进行排名的场景。
- 示例:游戏排行榜、竞赛积分排行榜、销售排行榜。
7. 社交网络中的好友关系
- 用途:利用 Redis 的
Set
或 Sorted Set
数据结构,可以高效管理社交关系网络,如好友列表、共同好友、关注列表等。 - 场景:社交媒体、论坛、社交游戏等。
- 示例:微博的关注和粉丝关系,Facebook 朋友推荐。
8. 发布/订阅系统
- 用途:利用 Redis 的
Pub/Sub
功能,可以实现消息的发布与订阅模式,用于构建简单的消息通知系统。 - 场景:用于消息广播、实时推送、通知等场景。
- 示例:聊天室消息、实时推送系统、在线游戏的消息推送。
9. 地理位置数据存储
- 用途:Redis 的
GEO
命令支持存储地理位置的数据,提供了存储坐标点、计算距离、查询某范围内的点等功能。 - 场景:需要处理地理位置和地理数据的系统,如外卖配送、打车服务等。
- 示例:查询附近的餐馆、查找附近的车辆。
10. 限流
- 用途:通过 Redis 实现对 API 的访问频率进行控制,防止滥用或攻击。
- 场景:限流控制可以用来限制某个用户或 IP 在一段时间内访问某个接口的次数,防止流量过大导致服务崩溃。
- 示例:API 调用次数限制、秒杀活动中用户请求限制。
11. 分布式任务调度
- 用途:利用 Redis 的
List
或 Sorted Set
可以实现任务调度和任务延时处理。 - 场景:在某些场景下,需要将任务按一定时间顺序执行,或者延迟执行某些任务。
- 示例:订单的超时处理、任务队列的优先级调度。
三、基础知识
- 单线程机制工作
- 默认有16个数据库,编号从0开始
- 端口为6379
字符串类型常用命令
格式 | 作用 |
---|
SET key value | 设置指定key的值 |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒 |
SETNX key value | 只有在key不存在时设置key的值 |
哈希操作命令
格式 | 作用 |
---|
HSET key field value | 将哈希表key中的字段field的值设为value |
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中指定字段的值 |
HKEYS key | 获取哈希表中所有字段 |
HVALS key | 获取哈希表中所有值 |
列表操作命令
格式 | 作用 |
---|
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
LRANGE key start stop | 获取指定范围内的元素 |
RPOP key | 移除并获取列表最后一个元素 |
LLEN key | 获取列表长度 |
集合操作命令
格式 | 作用 |
---|
SADD key member [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中所有成员 |
SCARD key | 获取集合的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回给定所有几个的并集 |
SREN key member1 [member2] | 删除集合中一个或多个成员 |
有序集合操作命令
格式 | 作用 |
---|
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区域的成员 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
ZREM key member [member …] | 移除有序集合中的一个或多个成员 |
通用命令
格式 | 作用 |
---|
KEYS pattern | 查找所有符合给定模式(pattern)的key |
EXISTS key | 检查给定key是否存在 |
TYPE key | 返回key所存储的值的类型 |
DEL key | 该命令用于在key存在是删除key |