Redis的持久化、事务、穿透、雪崩、数据类型使用等核心问题

mysql和redis的区别:
mysql关系型数据库,有比较严格的格式,比如我们的查询语句。
redis内存数据库,没有严格的语法。操作的时候按照redis提供的使用方式来使用。
mysql的事务是一个或一组sql语句的单元,要么同时执行成功,要么失败回滚。
redis虽然也支持事务,但是执行报错无法进行回滚,用的不多。

1、redis的持久化什么时候用?
持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或者重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就是一种持久化。
redis提供了两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据,‘、
RDB(redis database)
指定时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。而且恢复数据的速度比其他aof速度快。
遵循15、5、1/1、10、10000 15分钟内改动一个以上就保存的原则。我们都这么用,不改的。不过这样可能会丢失最近15分钟以内的数据。
AOF(apend only file)
redis每次接收到一条改变命令的数据时,它把命令写到一个Aof的文件中,当redis重启时,它通过执行aof文件中所有的命令来恢复数据。(需要一系列的配置)
问如果两个持久化机制都开的话谁先执行?
同时执行,到点了rdb执行,任何命令aof都会执行。

2、redis的事务你怎么理解?
事务指的是一系列操作步骤,要么完全执行,要么完全不执行。
redis执行事务就是开启一个容器去记录操作指令。
指令
multi 再redis里就是开启事物的意思
exec 提交事务的
discard 放弃当前事务执行
watch/unwatch 监听某一个变量是否发生改变。
开启事务和结束事务的执行
-------------------------------------图1:开启事务和结束事务的执行---------------------------------------------
在这里插入图片描述
得到的还是之前的张三李四,并不是tianqi和wangwu
------------------图2:执行到一半放弃事务,刚刚开启的事务把之前的事务取消(放弃)掉了-----------------
在这里插入图片描述
第一条没问题,第二条自增语法有问题,提交的时候没有回滚,第一条执行了,第二条中断,所以不常会用到

-----------------------------------------------------图3事务执行到一半没有回滚--------------------------------------------------

在这里插入图片描述
-------------------------------------图4:没有报ok,也没有回滚-------------------------------
图3和图4 的区别是一个有ok,一个没ok,如果有ok就不会回滚,如果没有ok就会回滚。
解决办法是在java代码中通过业务逻辑来控制。
3、redis的穿透你怎么搞?
【穿透】查询时数据库没有,缓存也没有。比如:select * from stu where id = 1;查询时缓存中没有,数据库中也没有。
如果没有缓存,直接面对数据库,其他人知道了你的访问路径,用一个并发的测试工具,直接可以把你的系统搞崩。所以这也是一个网络安全。
解决方案1:
缓存空对象。
一个不存在的数据,第一次来查,都没有,但会返回一个空对象存到redis中,如果已经查询过就可以直接返回。
在redis执行时加入一个判断空的指令,如果不是空,就返回数据,如果是空,则直接返回查询无果。 在这里插入图片描述
解决方案2:
布隆过滤器。现在市面上解决缓存穿透的方案就属布隆过滤器。

4、redis的击穿怎么弄?
【击穿】查询时数据库里面有,缓存里面没有。击穿是相对于并发而言的,假如有十万个请求同时访问,缓存中没有。
那么同时查询的时候会有三万个直接进入数据库。所以可以设置一个version把其余的请求挡到外面。
解决方案:乐观锁,通过version来进行控制。

5、redis的雪崩咋玩?

6、redis最厉害的缓存失效时间是什么?

7、redis所有数据类型请分别说出使用场景?你碰到了什么问题?
String :存储结果集、计数器
List :各种列表、队列
hash :
set :主要是去重 (set集合无序不可重复)
zset :有序不可重复,主要是排行榜。rank和rerank ,找并集交集。 zunionstore,有一个score分值。

8、用redis做注册中心和zookeeper做注册中心有什么区别?
主要是因为redis的存储机制是key-value,并且还有发布和订阅的消息机制。key存贮的是服务名和类型,value中存map集合。map中的key存的是服务的url,map中的value存的是服务的过期时间,用于判断是否为脏数据,如果已经过期则为脏数据,由监控中心删除。

9、redis为什么快?
计算机中操作cpu缓存要比操作内存快
计算机中操作内存比操作磁盘要快

redis里面还自带了一个嵌入式的linux系统,大约1-2M,里面的命令极其少,vi都没有。

linux有1000个很古怪的权限,每一个数字都代表一个功能。999代表系统总线代理。

drwxr-xr-x. 2 root              root     6 9月  23 15:29 conf
drwxr-xr-x. 2 systemd-bus-proxy ssh_keys 6 9月  23 15:29 datadir
drwxr-xr-x. 2 systemd-bus-proxy ssh_keys 6 9月  23 15:29 logs

chown -R 999:999 datadir
chown -R 999:999 logs
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值