redisson

菜鸟刷面试题(三、Redis篇)

廉价感情. 提交于 2020-04-28 23:18:34
目录: redis是什么?都有哪些使用场景? redis有哪些功能? redis和memecache有什么区别? redis为什么是单线程的? 什么是缓存穿透?怎么解决? redis支持的数据类型有哪些? redis支持的java客户端都有哪些? jedis和 redisson 有哪些区别? 怎么保证缓存和数据库数据的一致性? redis持久化有几种方式? redis怎么实现分布式锁? redis分布式锁有什么缺陷? redis如何做内存优化? redis淘汰策略有哪些? redis是什么?都有哪些使用场景? 1、Redis是一款开源的、基于C语言编写的key value数据库,其数据读写基于内存,性能高。 2、Redis使用场景很多: 可作用于底层DB的缓存层 分布式锁 使用list做热点数据排行 GEO做地理位置统计 等等。。。。。。 redis有哪些功能? 数据持久化、事务、发布订阅消息、主从复制、集群、哨兵等等。 redis和memecache有什么区别? memecache目前 仅支持k/v类型 的数据存储,而redis支持的 存储方式更加丰富 。 memecache 挂掉了数据就没了 ,redis有 持久化 策略。 。。。。。。 redis为什么是单线程的? 我们首先要知道Redis是一个高效的key/value数据库,且 采用内存读写数据 。 那么既然是

【面试突击】-Redis常见面试题(二)

别来无恙 提交于 2020-04-28 23:18:19
1、什么是Redis?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。 比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。 另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 2、Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以持久化其数据 3

Springboot+SpringCloud项目脚手架

时间秒杀一切 提交于 2020-04-24 13:35:45
系统介绍 spring-cloud-plus 是以spring-cloud-alibaba为基础并整合一些常用框架的分布式基础开发平台。 项目以组件模块的方式构建,实现项目模块可插拔组装。工作中遇到的一些常用框架,我都会整合到此项目,并持续更新。 项目地址 https://gitee.com/gourd-hu/spring-cloud-plus https://github.com/hxnlyw/spring-cloud-plus 目标 成为一个简单易用、快速高效、功能丰富、安全稳定的分布式项目脚手架。 让每个人都可以独立、快速、高效地开发一套分布式项目! 技术架构图 技术栈 基础:springboot + springcloud 持久化:MybatisPlus 连接池:Druid 数据库:Mysql 项目构建:Maven API网关: Gateway 日志:Logback 注册、配置中心: Nacos 服务调用: Feign + Ribbon 熔断、降级:Sentinel 分布式事务:Seata 分布式锁:Redisson 鉴权: Shiro + jwt-token 缓存: Redis、springCache 工作流:Activiti 定时任务: Quartz 消息中间件:ActiveMq 文件操作:FastDFS、EasyExcel 搜索存储引擎:Elasticsearch

Java并发同步常用处理方法

