1 .redis有那几种数据结构,有那些使用场景****
字符串(String)
特性:可变长度的字符串,最大长度为 512 MB。
应用场景:
存储简单的键值对,如用户信息、配置项等。
实现计数器,如网页点击数、点赞数等,通过 INCR 和 DECR 操作原子性地增减数值。
作为分布式锁的基础,例如使用 SETNX 实现互斥锁。
列表(List)
特性:双向链表,可以两端添加或弹出元素。
应用场景:
实现消息队列,例如工作队列(LPOP/RPOP 或 BLPOP/BRPOP)。
实现文章列表分页展示,最新消息列表等,LRANGE 命令可用于获取指定范围内的元素。
实现栈(push/pop)和队列(lpush/rpop 或 rpush/lpop)的行为。
哈希(Hash)
特性:键值对集合,存储对象属性结构化数据。
应用场景:
存储用户信息、产品详情等需要多维度属性的对象数据。
避免多次查询数据库以获取或更新整个对象的多个字段。
集合(Set)
特性:无序、唯一元素的集合。
应用场景:
实现标签系统,存储用户兴趣标签、文章标签等。
实现实时统计用户在线状态、共同好友、共同收藏等。
抽奖系统,例如 SPOP 可以随机抽出集合中的元素。
有序集合(Sorted Set,ZSet)
特性:与集合类似,但每个成员都关联一个分数,根据分数排序。
应用场景:
排行榜,如用户积分排名、商品销售热度排行等。
时间窗口限流,例如记录最近一段时间内用户的请求次数。
2.mysql怎么优化,如何避免回表
使用覆合索引将sql需要用的字段都添加就能避免回表
3.怎么避免用户在下单页面误触导致的二次下单
后台在处理订单时,确保幂等性设计,即同样的请求多次提交只产生一次有效订单。
为每个订单生成唯一的标识(如订单号或防重key),在提交订单请求时带上此标识,服务器端接收到请求后先检查此标识是否已经存在,若存在则认为是重复订单,不再处理新的下单请求。
4.mq用过哪几种,如何实现防止重复消费,消息堆积,消费异常
消费异常处理:
当消费失败时,将消息重新放回队列等待下次消费,配合退避策略(如指数退避)避免频繁重试。
设置最大重试次数,超过后转入死信队列。
处理消息堆积:
对生产者进行限流,避免短时间内大量消息涌入MQ,超出消费者的处理能力范围。
调整MQ的队列分区数量和消费者分配策略,合理利用集群资源。
防止重复消费:
给每条消息设置全局唯一的标识符(如消息ID),并在消费端记录已消费消息的ID,当接收到新消息时先检查该标识符是否已被消费过。