一.Redis 简介
Redis(Remote Dictionary Server)是一个使用 ANSI C 语言编写的开源 key-value 存储系统。它具备以下特点:
- 高性能:阿里云 Redis 1C 1GB 主从版能够提供 80000 QPS 的吞吐量。
- 数据类型丰富:string、list、set、zset(sorted set)、hash。
- 原子:Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。
- 高级特性支持:支持按 key 设置过期时间,public / subscribe,通知,集群化等等特性。
因为具备以上特性,Redis 在工程项目中通常被作为分布式缓存使用。
二.Redis 应用场景
因为每个客户端请求的时间不一样,可能导致某个时间请求量巨大,某个时间请求量很少, 导致请求大的时候无法正常处理事务。
Redis 会将请求量大的时间段的请求放入一个队列中,让这些请求依次处理,这样空闲的时间也可以处理这些请求,缓解压力。
三.Redis 数据类型
1.String(字符串)
- string 是 redis 的最基本的类型,一个 key 对应一个 value。
- string 类型是二进制安全的。意思时 redis 的 string 可以包含任何数据。简单的如文本、数字、日期,复杂的如 jpg 图片或者序列化的对象,都可以支持。
- string 类型是 redis 最基本的数据类型,string 类型的值最大可以存储 512 MB。
2.List(列表)
- Redis List 是简单的字符串列表,按照插入顺序排序。
- 可以从列表的头部(左边)或者尾部(右边)进行元素的添加、获取和删除操作。
- 列表最多可以存储 2^32 - 1 个元素(4294967295,每个列表可存储40多亿)
3.Hash(哈希)
- Redis hash 是一个键值(key => value)对集合。
- Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象
4.Set(集合)
- Redis set 是 string 类型的无序集合。集合中成员是唯一的,不能出现重复的数据。
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
5.Sorted Set(有序集合)
Redis 有序集合是一种特殊类型的集合,集合中每个元素都会关联一个 double 类型的分数。集合中的成员按分数自动进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
四.Redis 高级特性 - 事务
Redis 支持事务特性,可以用事务机制保证一组命令要么全部执行,要么都不执行。
Redis 事务相关命令:
- MULTI:开启事务,redis 会将后续的命令逐个放入队列中,然后使用 EXEC 命令来原子化执行这个命令系列。
- EXEC:执行事务中的所有操作命令。
- DISCARD:取消事务,放弃执行事务块中的所有命令。
- WATCH:监视一个或多个key,如果事务在执行前,这个 key(或多个 key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。
- UNWATCH:取消 WATCH 对所有 key 的监视。
五.Redis 使用案例 - 分布式锁
- 在并发操作竞争性资源时,我们都只知道需要加锁以保证正确性。对于单机应用,直接使用本地锁(java 的 synchronized,ReentrantLock)就可以避免。
- 如果是多级部署的应用(一套代码,多机部署),本地锁派补上用场,这时就可以引入分布式锁来解决。
本文章整理自上课 PPT,仅供学习使用。