自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 Redis实现分布式锁的正确姿势

1. 前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于Zookeeper的分布式锁。本篇详细介绍如何正确地实现Redis分布式锁。2. 分布式锁的实现要点为了确保分布式锁可用,我们至少需要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动释放锁,也能保证后续其他客户端能加锁。具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。解铃还须系铃人。

2020-07-17 23:34:26 98

转载 Redis性能优化的13条建议

Redis是基于单线程模型实现的,也就是Redis是使用一个线程来处理所有的客户端请求的,尽管Redis使用了非阻塞式IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是O(1)),但由于Redis是单线程执行的特点,因此它对性能的要求更加苛刻。缩短键值对的存储长度键值对的长度是和性能成反比的。...

2020-07-08 16:25:28 325

原创 【Java虚拟机】类(接口)初始化

类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。《Java虚拟机规范》严格规定了有且只有六种情况必须立即对类进行初始化(而加载、验证、准备自然需要在此之前开始):1)遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。能够生成这四条指令的典型Java代码场景有:使用new关键字实例化对象的时候。读取或设置一个类型的静态字段(被final修饰、已在编译器把结果放入常量

2020-08-15 16:17:57 36

转载 Redis 面试题总结

redis 简介简单来说redis就是一个数据库,不过与传统数据库不同的是redis的数据是存在内存的,所以读写速度非常快,因此redis被广泛应用于缓存方向。另外,redis也经常用来做分布式锁。redis提供了多种数据类型来支持不同的业务场景。除此之外,redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。为啥Redis那么快?Redis采用的是基于内存的单进程单线程模型的KV数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS。完全基于内存,绝大部分请求是纯粹

2020-07-28 15:27:02 119

原创 缓存穿透、缓存击穿、缓存雪崩、缓存热点和解决方案

文章目录缓存穿透缓存雪崩缓存击穿缓存穿透有大量的恶意清奇查询不存在的key,那么大并发请求直接去查db,这样很容易把数据库压垮解决方案:把key为空的也放到缓存使用布隆过滤器,把不存在的key值放到一个大的bitmap,下次请求直接回被过滤掉缓存雪崩大量缓存同时失效,高并发时请求直接打到db,导致数据库雪崩解决方案:分散存储过期时间,比如在过期时间基础上加随机值,1~10这样分散存储过期时间,很难再出现雪崩现象。缓存击穿一个key失效了,恰好大量请求过来查询,这样都会直接到数据库,导

2020-06-30 16:52:57 79

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除