1.redis支持的数据类型有哪些?
list队列、string字符串,set集合,zset有序集合,hash散列表
2.redis的持久化方式?
RBD:快照模式
每隔一段时间对内存中的数据进行快照存储,默认启用该模式
手动触发:使用save或bgsave 触发RDB 生成的文件是dump.rbd
save和bgsave的区别?
save执行后不会执行其他命令,知道该命令执行完
bgsave会单独分出一个线程去进行快拍,不会影响其他线程的操作。
自动触发:
需要修改配置文件
AOF:日志【每执行一个写操作】追加模式,默认redis没有开启,需要手动开启。默认文件名位appendonly.aop
RBD和AOF的区别?
RBD快照模式,数据备份和恢复速度快,缺点:数据完整性差,数据可能丢失过多。
AOF:日志追加,数据完整性高,缺点:数据备份和恢复速度慢。
3. redis如何保证缓存数据与数据库数据同步。
1.设置合理的过期时间。
2.对数据进行增删改时删除redis缓存数据。
4. redis的使用场景
1.热点数据缓存 --使用spring切面注解完成
2.显示任务的操作,比如短信验证码 ---调用阿里云接口实现
3.完成session共享的问题
4.完成分布式锁 ----使用setIfAbsent()上锁并设置过期时间,使用delete()去释放锁
5.商品的销售量。
5.什么是缓存穿透以及如何解决?
缓存穿透:查询的数据在数据库中不存在缓存中也不存在,这时候有人恶意访问这种数据,请求到达数据库。
解决方案:
第一步:在controller校验数据。对一些不合法的数据过滤。
第二步:使用布隆过滤器。
第三步:存放一个空对象,并设置过期时间不能超过5分钟。
6.什么是缓存击穿以及解决方案?
缓存击穿:数据库存在,但是缓存中该数据过期了。这时候有大量的请求访问过期的数据。压力顶到数据库。
解决方案:1.使用互斥锁 2.设置永不过期。
7.什么是缓存雪崩以及解决方案?
缓存雪崩:当缓存服务器重启或者大量缓存数据集中某一段时间失效,这样失效的时候,也会给后端系统(比如数据库)带来很大的压力。
解决方案:1.设置散列的过期时间。2.预热数据。3.搭建集群。
8. redis内存淘汰策略?
[1]volatile-lru:从已设置过期时间的数据集(server. db[i]. expires)中挑
选最近最少使用的数据淘汰。
[2]volatile-ttl:从已设置过期时间的数据集(server. db[i]. expires)中挑
选将要过期的数据淘汰。
[3]volatile-random:从已设置过期时间的数据集(server. db[i]. expires)中
任意选择数据淘汰。
[4]allkeys-lru:从数据集(server. db[i]. dict)中挑选最近最少使用的数据
淘汰。
[5]allkeys-random:从数据集(server. db[i]. dict)中任意选择数据淘汰。
[6]no-enviction(驱逐):禁止驱逐数据。