自定义博客皮肤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 267

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

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

2020-07-08 16:25:28 2055 1

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

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

2020-08-15 16:17:57 396

转载 Redis 面试题总结

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

2020-07-28 15:27:02 296

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

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

2020-06-30 16:52:57 232

空空如也

空空如也

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

TA关注的人

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