行唐县做网站电话,斗鱼网站开发是用什么语言,国家重点项目建设库网站,制作ppt教程视频自学面试 Redis 八股文十问十答第二期 作者#xff1a;程序员小白条#xff0c;个人博客 相信看了本文后#xff0c;对你的面试是有一定帮助的#xff01;关注专栏后就能收到持续更新#xff01;
⭐点赞⭐收藏⭐不迷路#xff01;⭐
1#xff09;redis 一般都用在什么场景…面试 Redis 八股文十问十答第二期 作者程序员小白条个人博客 相信看了本文后对你的面试是有一定帮助的关注专栏后就能收到持续更新
⭐点赞⭐收藏⭐不迷路⭐
1redis 一般都用在什么场景
RedisRemote Dictionary Server通常用于以下场景
缓存 Redis 可以作为缓存存储数据可以帮助加速访问频繁的数据减轻后端数据库的压力。会话缓存 用于存储用户的会话信息可以帮助实现分布式会话管理提高系统的扩展性和性能。消息队列 Redis 的发布/订阅功能和列表数据类型可以用于实现简单的消息队列用于解耦和异步处理任务。计数器 Redis 的计数器功能可以用于实现各种计数场景如网站访问量统计、点赞数统计等。实时排行榜 Redis 的有序集合数据类型可以用于实现实时排行榜功能如热门商品排行、热门搜索排行等。分布式锁 Redis 的分布式锁功能可以用于实现分布式系统中的并发控制确保多个客户端对共享资源的安全访问。
2redis 为什么这么快
Redis 之所以快速主要有以下几个方面的原因
内存存储 Redis 将数据存储在内存中读写速度非常快因为内存的访问速度比磁盘快得多。单线程模型 Redis 使用单线程模型避免了多线程之间的线程切换开销和锁竞争提高了处理请求的效率。非阻塞 I/O Redis 使用了非阻塞 I/O 多路复用机制通过一个线程来管理多个客户端连接减少了网络 I/O 的开销。高效的数据结构 Redis 提供了丰富的数据结构如字符串、列表、哈希表、集合、有序集合等可以更加高效地存储和操作数据。
3redis 为什么要设计成单线程6.0 不是变成多线程了吗
Redis 最初设计为单线程的主要原因是为了简化实现和提高性能。单线程模型避免了多线程之间的线程切换开销和锁竞争同时利用了操作系统的非阻塞 I/O 多路复用机制提高了处理请求的效率。
在 Redis 6.0 中引入了多线程支持主要是为了充分利用多核处理器的性能。但是这并不意味着 Redis 的设计变成了多线程。多线程模型在某些场景下可能会提高并发能力但也增加了复杂性和风险比如线程间的同步与通信、锁竞争等问题。因此Redis 6.0 仍然采用了单线程和多进程的混合模型其中单线程处理网络 I/O 和协议解析而后端任务通过多个线程执行这样既保留了单线程模型的优势又能充分利用多核处理器的性能。
4redis 常见的数据类型有哪些
Redis 支持多种数据类型每种数据类型都有不同的特点和用途。常见的数据类型包括
字符串String 最基本的数据类型可以存储字符串、整数或者浮点数。哈希表Hash 类似于字典可以存储多个键值对每个键值对都是一个字段和对应的值。列表List 类似于链表可以存储多个有序的元素支持头部和尾部的插入、删除操作。集合Set 类似于集合可以存储多个不重复的元素支持并集、交集、差集等操作。有序集合Sorted Set 类似于有序集合可以存储多个元素并为每个元素分配一个分数元素根据分数排序。
5详细说说 redis 跳表的实现
Redis 中的跳表Skip List是一种有序数据结构可以用来实现有序集合Sorted Set。跳表通过在原始链表的基础上添加多层索引以提高查找效率。
跳表的实现主要包括以下几个步骤
节点结构 跳表中的每个节点包含多个指针指向同一层中下一个节点和下一层中相同位置的节点。头部节点 跳表有一个头部节点它不存储任何数据只作为入口节点。层级索引 跳表中的每个节点都可能有多个层级索引每个层级索引都是一个链表节点它指向下一个节点。插入操作 在插入新元素时需要按照一定的规则确定元素应该插入的层级然后更新相应的索引。删除操作 删除元素时需要找到对应的节点并删除同时更新索引。查找操作 通过跳表的索引结构可以快速定位到待查找元素的大致位置然后在对应层级的链表中进行查找。
跳表的时间复杂度为 O(log n)与平衡二叉树的性能相当但实现起来比较简单并且不需要像平衡二叉树那样复杂的平衡操作。
6redis 的 hash 可以详细讲讲吗
Redis 的哈希表Hash是一种类似于字典的数据结构可以存储多个键值对每个键值对都是一个字段和对应的值。Redis 的哈希表支持以下操作
添加字段HSET 将指定字段的值设置为指定的值。获取字段值HGET 获取指定字段的值。删除字段HDEL 删除指定字段。判断字段是否存在HEXISTS 判断指定字段是否存在。获取所有字段HKEYS 获取哈希表中的所有字段。获取所有值HVALS 获取哈希表中的所有值。
哈希表在 Redis 中的内部实现使用了类似于字典的结构具体来说它使用了哈希表和链表相结合的方式来实现其中哈希表用于快速查找字段链表用于解决哈希冲突。在 Redis 中哈希表的扩容操作采用了渐进式 rehash 策略即在扩容过程中仍然可以对哈希表进行读写操作减少了扩容过程的阻塞时间。
7redis 和 memcached 有什么区别
数据类型支持 Redis支持更丰富的数据类型如字符串、哈希、列表、集合、有序集合等而Memcached只支持简单的键值对存储。持久化 Redis支持持久化可以将数据保存到磁盘上而Memcached不支持持久化。数据复杂度 Redis对于更复杂的数据处理如排序、范围查找等更友好而Memcached更适合简单的键值缓存。内存管理 Redis采用多种内存管理技术可以更灵活地控制内存的使用而Memcached的内存管理相对简单。
8redis 可以实现事务吗
是的Redis 支持事务。Redis 的事务通过 MULTI、EXEC、WATCH、DISCARD 等命令实现。在事务中客户端可以将多个命令组合在一起然后一次性发送给 Redis 服务器执行。Redis 在执行事务期间会将命令序列化保证事务的原子性。如果在 EXEC 执行之前有被 WATCH 监控的键发生了变化那么事务将被打断。
9redis 的过期策略可以说说吗
Redis 的过期策略主要有两种
定时删除 Redis 使用一个定时器每秒执行10次来检查键是否过期过期的键会被定期删除。惰性删除 当访问一个键时Redis 会先检查该键是否过期如果过期则删除。这种策略可以节省内存但会增加访问时的延迟。
10redis 的内存淘汰策略有哪些
当内存不足时Redis 可以通过一些策略来淘汰部分数据以释放内存常见的内存淘汰策略包括
LRULeast Recently Used 淘汰最近最少使用的键。LFULeast Frequently Used 淘汰最不经常使用的键。TTLTime To Live 淘汰具有过期时间的键。随机淘汰 随机选择一些键进行淘汰。
开源项目地址https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 1300 Star2W 访问
⭐点赞⭐收藏⭐不迷路⭐