面试题答案
一键面试LPUSH与RPUSH不同之处
- 插入位置:
LPUSH
:将一个或多个值插入到列表头部(左侧)。如果键不存在,会先创建一个空列表,然后再执行插入操作。RPUSH
:将一个或多个值插入到列表尾部(右侧)。同样,如果键不存在,会先创建空列表再插入。
- 元素顺序:
- 由于
LPUSH
从头部插入,新插入元素会排在已有元素之前。例如,对空列表执行LPUSH mylist a b c
,列表最终顺序为c b a
。 RPUSH
从尾部插入,新插入元素会排在已有元素之后。例如,对空列表执行RPUSH mylist a b c
,列表最终顺序为a b c
。
- 由于
业务场景举例
- LPUSH应用场景:
- 消息队列(优先处理新消息):
- 在某些实时性要求较高,希望优先处理最新消息的消息队列场景中适用。比如,在一个实时监控系统中,不断有新的监控报警消息产生,使用
LPUSH
将报警消息插入到消息队列列表头部,处理程序从列表头部(使用LPOP
)取出消息进行处理,这样可以保证最新产生的报警消息优先被处理。
- 在某些实时性要求较高,希望优先处理最新消息的消息队列场景中适用。比如,在一个实时监控系统中,不断有新的监控报警消息产生,使用
- 记录最新操作日志:
- 假设要记录用户在系统中的操作日志,使用
LPUSH
将每次操作记录插入到日志列表头部。这样,获取日志时,从头部开始获取可以先看到最新的操作记录,方便快速了解用户近期行为。例如,执行LPUSH user_1_log "user logged in" "user changed password"
,最新的操作“user changed password”会在列表头部。
- 假设要记录用户在系统中的操作日志,使用
- 消息队列(优先处理新消息):
- RPUSH应用场景:
- 普通消息队列(按顺序处理):
- 在大多数常规消息队列场景中,消息需要按照产生的先后顺序进行处理。例如,在一个订单处理系统中,订单消息按照下单时间先后顺序产生,使用
RPUSH
将订单消息插入到消息队列列表尾部,处理程序从列表头部(使用LPOP
)依次取出订单消息进行处理,确保订单按顺序被处理,避免处理混乱。
- 在大多数常规消息队列场景中,消息需要按照产生的先后顺序进行处理。例如,在一个订单处理系统中,订单消息按照下单时间先后顺序产生,使用
- 数据采集按顺序存储:
- 当进行数据采集,如收集网站用户的浏览记录时,希望按照用户实际浏览的先后顺序存储数据。使用
RPUSH
将每次浏览记录插入到浏览记录列表尾部,这样后续分析用户浏览路径时,数据顺序与实际浏览顺序一致。例如,执行RPUSH user_2_browse_log "visited page A" "visited page B"
,“visited page A”在前,“visited page B”在后,符合实际浏览顺序。
- 当进行数据采集,如收集网站用户的浏览记录时,希望按照用户实际浏览的先后顺序存储数据。使用
- 普通消息队列(按顺序处理):