怎甘沉沦 提交于 2020-04-24 01:51:11
synchronized jdk内置同步锁 synchronized同步互斥锁+通知等待模式 synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1)修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2)修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3)修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 4)修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。 AQS同步组件 1)CountDownLatch:闭锁,通过计数来保证线程是否需要一直阻塞 2)Semaphore:控制同一时间并发线程的数目 3)CyclicBarrier:和CountDownLatch相似,都能阻阻塞线程 4)ReentrantLock 5)Condition 6)Future、FutureTask 进程间同步互斥 /** * 进程间同步(FileLock文件锁,同时开启多个进程实例,若已获得锁的实例在执行,则后面的进程实例均只能等待,当然可以使用tryLock非阻塞模式) */ private void testFileLock() { File lockFile =

【转】Redis概念原理、redis面试

≡放荡痞女 提交于 2020-04-23 13:10:12
1.Redis基础教程学习 1.1.Redis数据库概述 1.1.1. 什么是Redis 1.1.2. Redis有哪些优缺点? 1.1.3. 为什么要用 Redis /为什么要用缓存? 1.1.4. 为什么要用 Redis 而不用 map/guava 做缓存? 1.1.5. Redis为什么这么快? 1.2.Redis数据类型 1.2.1.Redis有哪些数据类型? 1.2.2.Redis的应用场景 1.3.Redis持久化 1.3.1.什么是Redis持久化? 1.3.2.Redis 的持久化机制是什么?各自的优缺点? 1.3.3.如何选择合适的持久化方式? 1.3.4.Redis持久化数据和缓存怎么做扩容? 1.4.Redis过期键的删除策略 1.4.1.Redis的过期键的删除策略 1.4.2.Redis key的过期时间和永久有效分别怎么设置? 1.4.3.我们知道通过expire来设置key 的过期时间,那么对过期的数据怎么处理呢? 1.5.Redis内存相关 1.5.1.MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 1.5.2.Redis的内存淘汰策略有哪些? 1.5.3.Redis主要消耗什么物理资源? 1.5.4.Redis的内存用完了会发生什么? 1.5.5.Redis如何做内存优化? 1.6

基于Redisson实现分布式锁

自古美人都是妖i 提交于 2020-04-20 12:48:00
超卖现象一 :解决方式 1.扣除库存不在程序中进行,而在数据库中 2.向数据库传递库存增量,扣减1个库存,增量为-1 3.在数据库update语句计算库存,通过update行锁解决并发 超卖现象二:解决方案 1.校验库存,扣除库存统一加锁 2.使之成为原子操作 3.并发时,只有获得锁的线程才能校验,扣除库存 4.扣除库存结束后,释放锁 5.确保库存不会扣成负数 使用 redisson 实现分布式锁------------------------------------------------------start------------------------------------------------------------------------- <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.12.0</version> </dependency> @Autowired private RedissonClient redissonClient ; /** * 分布式锁【3】 编写业务代码 * 1、Redisson是基于Redis,使用Redisson之前,项目必须使用Redis * 2

Redis面试题,个个都是经典,希望有你想要的

白昼怎懂夜的黑 提交于 2020-04-15 08:59:49
【推荐阅读】微服务还能火多久?>>> 分享分享自己收藏的学习资料,有需要的朋友可以找我获取 根据自身面试经历整理以及不断收集的(珍藏版) 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> https://www.cnblogs.com/xiaogeng88/p/12692306.html 1、什么是Redis?简述它的优缺点? Redis的全称是:Remote Dictionary.Server,本质上是一个Key-Value类型的内存数据库,很像 memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘 上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的 Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限 制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。 比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高 性能的tag系统等等。 另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的 memcached来用。

redisson集群转载

若如初见. 提交于 2020-04-09 19:17:25
转载: https://www.jianshu.com/p/f302aa345ca8 参考: https://segmentfault.com/a/1190000016976564 前几天发的一篇文章《Redlock:Redis分布式锁最牛逼的实现》,引起了一些同学的讨论,也有一些同学提出了一些疑问,这是好事儿。本文在讲解如何使用Redisson实现Redis普通分布式锁,以及Redlock算法分布式锁的几种方式的同时,也附带解答这些同学的一些疑问。 Redis几种架构 Redis发展到现在,几种常见的部署架构有: 单机模式; 主从模式; 哨兵模式; 集群模式; 我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意的是,只有充分了解普通分布式锁是如何实现的,才能更好的了解Redlock分布式锁的实现,因为 Redlock分布式锁的实现完全基于普通分布式锁 。 普通分布式锁 Redis普通分布式锁这个大家基本上只了解,本文不打算过多的介绍,上一篇文章《Redlock:Redis分布式锁最牛逼的实现》也讲的很细,并且也说到了几个重要的注意点。 所以直接show you the code,毕竟talk is cheap。 redisson版本 本次测试选择redisson 2.14.1版本。 单机模式 源码如下: // 构造redisson实现分布式锁必要的Config

redis分布式锁

二次信任 提交于 2020-04-09 18:04:10
我感觉写的不错的一篇文章。 基于Redis实现分布式锁 前言 分布式锁一般有三种实现方式:1.数据库乐观锁;2、基于Redis的分布式锁;3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis的实现分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能正常加锁。 具有容错性。只要大部分的Redis节点,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是在同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码; < dependency > < groupId > redis.clients </ groupId > < artifactId > jedis </ artifactId > < version > 2.9.0 </ version > </ dependency > 加锁代码 正确姿势 先展示代码,再带大家慢慢解释为什么 public class RedisTool { private static final String LOCK_SUCCESS = "OK" ;

从头开始学Redisson--------分布式远程服务(Remote Service)

对着背影说爱祢 提交于 2020-04-09 04:23:11
一、Redisson使用远程服务 当前有两台服务器连接的是同一个Redisson中间件,这两台服务器叫它们A节点与B节点吧。A节点可以发布一些API接口,也实现了它们,并向Redisson服务中心注册。B节点向Redisson注册中心订阅这些API接口,因此它可以向Redisson服务器发送这些请求,这些请求最终会被注册中心转发到A节点。这样,B节点就能够通过Redisson注册中心与A节点通信,从而实现远程服务调用功能。 分布式远程服务(Remote Service)提供了两种类型的 RRemoteService 实例: 服务端(远端)实例 - 用来执行远程方法(工作者实例即worker instance). 例如 RRemoteService remoteService = redisson.getRemoteService(); SomeServiceImpl someServiceImpl = new SomeServiceImpl(); // 在调用远程方法以前,应该首先注册远程服务 // 只注册了一个服务端工作者实例,只能同时执行一个并发调用 remoteService.register(SomeServiceInterface.class, someServiceImpl); // 注册了12个服务端工作者实例,可以同时执行12个并发调用 remoteService