1.redis数据结构字符串String哈希Hash列表List集合Set有序集合ZSet字符串 Stringredis中最基本的数据类型,每个键都可以关联一个字符串值哈希 Hash适合存储对象类型数据列表 List有序集合支持 LPUSH/RPUSH 等操作集合 Set无序集合去重支持交并差集。有序集合ZSet有序带权重分数支持按分数排序三种特殊数据结构类Geospatial Hyperloglog Bitmap2.redis 如何持久化数据RDB快照全量备份模式原理定时将内存数据以二进制格式保存到磁盘如/* by yours.tools - online tools website : yours.tools/zh/rc4encrypt.html */save 60 10000表示60秒内10000次修改时触发。优点文件紧凑、恢复速度快。缺点可能丢失最后一次快照后的数据。AOF日志增量备份模式原理记录所有写操作命令支持/* by yours.tools - online tools website : yours.tools/zh/rc4encrypt.html */always每条命令同步、everysec每秒同步、no操作系统决定三种策略。优点数据安全性高最多丢失1秒数据,缺点文件体积大、恢复速度慢。选择建议对数据安全性要求高 → AOFeverysec。允许少量数据丢失追求恢复速度 → RDB。混合备份大量数据使用粗粒度时间上的rdb快照方式性能高恢复时间快。增量数据使用细粒度时间上的AOF日志方式尽量保证数据的不丢失。3.如何从持久化文件中恢复数据停止Redis服务。将备份文件如dump.rdb或appendonly.aof放到数据目录通过dir配置项指定。启动Redis服务自动加载文件。redis 缓存击穿、缓存雪崩如何解决缓存击穿 | 缓存雪崩某时刻大规模的key失效大量的请求打在数据库上导致数据库压力巨大在高并发的情况下数据库宕机。即使重启数据库后又会海量请求到数据库设置不同的过期时间和随机值来错开过期时间避免同一时刻大量缓存失效。4.redis 缓存数据的过期策略有哪些定期删除定期扫描所有键删除过期的数据。惰性删除每次读取数据时检查是否过期。LRU 删除内存满时删除最久未使用的数据。5.redis缓存与数据库如何保证一致性同步策略先更新数据库、再删除缓存优选同步删除可靠消息删除 适用于不强制要求数据一致性的情景 流程先更新数据库、再删除缓存如果删除失败就发可靠MQ不断重试删除缓存直到删除成功或重试5次。问题MQ多次重试失败导致长期脏数据。延时双删方案比同步删除策略一致性更高的方案。流程先删除缓存再更新数据库大约在数据库从库更新后再删一次。问题时间无法控制不能保证 在数据库从库更新后删除缓存。如果在从库更新前删除用户再在更新前查从库又把脏数据写在缓存里了。异步监听可靠消息删除很多大厂正在使用的方案。流程 更新数据库后不做操作Canal等组件监听binlog发现有更新时就发可靠MQ删除缓存如果删 除缓存失败就基于手动ack、retry等机制让消息在有限次数之内不断重试。优点异步删除性能更 高可靠消息重试机制多次删除保证删除成功。问题要求canal等binlog抓取组件高可用如果canal故 障会导致长期脏数据。6.redis 如何实现分布式锁使用 Redis 的 SETNX 命令实现分布式锁。结合过期时间防止锁死。7.redis 的高可用如何实现讲讲主从复制。主从复制一个主节点master多个从节点slave数据同步。读写分离主节点写读操作可以通过从节点分担。哨兵 Sentinel自动故障转移主节点宕机时哨兵会选举新的主节点。8.什么是 redis 的 bigkey一个 key 对应的 value 所占用的内存比较大那这个 key 就可以看作是 bigkey。String 类型的 value 超过 几十或上百 kb 已经算是 bigkey 了复合类型List、Hash、Set、Sorted Set 等的 value 包含的元素超过 5 千 到 1 万个9.redis的 bigKey如何处理分割 bigkey将一个 bigkey 分割为多个小 key。例如上万字段数量的 Hash 按照一定策略比如二次哈希拆分为多个小Hash如user#1、user#2。手动清理Redis 4.0 可以使用UNLINK命令来异步删除一个或多个指定的 key。Redis 4.0 以下可以考虑使用SCAN命令结合DEL命令来分批次删除。采用合适的数据结构例如文件二进制数据不使用 String 保存、用ZSet代替List、采用压缩算法处理。开启 lazy-free惰性删除/延迟释放lazy-free 特性是 Redis 4.0 开始引入的指的是让 Redis 采用异步方式延迟释放 key 使用的内存将该操作交给单独的子线程处理避免阻塞主线程。10.redis如何实现实现分布式锁使用SETNX命令是可以帮助我们实现互斥 , 带来的问题: 不同的服务异常死锁其他服务无法获取锁问题,若客户端获取锁后崩溃未释放锁都将导致其他客户端永远无法获取锁使用 redisson提供的分布式锁服务。RLock是其核心接口支持公平和非公平锁。加锁和解锁通过Lua脚本在Redis中执行确保原子性。公平锁利用Redis的List和ZSet实现线程的FIFO等待队列。Redisson通过watchDog机制自动续期锁防止业务执行超时导致锁过早释放同时使用Redis的发布订阅功能实现锁的释放通知只要线程一加锁成功就会启动一个watch dog看门狗的后台线程会每隔10秒检查一下如果线程一还持有锁那么就会不断的延长锁key的生存时间。因此Redisson就是使用Redisson解决了锁过期释放业务没执行完问题。11.redis的分布式模式有哪些哨兵模式和集群模式核心区别如下哨兵模式:高可用解决单点故障,单主节点无法扩展, 监控主从节点主节点宕机时选举从节点升级为主节点实现故障转移集群模式:水平扩展解决性能瓶颈,多主节点水平扩展,有16384个槽位节点分槽将数据分片存储在多个节点每个节点负责一部分槽位支持自动故障转移