硬核Redis高频面试题解析
基础知识
1. Redis是什么?
Redis是一个键值存储系统。与关系型数据库相对,它比较轻量级,但却能够处理大量的数据。
2. Redis的特点
- Redis支持多种数据类型(字符串、哈希、列表、集合、有序集合),并提供了对这些数据类型的丰富操作。
- Redis支持单线程模式,但是通过使用多路复用技术(I/O多路复用),Redis能够处理多个客户端请求。
- Redis内存数据集合可以持久化到磁盘上,支持主从复制、哨兵和集群模式。
3. Redis的应用场景
- 缓存系统,能够降低数据库的压力。
- 计数器,比如微博的关注数、粉丝数等。
- 发布/订阅(pub/sub)系统。
- 消息队列系统。
- 高速数据统计系统等。
高频面试题解析
下面列出了一些高频的Redis面试题,并提供了详细的解析。
1. Redis支持的数据类型有哪些?
Redis支持以下五种数据类型:字符串、哈希、列表、集合和有序集合。每一种类型都有对应的操作命令,比如get/set命令用于操作字符串类型数据,hget/hset命令用于操作哈希类型数据等等。
2. Redis中如何实现过期失效?
Redis中可以通过设置过期时间来实现数据的自动过期失效。设置过期时间可以使用expire命令,比如:
expire key_name 10
上面的示例中,将设置key_name这个键的过期时间为10秒钟,10秒钟后key_name会自动失效。可以使用ttl命令查看键的剩余时间,例如:
ttl key_name
还可以使用persist命令将一个键变为永久有效,例如:
persist key_name
3. Redis中的持久化机制是什么?
Redis中的持久化机制包括两种:RDB(Redis Database)和AOF(Append Only File)。
RDB
RDB是Redis默认的持久化方式,它会周期性地将内存中的数据整个快照到磁盘上。可以通过配置redis.conf文件中的以下两个选项来控制RDB持久化:
save 900 1
save 300 10
上面的示例中,表示如果900秒内至少有1个key发生变化时,就会执行一次RDB快照持久化;如果300秒内至少有10个key发生变化时,就会执行一次RDB快照持久化。
AOF
AOF是一种增量持久化方式,它会在每个写命令执行完成之后往磁盘上写一条日志。这些日志可以用来重建原始数据集,也可以作为恢复数据库所需的操作日志。可以通过配置redis.conf文件中的以下选项来开启AOF持久化:
appendonly yes
4. Redis中集群模式是什么?
Redis集群是Redis提供的分布式数据库方案。它通过分区来实现对大量数据的处理和存储。Redis集群有以下几个特点:
- 数据自动分区,每个节点只保存部分数据。
- 支持节点间的自动平衡数据均衡。
- 在一定程度上保证了系统的高可用性。
示例说明
示例一
假设一个场景:有一个在线商城,前端发送sku_id查询商品详细信息时,后端将查询到的数据存入Redis中,并设置有效期为30分。在下一个30分钟内,如果再次查询相同的sku_id,就直接从Redis中读取缓存数据。在数据过期时,再次查询相同的sku_id,就重新查询数据库,并且重新存入Redis中,重复上述流程。
解决方案:
- 使用set命令将查询到的数据存入Redis中。
- 使用expire命令设置缓存数据的过期时间。
- 使用get命令从Redis中读取缓存数据。
示例二
假设一个场景:需要统计网站每个用户访问了哪些页面,并且需要按时间排序。
解决方案:
- 使用sorted set来存储每个用户访问的页面。
- sorted set中的score字段可以存储时间戳,这样就可以按时间排序了。