1、redis是一个非关系型数据库,数据存储在内存中,使用键值对来存储
2、使用redis能够提升系统性能,减小数据库压力,能够更加灵活的存储数据
1、string字符串
2、list列表
3、hash哈希表key-vlue
4、set无序集合,元素不可重复
5、zset有序集合,元素不可重复
使用场景:
1、在微服务分布式架构下,当多个服务同时访问一个共同资源时,会发生资源竞争
2、在高并发场景下,多个客户端同时发起请求访问同一个接口处理业务时
3、前端进入一个页面同时触发多个ajax请求后台插入数据时
方案一实现思路:
1、定义唯一的key
2、设置锁有效期、等待时间
3、利用redis的方法SETNX来判断值是否设置成功
4、如果设置成功则返回1表示已获取锁,继续处理业务,最后在finlly中释放锁
5、如果设置失败,则每隔0.5毫秒继续自循环判断等待时间,超过等待时间则返回0获取锁超时,未超过则重新设置值来获取锁
方案二实现思路:
1、通过lua脚本的方式实现CAS复合操作
setex:把set和expire命令合二为一作为一个原子操作
setnx:先判断key是否存在,不存在则设置值,存在则不做操作
1、memcached是一个内存数据库,通过键值对来存储,使用更加简单,目的是能够的提供高性能服务,响应都是毫秒级别,是多线程架构模式
2、memcached和redis都是键值对存储数据到内存中,redis支持更丰富的功能,如lua脚本、集合、哈希、快照等,memcached是多线程架构,redis是单线程,都是响应毫秒级别,都是为了能够提升系统性能而存在
1、mongoDB是一种非关系型数据库,以文档、集合概念,使用bson数据结构来存储数据,类似json格式
2、mongoDB提供即时查询、保留了索引底层基于B tree算法,redis没有这些功能,操作命令不一样