Redis 面试中必考的业务场景解析

很多文章和书籍都有介绍 Redis 的基础理论知识,单纯的理论介绍很难让我们轻松的理解。

即使翻阅再多的书籍,遇到雪崩还是傻眼…

比如这个问题,1000 个线程压测时 Redis Incr 出现错误,就是 Timeout,怎么排查?
就问你看完那么多理论篇后能一下子给出解决方案不?

这种情况我建议:

先查看一下与 Redis 服务器相连的配置项是否正确,比如说 Maxidle、Maxwait、MaxActive 等。

然后看一下压测服务器以及 Redis 服务的资源情况如何,常见的 CPU、内存、磁盘、Load 等。

重点看一下 Redis 的连接数是什么情况,是不是连接数过多,导致超时,对比一下最大连接数和当前连接数。

又比如,Redis 集群很多个 Redis 的话,是把多个 IP 全部写到代码里面,那会不会导致压力不均衡?

我的回答是:Redis Cluster 集群模式,自动实现负载均衡的。哨兵其实就是一个监控或者容灾的作用,它下面实际的数据提供还是主从模式,所以如果是哨兵模式就不存在压力不均衡的模式了。
在这里插入图片描述
还有同学问到,一个转行的本科生即将干 Java 开发,想考一个本行业的研究生,有什么大学和专业和书本和实操推荐?

这些都能在 BAT 资深工程师写的这篇《Redis 场景实战解析》里得到答案。作者没有拘泥于原理去说,而是借用工作中会遇到的场景阐述怎样使用。通过本文我们能学习到:

  1. Redis 各个知识点在业务场景中的使用方式;
  2. Redis 可能遇到的困难以及解决方案(穿透、雪崩等);
  3. Redis 分布式环境的使用方案(分布式锁、自增 ID 等);
  4. Redis 集群模式总结;
  5. Redis 面试题目总结。

目前只需要 9.9 元就能学习到这些技能,而且还有作者根据大厂打量的面试题,已经有 1200 多人开始学习了 ?
在这里插入图片描述

Redis 基本数据结构与实战场景

基本类型

我们用一个简单的导图来简单复习一下 Redis 的基本数据类型:

enter image description here

常用指令

接下来看看每个数据结构常用的指令有哪些,我们用一张表比较清晰的展示:

序号数据结构常用命令命令实例
1String1.set :设置 key 对应的 value 值
2.get : 获取对应 key 的值,如不存在返回 nil
3.setnx : 只有设置的值不存在,才设置
4.setex :设置键值,并指定对应的有效期
5.mset/mget : 一次设置/获取多个 key 的值
6.incr/decr : 对 key 值进行增加 / 减去 1 操作
1.set name “tom”
2.get name 结果 :tom
3.setnx name “jim”
4.setex name 10 “tom”
5.mset key1 “hh” key2 “kk”
6.+1/-1
2list1.lpush/rpush :在 key 所对应的 list 左 / 右部添加一个元素
2.lrang/lindex :获取列表给定范围 / 位置的所有值
3.lset :设置 list 中指定下表元素的值
1.lpush list_name value1; rpush list_name value2
2.lrang list_name 0 -1 获取列表所有元素
3.lset list_name 1 valuex
3set1.sadd :向名称 为key 的 set 添加元素
2.smembers :查看集合中的所有成员
3.spop :随机返回并删除 set 中一个元素
4.sdiff :返回所有 set 与第一个 set 的差集
5.sunion :返回给定集合并集
1.sadd wordset aa; sadd wordiest bb;
2.smembers wordset
3.spop wordset
4.sdiff wordset wordset1
5.sunion wordset wordset1
4hash1.hset :设置一个 hash 的 field 的指定值,如果 key 不存在先创建
2.hget :获取某个 hash 的某个 filed 值
3.hmset/hmget :批量设置 / 获取 hash 内容
4.hlen :返回 hash 表中 key 的数量
5.hkeys/hvals :返回 hash 表中所有的 key/value
1.hset user name “tom"
2.hget user name
3.hmget user name sex
4.hlen user
5.hkeys user / hvals user
5Sorted set1.zadd :将一个带有给定分值的成员添加到有序集合里面
2.zrange :取出集合中的元素
3.zcard :返回集合中所有元素的个数
1.zadd key 1 hello
2.zrang key 0 -1
3.zcard key

####2.3 场景解析

String 类型使用场景

场景一:商品库存数

从业务上,商品库存数据是热点数据,交易行为会直接影响库存。而 Redis 自身 String 类型提供了:

incr key   && decr key   &&  incrby key increment  &&  decrby key decrement
  1. set goods_id 10; 设置 id 为 good_id 的商品的库存初始值为 10;
  2. decr goods_id; 当商品被购买时候,库存数据减 1。

依次类推的场景:商品的浏览次数,问题或者回复的点赞次数等。这种计数的场景都可以考虑利用 Redis 来实现。

场景二:时效信息存储

Redis 的数据存储具有自动失效能力。也就是存储的 key-value 可以设置过期时间:set(key, value, expireTime)

由于篇幅有限,将近 2w 字的干货没法全部附上,你们可以直接扫描二维码阅读。
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做全栈的胖胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值