面试Java高级工程师之Redis总结

一、为什么要用redis缓存,能解决什么问题

1、redis是一个非关系型数据库,数据存储在内存中,使用键值对来存储

2、使用redis能够提升系统性能,减小数据库压力,能够更加灵活的存储数据

二、redis数据结构有哪些

1、string字符串

2、list列表

3、hash哈希表key-vlue

4、set无序集合,元素不可重复

5、zset有序集合,元素不可重复

三、redis分布式锁使用场景有哪些,怎么实现的

使用场景:

1、在微服务分布式架构下,当多个服务同时访问一个共同资源时,会发生资源竞争

2、在高并发场景下,多个客户端同时发起请求访问同一个接口处理业务时

3、前端进入一个页面同时触发多个ajax请求后台插入数据时

方案一实现思路:

1、定义唯一的key

2、设置锁有效期、等待时间

3、利用redis的方法SETNX来判断值是否设置成功

4、如果设置成功则返回1表示已获取锁,继续处理业务,最后在finlly中释放锁

5、如果设置失败,则每隔0.5毫秒继续自循环判断等待时间,超过等待时间则返回0获取锁超时,未超过则重新设置值来获取锁

方案二实现思路:

1、通过lua脚本的方式实现CAS复合操作

四、redis中setEx和setNx有什么区别

setex:把set和expire命令合二为一作为一个原子操作

setnx:先判断key是否存在,不存在则设置值,存在则不做操作

五、memcached是什么,解决什么问题,和redis有什么区别

1、memcached是一个内存数据库,通过键值对来存储,使用更加简单,目的是能够的提供高性能服务,响应都是毫秒级别,是多线程架构模式

2、memcached和redis都是键值对存储数据到内存中,redis支持更丰富的功能,如lua脚本、集合、哈希、快照等,memcached是多线程架构,redis是单线程,都是响应毫秒级别,都是为了能够提升系统性能而存在

六、MongoDB是什么,和redis有什么区别

1、mongoDB是一种非关系型数据库,以文档、集合概念,使用bson数据结构来存储数据,类似json格式

2、mongoDB提供即时查询、保留了索引底层基于B tree算法,redis没有这些功能,操作命令不一样

你可能感兴趣的:(缓存框架,技术面试,java,面试,redis)