redis篇

redis数据类型:字符型、哈希、List、set、Zset
redis 雪崩、穿透、击穿
雪崩:大量数据同一时间失效,新的数据还没有来的及刷新到缓存中,此时又有大量请求,这些请求最终就会请求数据库,使数据库的性能急剧下降。
缓存雪崩解决方法:给缓存设置随机失效时间,这样就不会出现同一时间会有大量缓存失效的现象;事前:redis高可用,主从+哨兵        事中:本地ehcache缓存+hystrix限流&降级,避免把数据库打死      事后:redis持久化,一旦重启,自动从磁盘中加载数据,快速恢复缓存数据。
 
穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断的发起请求,如根据ID查询,ID都是大于0的,如果用-1去查,肯定在缓存和库里都查不到,如果大批量查,就会出现缓存穿透的问题
缓存穿透解决方式:后台逻辑添加判断,进行拦截相应不合法请求。同时也可以将无效的请求刷入到缓存中,并设置失效时间,进行控制。
 
击穿:缓存击穿和缓存雪崩很像,但又不一样,缓存击穿是大量访问一个key非常热点,但这个key又失效了,所以突然有大量请求到数据库中,就像在一个屏障中凿一个洞
缓存击穿解决方法:可以将热点数据设置为永远不过期。也可以通过锁的方式进行操作
 
分布式redis,哨兵
 
redis哨兵模式(Sentinel):在sentinel.conf配置文件中,我们可以找到port属性,这里是用来设置sentinel的端口,一般情况下,至少需要三个哨兵对redis进行监控。
 
redis主从服务切换时,可能会出现数据不一致,数据延迟的问题,如何进行解决
 
哨兵模式:如果主服务器出现故障,redis如何进行处理,如何从主服务器自动切换到从服务器,如果主服务器重启成功后,那么之前切过去的主服务器会变成从服务器吗
针对以上问题:如果主服务器出现故障,redis会随机选中一台机器重新作为主服务器,当故障服务重启成功,则其为从服务器。
 
1.redis如何保证数据的一致性
(1)更新redis时,先更新数据库,然后再更新缓存
(2)读取的时候,先读缓存,如果缓存没有的话,就读数据库,同时将数据放入缓存中,并返回响应
第二种情况:如果出现并发的情况如何处理,如更新库的同时,另一个请求该缓存,这样就会造成数据不一致问题
定期全量刷新缓存,可以很好的处理一些冗余的数据,如删除数据,数据库操作成功,刷新缓存失败的情况
给所有缓存一个失效期,但这个失效期最好不要一样,不然容易造成缓存雪崩出现
 
2.redis宕机了如何快速恢复数据:
redis备份数据有RDB和AOF
(1)    RDB:redis database
RDB:其实就是redis的内存数据的快照(snapshot),redis内所有的数据,都生成RDB文件,我们把生成的文件保存在文件系统中,如果系统宕机,则可以读取这个文件来恢复数据
RDB在redis.conf 文件配置中,进行配置;配置规则为:(save m n)  其中m表示秒,n表示修改的次数,
例如:save 900 1,      900秒内,至少有一次key的变化则保存
RDB每次备份会生成一个dump.rdb 文件
RDB缺点:最后一次持久化后的数据可能会丢。
如何生成RDB:使用命令save或bgsave。save:save时只管保存,其他不管,全部阻塞;bgsave:redis会在后台异步进行快照操作,快照操作的同时,还相应用户的请求,可以通过lastsave命令来获取最后一次成功执行的快照的时间。
如何恢复数据:将RDB生成的文件dump.rdb移动至安装redis目录,启动即可,在此期间,redis会有一段阻塞状态,直到载入工作完成。
(2)    AOF:以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到AOF文件,以此达到记录数据库状态的目的。
RDB和AOF的区别,及其优缺点:https://www.cnblogs.com/bigox/p/11574642.html
posted @ 2021-06-10 16:39  秃头猿  阅读(47)  评论(0编辑  收藏  举报
百度一下吧