Redis面试题3

Redis 过期键的删除策略是什么?有什么优缺点?

Redis 采用了惰性删除和定期删除相结合的策略来删除过期键。
惰性删除:在查询时检查 Key 是否过期并删除;
定期删除:每隔一段时间扫描数据库删除过期键。
优点:采用两种方式互补,保证过期键及时删除;
缺点:可能导致过期键并没有及时删除。
Redis的持久化机制有几种,分别是什么?它们有什么区别?

Redis 的持久化机制包括 RDB 和 AOF 两种。
RDB 是将内存中的数据以快照的形式保存到磁盘中,适合用于备份和恢复数据。缺点是如果宕机,会有数据丢失。
AOF 是将每个写操作以日志的形式记录下来,并将日志追加到磁盘中的 AOF 文件中,适合用于数据持久化和避免宕机数据丢失。缺点是文件可能会很大。
Redis 如何实现分页查询?

Redis 中可以使用有序集合(Sorted Set)来实现分页查询。
可以使用 ZRANGE 命令获取指定区间之间的元素,将总记录数 / 每页显示记录数计算出总页数,并结合当前页数和每页显示记录数计算出需要查询的元素区间。
Redis 如何实现计数器?

Redis 中使用 INCR 和 INCRBY 命令可以实现基于 Key 的计数器。
在实现流量限制等场景时,可以结合 Redis 的过期机制实现计数器的时效性,适时地删除无用的计数器 Key。
Redis 与 MySQL 之间的区别是什么?

Redis 和 MySQL 都是数据存储系统,但 Redis 是基于内存的缓存系统,而 MySQL 是基于磁盘的关系型数据库。
Redis 适用于高速读写场景和缓存系统,MySQL 适用于需要复杂查询、事务以及高级数据处理的场景。
Redis 如何实现分布式锁?有没有什么问题需要考虑?

Redis 可以使用 SETNX(SET if Not eXists)指令实现分布式锁。
Redis 采用单线程的方式处理请求,避免了分布式锁的竞争。
在应用中需要考虑死锁、锁超时、锁粒度、并发写入等问题。
Redis 是否支持多线程操作?

Redis 是单线程的,但可以通过集群模式和分片等机制实现多线程操作。
Redis 可以通过哪些机制保证数据的一致性和可靠性?

Redis 可以通过主从复制、哨兵模式、集群模式、备份和修改保护等机制来保证数据的一致性和可靠性。
Redis 如何实现分布式限流?

Redis 可以使用漏桶和令牌桶算法来实现分布式限流。
在漏桶算法中,Redis 使用 SETRANGE 命令定期清空桶内的令牌;
在令牌桶算法中,Redis 使用有序集合和 ZADD 命令生成指定数量的令牌并根据实际流量消费令牌。