1、Redis支持的数据类型
·String(简单的动态字符串,保存文本数据和二进制字符串)
场景:缓存对象、常规计数、分布式锁、共享Session信息
·List(由双向列表和压缩列表实现)
场景:消息队列
·Hash(压缩类表和哈希列表实现)
场景:缓存对象、购物车等
·Set(哈希表和整数集合)
场景:聚合算法场景;如:点赞、抽奖、共同关注
·ZSet(压缩列表或跳表实现)
场景:排序场景、如:排行榜、电话和姓名排序等
2、Redis的优势:
·单线程避免线程切换的消耗
·存放在内存中,读取速度快
·使用多路复用技术(使用一个线程监听多个,当发生I/O事件可以立即处理)
3、缓存可能出现的问题
·缓存雪崩问题:当大量缓存同时失效,大量并发请求导致系统崩溃
解决办法:缓存过期时间随机、常用缓存永不过期
·缓存击穿:热点数据过期后,大量请求访问数据库
解决办法:设置锁、热点数据永不过期
·缓存穿透:数据库和缓存都没有该数据
解决办法:非法请求限制、设置空值或者默认值、使用布隆过滤器进行过滤
4、Redis缓存更新策略:
旁路缓存策略(适合读多写少):更新时删除缓存,更新数据库后在将数据库的数据写回到缓存
写策略:先更新数据库数据,再删除缓存的数据
读策略: 先读取缓存,存在则返回,不存在则从数据库中读取到缓存中
5、redis持久化策略
·RDB持久化(使用快照的方式持久化到硬盘中,二进制文件以.rdb结尾)
·AOF持久化(数据持久化实时性,记录命令)
6、过期删除策略
redis会把key带上过期时间存储到过期字典中,读取缓存时,过期字典中不存在直接读取,存在则与当前系统时间比较判断是否过期。
包含惰性删除和定期删除
7、redis的内存淘汰策略
·缓存污染概念:一次读取大量数据,但只使用一次就未使用了
跳表:将链表进行相关的树的分层,提升读取的效率,与普通链表顺序相比,有点类似B+树的对比分支,层层往下跳跃。