每日八股文6.4补
每日八股-6.4补
- Redis
- 1.列举一些 Redis 常用的业务场景
- 2.看你的项目使用了Redis,你觉得使用 Redis 有哪些主要的优势呢?
- 3.Redis 支持哪些常用的数据类型呢?/ Redis常用的数据结构了解哪些呢?
- 4.Redis 的 Hash数据结构了解吗?
- 5.Redis 的跳表(Skiplist)是一种什么样的结构?
Redis
1.列举一些 Redis 常用的业务场景
Redis 在很多业务场景中都有广泛的应用,我列举一些比较常用的:
- 热点数据缓存: 这是 Redis 最常见的应用场景。由于 Redis 速度快,非常适合存储访问频率很高的数据,比如商品信息、用户信息、配置信息等等。
- 限时类业务的实现: Redis 提供了 expire 命令可以设置 key 的过期时间,这非常适合实现一些限时业务,比如验证码的有效期、优惠券的使用期限、活动倒计时等等。
- 计数器的实现: Redis 的 incrby 等命令可以实现原子性的递增操作,在高并发场景下非常有用,比如可以用来做秒杀活动的计数、限制某个接口的访问频率等等。
- 排行榜的实现: Redis 的有序集合(SortedSet)可以根据分数进行排序,非常适合实现各种排行榜功能,比如热门商品排行榜、用户积分排行榜等等。
- 分布式锁的实现: 可以利用 Redis 的 setnx(set if not exists)命令来实现简单的分布式锁,保证在分布式环境下只有一个客户端能执行特定的操作。
2.看你的项目使用了Redis,你觉得使用 Redis 有哪些主要的优势呢?
首先,redis是基于内存的数据库,所以它的读写速度非常快,可以有效提升程序的性能。
其次,redis支持丰富的数据结构,不仅仅只是键值对,还支持列表,集合,哈希表,有序集合等,这些不同的数据结构可以在不同的业务场景中发挥其独特的优势。
最后,redis有许多功能,比如数据持久化,可以将内存中的数据迁移到磁盘上;主从复制,可以提升读写性能及可用性;redis集群,可以实现更大的数据容量以及更高的并发性能。
3.Redis 支持哪些常用的数据类型呢?/ Redis常用的数据结构了解哪些呢?
Redis 支持多种数据类型,最常用的有以下五种:
- String(字符串): 这是最基本的数据类型,可以存储文本、数字或者二进制数据,单个 value 的最大容量是 512MB。常用于缓存对象、常规计数、实现分布式锁等。
- Hash(哈希): 类似于 Map,存储键值对的集合,适合存储对象,可以方便地对对象的属性进行修改,常用于缓存对象、实现购物车等。
- List(列表): 是一个有序的字符串列表,支持在列表的两端进行添加和删除操作,常用于实现消息队列等。
- Set(集合): 是一个无序且唯一的字符串集合,常用于做一些集合操作,比如求交集、并集、差集,可以应用于点赞、共同关注等场景。
- Zset(有序集合): 在 Set 的基础上为每个元素关联一个分数,可以根据分数进行排序,常用于实现排行榜等。
补充:在 Redis 中,所有的 key 都是二进制安全的 String 类型
4.Redis 的 Hash数据结构了解吗?
Redis 的 Hash 是一种 键值对集合,但与普通的键值对不同的是,Hash 中 每个键对应的值本身又是一个包含多个字段和值的键值对集合。可以把他想成一本书,外层的键对应的是书的名字,全局唯一,我们需要靠他来找到这本书;内层的键值对就像是书内的各个章节及对应的内容。
Redis 的 Hash 特点如下:
- 适合存储小数据:Hash 特别适合存储具有多个相关属性的小对象。
- 使用哈希表实现:底层通常使用哈希表(或压缩列表)实现,能够在内存中高效地存储和操作。
- 支持快速的字段操作:Redis 提供了针对 Hash 中字段的快速增、删、改、查操作,例如 HGET、HSET、HDEL 等,这使得它非常适合存储和管理对象的属性。
5.Redis 的跳表(Skiplist)是一种什么样的结构?
Redis 跳表:多级跳跃的有序链表
- 本质: 一种有序链表的升级版。
- 核心思想: 空间换时间。
- 如何优化: 在普通链表上加了多层“索引”。
- 底层是完整数据(有序链表)。
- 上层是稀疏的、跳跃式的索引。
- 层级越高,跳过的节点越多。
- 查找/增删: 从最顶层索引开始“跳”,快速定位,平均时间复杂度接近 O(logN)。
- 关键组成:
- 节点: 每个节点包含 数据、分值、和最重要的 层 数组(多个向前指针)。
- 层数组长度: 随机生成(决定节点参与多少层索引)。
- Redis 应用: 主要用于实现 ZSet(有序集合)。