个人简介

Echo Blog


江湖无名 安心练剑
  • Mybatis Cache
    Mybatis 缓存 概念 MyBatis的缓存分为一级缓存和二级缓存,两种缓存的缓存粒度是一样的,都是对应一条sql查询语句,但是二者的生命周期是不一样的,一级缓存的生命周期是SqlSession对象的使用期间,随着SqlSession对象的死亡而消失; 二级缓存的生命周期是同 MyBatis 应用一样长的。 一级缓存 官方配置 开启情况 默认情况下是没有开启缓存的,除了局部...
    2018-09-08 03:11:06 | Cache
  • java 从零实现 redis 分布式锁
    点赞再看,已成习惯。 为什么需要分布式锁 在 jdk 中为我们提供了加锁的方式: (1)synchronized 关键字 (2)volatile + CAS 实现的乐观锁 (3)ReadWriteLock 读写锁 (4)ReenTrantLock 可重入锁 等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。 但是在分布式系统中,上面的锁就...
    2018-09-08 03:07:16 | Distributed
  • Redis 分布式锁 redis lock
    为什么需要分布式锁 在 jdk 中为我们提供了加锁的方式: (1)synchronized 关键字 (2)volatile + CAS 实现的乐观锁 (3)ReadWriteLock 读写锁 (4)ReenTrantLock 可重入锁 等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。 但是在分布式系统中,上面的锁就统统没用了。 我们想要解决分布式系...
    2018-09-08 03:07:16 | Distributed
  • ZooKeeper 分布式锁
    Zookeeper Zookeeper ZooKeeper的架构通过冗余服务实现高可用性。 因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。 ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务,更新是全序的。 系统架构 上图为系统架构,左边区域表示...
    2018-09-08 02:30:55 | Distributed
  • SQL 分布式锁
    实现方式 基于数据库的锁实现也有两种方式,一是基于数据库表,另一种是基于数据库排他锁。 数据库表的增删 思路 具体使用的方法,当需要锁住某个方法时,往该表中插入一条相关的记录。这边需要注意,方法名是有唯一性约束的,如果有多个请求同时提交到数据库的话,数据库会保证只有一个操作可以成功,那么我们就可以认为操作成功的那个线程获得了该方法的锁,可以执行方法体内容。 执行完毕,需要delet...
    2018-09-08 02:14:05 | Distributed
  • Go Lang-02-内存分配器
    内存分配器一直是性能优化的重头戏,其结构复杂、内容抽象,涉及的数据结构繁多,相信很多人都曾被它搞疯了。 本文将从内存的基本知识入手,到一般的内存分配器,进而延伸到 Go 内存分配器,对其进行全方位深层次的讲解,希望能让你对进程内存管理有一个全新的认识。 物理内存 VS 虚拟内存 在研究内存分配器之前,让我们先看一下物理内存和虚拟内存的背景知识。 剧透一下,内存分配器实际上操作的不是物...
    2018-09-07 01:51:23 | Lang
  • Go Lang
    Go Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. Hello World 下载 本次测试环境为 macos,选择了 *.dmg 直接下载安装即可。 下载地址 测试 $ go version go ve...
    2018-09-07 01:51:23 | Lang
  • Redis Spring
    Spring 使用 spring 中的缓存。 例子 User.java 用于测试的实体。 public class User { private Long id; private String name; //Getter & Setter //toString() } UserService.java 用...
    2018-09-06 23:44:19 | Cache