java面试题库冲刺3-redis基础

谈谈你对Redis的理解?

redis是用c语言编写的一款非关系型数据库(nosql),和mysql,oracle等存储在硬盘上的数据库来说,它是存储在内存当中的,所以性能非常快,官方给出的数据显示能够达到10w/s的QPS处理,可以当作DB和Java程序之间的缓存,把一些高并发的数据放在其中。
同时redis可以设置缓存失效时间,还可以用来作为登录,验证码失效等。

Redis基本数据类型与常用指令

redis五大数据结构
strings --赋值 set key value 取值get key 删除 del key
list ----赋值 lpush(rpush) key value 取值 lrange key start stop
set —不允许重复 sadd key membe 查看smembers key 删除 del key
sorted–有序集合 zadd key score member
hash —hset key field value

Redis缓存雪崩、击穿与穿透问题

一般如何操作redis呢,官方提供了Jedis来操作redis,但是我们spring中一般用RedisTemplate来操作,当然我们开发过程中可能会对RedisTemplate再进行一层封装,封装成我们日常的工具类。
Redis快的原因
redis是完全基于内存的,结构是类似于HashMap,还是单线程的,减少线程切换产生的开销。

redis的缓存击穿与穿透
我们的redis首次查询,如果查不到就会去数据库查,然后将数据库查询到的结果返回,然后再写入redis中,这样对于第二次查询就会redis直接返回,这样对于查询比较频繁的数据交给redis来做,减少mysql的数据库压力。
但是对于redis中查询为空,数据库查询也为空的,这样查询的key就会每次绕过redis,整个压力都在db上,可能会造成宕机。这就是缓存穿透
缓存击穿有点类似,在redis数据设置失效时间和reids下次存入数据中间有个时间延迟,但是对于大量请求比如秒死这种,在这极短的时间大量请求落入db中,造成数据库压力过大,造成宕机。
缓存雪崩和击穿类似,是大量的key同时失效,极短的时间内大量的数据访问压力在db上。
如何解决
缓存穿透,我们可以在redis查不到值和数据库都查不到值的时候,给redis的key一个空值。
缓存击穿我们可以IP限流与黑名单,避免同一IP一瞬间发送大量请求
雪崩我们可以采用redis的过期时间为永不过期。

Redis三种持久化机制

我们都知道redis是直接存在内存中的,对于redis宕机的情况就会出现数据丢失,redis有自己的持久化机制,在redis宕机的时候可以将内存中的数据存入硬盘当中,这样下次redis重启我们又会将之前的内容重新加载到内存当中。

RDB 持久化把内存中当前进程的数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发:

save:阻塞当前 Redis,直到 RDB 持久化过程完成为止,若内存实例比较大 会造成长时间阻塞,线上环境不建议用它

bgsave:redis 进程执行 fork 操作创建子进程,由子进程完成持久化,阻塞时

间很短(微秒级),是 save 的优化,在执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值