面试题-redis1. Redis用过哪些数据类型每种数据类型的使用场景2. Redis缓存穿透、缓存雪崩和缓存击穿原因以及解决方案3. 如何使用Redis来实现分布式锁redis分布式锁有什么缺陷4. Redis持久化的几种方式优缺点是什么怎么实现的5. MySQL里有2000w数据redis中只存20w的数据如何保证redis中的数据都是热点数据6. Redis和Redisson有什么关系1. Redis用过哪些数据类型每种数据类型的使用场景String字符串类型缓存结构体信息将结构体json序列化成字符串计数功能List列表类型将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表另一个线程从这个列表中轮询数据进行处理list可用于秒杀抢购场景Hash数据类型保存结构体信息Set集合类型去重的场景里相当于java中的HashSet内部的健值是无序唯一的相当于一个hashmap但是value都是nullZset有序集合热门歌曲榜单列表value值是歌曲IDscore是播放次数这样就可以对歌曲列表按播放次数进行排序keys *查看当前库中所有keyexists key判断某个key是否存在type key查看key的类型del key删除指定的key数据expire key 10 为给定的key设置过期时间为10秒ttl key查看还有多少秒过期-2则表示已经过期-1表示永不过期expire key seconds 设置key的有效时间set key value 添加数据get key 获取指定key的值select 命令切换库dbsize查看当前数据库中key的数量2. Redis缓存穿透、缓存雪崩和缓存击穿原因以及解决方案缓存穿透大量请求根本不存在的key缓存雪崩redis中大量key集体过期缓存击穿redis中一个热点key过期大量用户访问该热点key但是热点key过期穿透解决方案对空值进行缓存设置白名单使用布隆过滤器接口校验雪崩解决方案进行预先的热门词汇的设置进行key时长的调整击穿解决方案进行预先的热门词汇的设置进行key时长的调整实时调整监控哪些数据是热门数据实时的调整key的过期时长使用锁机制(只有一个线程可以进行热点数据的重构)详细解释3. 如何使用Redis来实现分布式锁redis分布式锁有什么缺陷造成死锁程序处理业务逻辑异常没及时释放锁进程挂了没机会释放锁锁过期释放了别人的锁设置唯一标识线程ID其他问题大量失败请求使用自旋锁锁重入问题使用可重入锁锁分段将大锁分段库存中有2000个商品分为100段这样每段就有20个商品可以参与秒杀4. Redis持久化的几种方式优缺点是什么怎么实现的RDB 快照持久化方式AOF 日志持久化方式RDB手动触发自动触发AOF手动开启RDB优点RDB文件紧凑全量备份非常适合用于进行备份和灾难恢复。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。RDB缺点快照持久化期间修改的数据不会被保存可能丢失数据。数据完整性比较差AOF优点AOF可以更好的保护数据不丢失一般AOF会每隔1秒通过一个后台线程执行一次fsync操作最多丢失1秒钟的数据。AOF缺点对于同一份数据来说AOF日志文件通常比RDB数据快照文件更大恢复数据时时间要比快照模式慢很多5. MySQL里有2000w数据redis中只存20w的数据如何保证redis中的数据都是热点数据volatile-lru从已设置过期时间的数据集中挑选最近最少使用的数据淘汰volatile-ttl从已设置过期时间的数据集中挑选将要过期的数据淘汰volatile-random从已设置过期时间的数据集中任意选择数据淘汰6. Redis和Redisson有什么关系Redisson 是一个高级的分布式协调 Redis 客户端能帮助用户在分布式环境中轻松实现一些 Java 的对象