大厂Redis高并发场景设计,面试问的都在这!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了大厂Redis高并发场景设计,面试问的都在这!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4330字,纯文字阅读大概需要7分钟。
内容图文
此文转载自:https://blog.csdn.net/rxh811/article/details/106223630
文章目录
写在前面
2020年面试必备的java后端进阶面试题总结了一份复习指南在github上,内容详细,图文并茂,有需要学习的朋友可以star一下! github地址: https://github.com/Java-Ling/Java-Interview-guide
正文
分布式缓存是分布式系统中的重要组件,主要解决高并发、大数据场景下,热点数据访问的性能问题,提供高性能的数据快速访问。 使用缓存常见场景是:项目中部分数据访问比较频繁,对下游 db(例如 mysql)造成服务压力,这时候可以使用缓存来提高效率。下面来讲bat等一线企业中redis各种应用场景核心设计!一、常用指令
接下来看看每个数据结构常用的指令有哪些,我们用一张表比较清晰的展示:二、场景解析
1.1string存储
1.2string 类型使用场景
场景一:商品库存数 从业务上,商品库存数据是热点数据,交易行为会直接影响库存。而 redis 自身 string 类型提供了: set goods_id 10; 设置 id 为 good_id 的商品的库存初始值为 10;decr goods_id; 当商品被购买时候,库存数据减 1。 依次类推的场景:商品的浏览次数,问题或者回复的点赞次数等。这种计数的场景都可以考虑利用 redis 来实现。 场景二:时效信息存储 redis 的数据存储具有自动失效能力。也就是存储的 key-value 可以设置过期时间:set(key, value, expiretime)。 比如,用户登录某个 app 需要获取登录验证码, 验证码在 30 秒内有效。那么我们就可以使用 string 类型存储验证码,同时设置 30 秒的失效时间。2.1hash存储数据
2.2hash 类型使用场景
redis 在存储对象(例如:用户信息)的时候需要对对象进行序列化转换然后存储。 还有一种形式,就是将对象数据转换为 json 结构数据,然后存储 json 的字符串到 redis。 对于一些对象类型,还有一种比较方便的类型,那就是按照 redis 的 hash 类型进行存储。 例如,我们存储一些网站用户的基本信息, 我们可以使用: 这样就存储了一个用户基本信息,存储信息有:{name : 小明, phone : “123456”,sex : “男”} 当然这种类似场景还非常多, 比如存储订单的数据,产品的数据,商家基本信息等。以淘宝购物车为主2.3实现信息存储的优缺点
1.原生: set user: 1:name james;set user:1:age 23;set user:1:sex boy; 优点: 简单直观,每个键对应一个值 缺点: 键数过多,占用内存多,用户信息过于分散,不用于生产环境 2.将对象序列化存入 redis set user:1 serial ize (userinfo); 优点: 编程简单,若使用序列化合理内存使用率高 缺点: 序列化与反序列化有一定开销,更新属性时需要把userinfo全取出来进行反序列化,更新后再序列化到redis 3.hash存储: hmset user:1 name james age 23 sex boy 优点: 简单直观,使用合理可减少内存空间消耗 缺点: 要控制ziplist 与hashtable两种编码转换,mhashtable会消耗更多内存。3.1list 类型使用场景
list 是按照插入顺序排序的字符串链表。可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为 o(1)) 。 场景一:消息队列实现 目前有很多专业的消息队列组件 kafka、rabbitmq 等。 我们在这里仅仅是使用 list 的特征来实现消息队列的要求。在实际技术选型的过程中,大家可以慎重思考。 list 存储就是一个队列的存储形式: lpush key value; 在 key 对应 list 的头部添加字符串元素;rpop key;移除列表的最后一个元素,返回值为移除的元素。 场景二:最新上架商品 在交易网站首页经常会有新上架产品推荐的模块, 这个模块是存储了最新上架前 100 名。 这时候使用 redis 的 list 数据结构,来进行 top 100 新上架产品的存储。 redis ltrim 指令对一个列表进行修剪(trim),这样 list 就会只包含指定范围的指定元素。 start 和 stop 都是由 0 开始计数的,这里的 0 是列表里的第一个元素(表头),1 是第二个元素。4.1set 类型使用场景
set 也是存储了一个集合列表功能。和 list 不同,set 具备去重功能。当需要存储一个列表信息,同时要求列表内的元素不能有重复,这时候使用 set 比较合适。与此同时,set 还提供的交集、并集、差集。 例如,在交易网站,我们会存储用户感兴趣的商品信息,在进行相似用户分析的时候, 可以通过计算两个不同用户之间感兴趣商品的数量来提供一些依据。 获取到两个用户相似的产品, 然后确定相似产品的类目就可以进行用户分析。 类似的应用场景还有, 社交场景下共同关注好友, 相似兴趣 tag 等场景的支持。4.2set集合特殊的操作命令
seta={a,b,c} setb={b, c} 1)集合与集合之间的交集 sinter seta setb-->得到集合{b,c} 集合与集合之间的并集 sunion seta setb -->得到集合{a,b,c} 3)集合与集合之间的差集 sdiff seta setb-->得到集合{a}4.3set集合特殊的操作命令应用场景
如何实现微博的微关系设计?(看视频更香)5.1 zset有序集合
常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数与集合有联系,不能有重复的成员5.2zset 类型使用场景
内容总结
以上是互联网集市为您收集整理的大厂Redis高并发场景设计,面试问的都在这!全部内容,希望文章能够帮你解决大厂Redis高并发场景设计,面试问的都在这!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。