Loading... 1. Redis 是什么? Redis是基于内存的缓存数据库,是开源的,由C语言编写,是非关系型的数据库,存储的数据类型比memcache要多,并且支持持久化。 2. Redis 支持的数据类型 a. String b. Hash c. List d. Set e. ZSet 3. Redis持久化方案 持久化是为了防止当服务器挂掉或者断电后内存中数据丢失。 a. RDB(Redis DataBase) 将内存中的数据save到硬盘中的RDB文件中,执行save命令的时候会fork个子进程,性能比AOF模式高,恢复速度比AOF快,占用磁盘空间比AOF小。类似于虚拟机中的快照。 b. AOF(Append-only file) 类似于关系型数据库中的SQL文件,执行操作会按照设定的周期进行语句的输出,叠加到指定的文件中。使用这种方式当服务器挂掉损失较小,优先使用AOF还原数据,AOF文件错误容易修复,对服务器瞬时性能有影响。 4. 什么是缓存穿透?如何避免? 缓存穿透就是当查询一个key时,如果不存在对应的value,那就去DB中查找,从而DB提高了DB的压力。 解决方案:对一定不存在的key进行过滤,或当查询不存在的key时,先对其赋值为空,从而查询数据库,如果数据库中存在值,就覆盖,不存在就仍然存储为空。 5. 什么是缓存雪崩?如何避免? 当Redis服务器重启或者大量缓存集中时间内失效,在失效的时间段内,会提高DB压力。 解决方案:让不同的key在不同时间内过期或在缓存失效后,通过加锁或者队列来控制数据库写缓存线程的数量。但是我个人认为如果不是服务器宕掉,二级缓存比较靠谱一点。 6. Redis 全称是 Remote Dictionary Server 7. Redis 有哪些淘汰策略? volatile-ttl:回收过期的也就是超过规定时间的键 allkeys-lru:回收使用次数最少的键 volatile-lru:回收使用次数最少的键,仅限于在设置过期时间中的。 allkeys-random:回收随机的键 volatile-random: 随机回收键,仅限于在设置过期时间中的。 noeviction:不淘汰,如果内存已满,添加数据是报错 8. 字符串类型的值能存储最大容量是多少? 512M 9. 为什么Redis把数据存到内存中? 因为内存读写速度比硬盘要快,如果存储到硬盘中,那就是和其它应用一起使用硬盘资源,如果再进行一步DB查询,此时另一个线程读Redis,负载的瓶颈就是硬盘了。所以提高读写性能并且分散I/O设备,提高整体运行效率。 10. 如何保证Redis数据都是热点数据 当redis内存大小提升到一定程度后,就会执行数据的淘汰策略。 11. Redis常见的场景 会话的存储:会话缓存,也就是用户登录的信息,用户的会话对于一致性要求不高。 经常访问的数据:例如页面中的新闻,轮播图地址,访问计数器等等。 队列:例如密码错误登录限制,就可以通过redis中的list来实现,当队列中第n次出现的这个用户,登陆时间和现在时间的差是否满足异常登录条件。 12. Redis 的 Java客户端 Jedis、Redisson等 13. Redis key的过期时间和永久有效分别怎么设置? 设置过期时间:expire 设置永久有效:persist 14. 如何优化Redis内存 尽可能使用散列表,定义一个hash散列,并且把这个类型的数据都放在这个散列里。 15. Redis内存回收如何工作的? a. 数据过期后自动回收 b. 达到内存限制,按照策略回收 16. 如何进行大批量的数据插入? 通过管道进行大量插入操作,大概意思是客户端不需要等待服务端的响应,直接把数据发送给服务器,最后一次性接收服务器的回应。 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