- 第04课:基于 Redis 的分布式缓存实现及加固策略
Jin_Kwok
分布式中间件实践之路架构分布式中间件
本文将从Redis-Cluster搭建切入,详解集群的创建原理和加固策略。之后,分析集群所存在的几种可靠性问题并给出解决方案,最后,介绍一个集群运维软件的实现方案。1.Redis-Cluster搭建本节将介绍基于Redis和Lettuce搭建一个分布式缓存集群的方法。为了生动地呈现集群创建过程,我没有采用Redis集群管理工具redis-trib,而是基于Lettuce编写Java代码实现集群的创
- 内网安装redis+部署redis-cluster集群
仙女陈
redis
一、安装redisredis安装包下载地址:https://download.redis.io/releases/1.1解压编译并创建数据目录tarxzvfredis-6.2.10.tar.gz-C/usr/local/cd/usr/local/mvredis-6.2.10/rediscd/usr/local/redis/make#编译mkdir/usr/local/redis/data#创建存放
- rediss集群 三主三从集群模式
30醒悟的码农
redis
三主三从集群模式1)、新建redis集群目录:7001~7006工作目录【/app/soft/redis-cluster/目下】2)、在7001~7006目录下创建bin和conf目录,然后将/app/soft/redis/bin目录下的文件分别拷贝到7001~7006目录,然后在7001~7006目录conf文件夹创建redis.conf文件。修改配置文件:include/app/soft/re
- redis的sentinel模式故障演练
go4it
序本文主要研究一下redis的sentinel模式的failover启动docker-composeup这里使用redis-cluster的docker-compose文件进行演示master日志1:M12Sep06:42:02.159#WARNING:TheTCPbacklogsettingof511cannotbeenforcedbecause/proc/sys/net/core/somaxc
- spring boot以lettuce连接池整合redis-cluster(单机及集群版)
萧曵 丶
SpringRedislettuceSpringbootreids集群
文章目录一.添加相关pom依赖二.修改application.ymla.单机版:b.集群版:三.添加RedisConfig添加序列化方式以及缓存配置四.使用一.添加相关pom依赖commons依赖主要应用于单机版org.springframework.bootspring-boot-starter-data-redisorg.apache.commonscommons-pool2二.修改appli
- Redis迁移及redis-shake介绍
陶老师数据库
Redis迁移及redis-shake介绍1.Redis迁移介绍工作中有时会遇到需要把原Redis集群下线,迁移到另一个新的Redis集群的需求(如机房迁移,Redis上云等原因)。此时原Redis中的数据需要如何操作才可顺利迁移到一个新的Redis集群呢?本节简单介绍相关方法及一些工具。redis有主从架构及redis-cluster架构,架构不同,两者的迁移方法也是不相同的。1.1Redis主
- redis集群遇到的问题
Chen_yiy
本身参考:https://www.cnblogs.com/xifenglou/p/9173419.html遇到以下问题:redis的conf文件放置在对应的redis-cluster/redis01/redis.conf但是配置出现错误,只能启动一台服务image.png重新修改对应的配置文件即可2.在执行yuminstallrubyyuminstallrubygems命令后,需要注意要检查rub
- Redis-cluster集群(重点)
吃西瓜的的小青年
1.1哨兵模式的缺陷在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。我们知道只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,是不是就可以缓解写压力了呢?答:是的。这个就是redis-cluster集群模式。1.2Redis-cluster集群概念(1)由多个Redis服务器组成的分布式网络服务集群;(2)集群之中有多个Master主节点,每
- Redis-cluster集群
泷汰泱
端口号:7000-7005安装集群插件yuminstallrubyrubygems-y使用国内源gemsources-lgemsources-ahttp://mirrors.aliyun.com/rubygems/gemsources--removehttps://rubygems.org/gemsources-lgeminstallredis-v3.3.3集群节点准备cat>>/data/700
- Redis Cluster
HuaLuLemon
Redisredis数据库缓存
1、概念介绍官方网站:https://redis.io/topics/cluster-tutorial尽管可以使用哨兵主从集群实现可用性保证,但是这种实现方式每个节点的数据都是全量复制,数据存放量存在着局限性,受限于内存最小的节点,因此考虑采用数据分片的方式,来实现存储,这个就是redis-cluster。Rediscluster是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了r
- Redis-Cluster 与 Redis 集群的技术大比拼
一只牛博
#redisredis数据库缓存
欢迎来到我的博客,代码的世界里,每一行都是一个故事Redis-Cluster与Redis集群的技术大比拼前言概念与原理对比Redis-Cluster:基于哈希槽的分布式解决方案传统Redis集群:主从架构下的数据分片方式搭建与配置的异同Redis-Cluster搭建:哈希槽分配、节点配置等步骤传统Redis集群搭建:主从配置、数据分片策略等设置管理与维护的不同之处故障处理:Redis-Cluste
- linux redis-cluster ipv6方式
楠奕
LinuxbigDatalinuxredis运维
配置文件,具体字段的含义,可以参考其他文档。1.单个文件的配置信息redis_36380.confrequirepassPaas_2024port36380tcp-backlog511timeout0tcp-keepalive300daemonizeyessupervisednopidfile/data/paas/apps/aicache-redis/redis_36380.pidloglevel
- Redis-哨兵模式
u011411356
缓存redis
Redis软件安装Redis服务器:IP:10.2.111.183,IP:10.2.111.184。以下安装步骤基于服务器及IP规划妥当,本安装指南以上文中规划的IP进行安装,操作系统为LinuxRedis高可用->Redis-Sentinel(v2.8)支持高可用分布式->Redis-Cluster(v3.0)支持分布式什么是主从复制单机的问题:机器故障,容量瓶颈,QPS瓶颈作用:为数据提过多个
- 简单理解Redis-cluster的slot
小狼在IT
如果使用redis-cluster集群部署Redis,redis-cluster把所有的物理节点映射到[0-16383]slot上。这里有个理解误区,有初学者会想,这个slot是不是存储数据的点?就是只能存16383+1个键?实际并不是这样,这个slot只是对应节点(Redis服务)的一个存储范围(可以理解为这个Redis的别名)。比如,现在有3台Redis,分别给他们分配slot:image.p
- redis-cluster集群
DDYYmmm
redis数据库缓存
redis-cluster集群:redis3.0引入的分布式存储方案集群由多个node节点组成,redis数据分布在这些节点之中在集群之中分为主节点和从节点集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立即恢复集群模式按照数据分片:数据分区是集群的核心功能,每个
- redis 系列(二)- redis的持久化
黄二的NPE
打造高性能高可靠的Redis架构redis是内存数据库,利用持久化可以解决当redis服务器关机或者重启数据丢失的问题。利用主从,可以实现Redis读写分离与数据备份同步问题。利用哨兵模式,可以实现Redis中当某台机发生故障,会把主数据库自动切到某一台从服务器上去利用Redis-cluster,可实现不同key保存到不同redis服务器上去,保证某一台机不会内存过大。Redis持久化在使用Red
- k8s中Helm工具实践
dumplings。
Linux相关kubernetes容器云原生
k8s中Helm工具实践1)安装redis-cluster先搭建一个NFS的SC(只需要SC,不需要pvc),具体步骤此文档不再提供,请参考前面相关章节。下载redis-cluster的chart包helmpullbitnami/redis-cluster--untar#会下载一个目录下来修改values.yamlcdredis-clustervivalues.yaml#定义sc和密码storag
- redis集群节点伸缩
仗剑走天涯_59
在搭建了redis集群的情况下,这里是6个节点3主3从。在该集群下增加、删除节点。一、原始集群(6节点3主3从):(1)启动集群:[root@bhz004~]#/usr/local/redis/bin/redis-server/usr/local/redis-cluster/7001/redis.conf[root@bhz004~]#/usr/local/redis/bin/redis-serve
- shell 之自定义监控redis cluster集群模版
meijinmeng
监控系统及应用shell基础及实践
1.需求:用shell写一个脚本来监控redis-cluster测试环境的基本指标。2.现实:用python已实现,但是python代码过多不够简洁,所有改用shell来做监控脚本的模版。3.展示:garafana/zabbix4.脚本如下#!/bin/bashREDISCLI="/usr/local/bin/redis-cli"HOST=$(ipaddr|awk'/^[0-9]+:/{};/in
- redis-cluster集群搭建(3主3从),并使用springboot整合
头鼎3根毛
redis数据库缓存
一、集群搭建1.准备3台服务器这里我采用了3台云服务器。2.为三台服务器安装好redis没有安装好redis的这里可以参考我以前写的Linux安装Redis6.0.6_小菜学Java的博客-CSDN博客并执行:mkdir-p/myredis/cluster3.新建6个独立的redis实例服务服务器A:vim/myredis/cluster/redisCluster6381.confvim/myre
- redis cluster三主三从搭建
liwenchao1995
redis数据库缓存java开发语言
目录rediscluster三主三从搭建原生部署cluster集群安装C/C++环境redis下载解压、编译创建Redis相关工作目录(目录可自定义)复制redis配置文件修改Redis配置文件启动Redis创建RedisCluster验证集群Redis-Cluster故障恢复读取key的小细节docker部署cluster集群提前编辑好配置文件创建文件夹一台机器三台机器在机器上分别启动redis
- redis-cluster 启动集群与关闭集群
滴流乱转的小胖子
启动集群///Users/izaodao/Documents/redis-cluster目录下,自己写个启动集群脚本#redisAllStart.shcd/Users/izaodao/Documents/redis-cluster./src/redis-server./7000/redis.conf./src/redis-server./7001/redis.conf./src/redis-ser
- Redis集群的搭建
onedayRen
rediesrediesredies集群
1.1Redis集群相关概念1.1.1redis-cluster架构图redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护nodeslotvalueRedis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个
- docker-compose搭建redis集群
xiongsd
环境搭建redisdocker缓存
一、先制作redis配置模板命名:vi/data/software/redis-cluster/redis-conf.tplport${PORT}requirepassb1234masterauthb1234protected-modenocluster-enabledyescluster-config-filenodes.confcluster-node-timeout5000cluster-a
- redis-cluster集群
91888888
redis数据库缓存
redis-cluster集群是redis3.0引入的分布式存储方案集群由多个noede节点组成,redis数据分布在节点之中在进群中也分主节点和从节点集群模式中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立刻恢复集群模式按照数据分片1、数据分区:集群的核心功能,每个主都
- redis 集群
weixin_51694382
redis数据库缓存
redis-cluster集群:redis3.0引入的分布式存储方案集群由多个node节点组成,redis数据是分布在这写节点之中。在集群之中分为主节点和从节点。集群自带哨兵模式集群模式当中,主从一一对应,数据的写入和读取于主从模式一样,主负责写,从只能读。集群模式自带哨兵模式,可用自带实现故障切换,但是在故障切换完成之前,整个集群都不可用。切换完毕之后,集群会理科恢复集群模式按照数据分片:1,数
- redis-cluster集群(目的:高可用)
咩咩230
redis数据库java
1、特点集群由多个node节点组成,redis数据分布在这些节点中,在集群中分为主节点和从节点,一个主对应一个从,所有组的主从形成一个集群,每组的数据是独立的,并且集群自带哨兵模式2、工作原理集群模式中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读;集群模式自带哨兵模式,可以自动实现故障切换,但在故障切换完成之前,整个集群不可用,切换完毕后,集群立刻恢复3、集群模式按照数据分片(
- redis之cluster集群
海德Hyde
redis数据库缓存
1、redis-cluster集群:redis3.0引入的分布式存储方案2、集群:由多个node节点组成,redis数据分布在这些节点之中(1)在集群之中也分主节点和从节点(2)自带哨兵模式3、redis-cluster集群的数据流向(1)集群模式中,主从一一对应,数据写入和读取与主从复制一样,主负责写,从只能读(2)集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将
- redis-cluster集群
Lad1129
redis数据库缓存
redis-cluster集群redis3.0引入分布式存储方案集群是由多个node节点组成,redis的数据分布在这些节点当中。在集群当中也分为主节点和从节点。集群架构图工作模式集群模式当中是一一对应的,主有数据的写入和读取功能,从只有读的功能。集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用。切换完毕之后,集群会立刻恢复集群的流程1、集群自带主从和哨兵2、
- redis-cluster集群部署及测试(超详细)
浴火成诗
linux应用服务部署redis集群redis集群部署及测试
摘抄Redis-Cluster采用无中心结构:所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。节点的fail是通过集群中超过半数的节点检测失效时才生效。客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。工作方式在redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是
- java类加载顺序
3213213333332132
java
package com.demo;
/**
* @Description 类加载顺序
* @author FuJianyong
* 2015-2-6上午11:21:37
*/
public class ClassLoaderSequence {
String s1 = "成员属性";
static String s2 = "
- Hibernate与mybitas的比较
BlueSkator
sqlHibernate框架ibatisorm
第一章 Hibernate与MyBatis
Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。
MyBatis 参考资料官网:http:
- php多维数组排序以及实际工作中的应用
dcj3sjt126com
PHPusortuasort
自定义排序函数返回false或负数意味着第一个参数应该排在第二个参数的前面, 正数或true反之, 0相等usort不保存键名uasort 键名会保存下来uksort 排序是对键名进行的
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8&q
- DOM改变字体大小
周华华
前端
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
- c3p0的配置
g21121
c3p0
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的下载地址是:http://sourceforge.net/projects/c3p0/这里可以下载到c3p0最新版本。
以在spring中配置dataSource为例:
<!-- spring加载资源文件 -->
<bean name="prope
- Java获取工程路径的几种方法
510888780
java
第一种:
File f = new File(this.getClass().getResource("/").getPath());
System.out.println(f);
结果:
C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin
获取当前类的所在工程路径;
如果不加“
- 在类Unix系统下实现SSH免密码登录服务器
Harry642
免密ssh
1.客户机
(1)执行ssh-keygen -t rsa -C "
[email protected]"生成公钥,xxx为自定义大email地址
(2)执行scp ~/.ssh/id_rsa.pub root@xxxxxxxxx:/tmp将公钥拷贝到服务器上,xxx为服务器地址
(3)执行cat
- Java新手入门的30个基本概念一
aijuans
javajava 入门新手
在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。 Java概述: 目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合
- Memcached for windows 简单介绍
antlove
javaWebwindowscachememcached
1. 安装memcached server
a. 下载memcached-1.2.6-win32-bin.zip
b. 解压缩,dos 窗口切换到 memcached.exe所在目录,运行memcached.exe -d install
c.启动memcached Server,直接在dos窗口键入 net start "memcached Server&quo
- 数据库对象的视图和索引
百合不是茶
索引oeacle数据库视图
视图
视图是从一个表或视图导出的表,也可以是从多个表或视图导出的表。视图是一个虚表,数据库不对视图所对应的数据进行实际存储,只存储视图的定义,对视图的数据进行操作时,只能将字段定义为视图,不能将具体的数据定义为视图
为什么oracle需要视图;
&
- Mockito(一) --入门篇
bijian1013
持续集成mockito单元测试
Mockito是一个针对Java的mocking框架,它与EasyMock和jMock很相似,但是通过在执行后校验什么已经被调用,它消除了对期望 行为(expectations)的需要。其它的mocking库需要你在执行前记录期望行为(expectations),而这导致了丑陋的初始化代码。
&nb
- 精通Oracle10编程SQL(5)SQL函数
bijian1013
oracle数据库plsql
/*
* SQL函数
*/
--数字函数
--ABS(n):返回数字n的绝对值
declare
v_abs number(6,2);
begin
v_abs:=abs(&no);
dbms_output.put_line('绝对值:'||v_abs);
end;
--ACOS(n):返回数字n的反余弦值,输入值的范围是-1~1,输出值的单位为弧度
- 【Log4j一】Log4j总体介绍
bit1129
log4j
Log4j组件:Logger、Appender、Layout
Log4j核心包含三个组件:logger、appender和layout。这三个组件协作提供日志功能:
日志的输出目标
日志的输出格式
日志的输出级别(是否抑制日志的输出)
logger继承特性
A logger is said to be an ancestor of anothe
- Java IO笔记
白糖_
java
public static void main(String[] args) throws IOException {
//输入流
InputStream in = Test.class.getResourceAsStream("/test");
InputStreamReader isr = new InputStreamReader(in);
Bu
- Docker 监控
ronin47
docker监控
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路。 1、关于监控的内容 监控宿主机本身
监控宿主机本身还是比较简单的,同其他服务器监控类似,对cpu、network、io、disk等做通用的检查,这里不再细说。
额外的,因为是docker的
- java-顺时针打印图形
bylijinnan
java
一个画图程序 要求打印出:
1.int i=5;
2.1 2 3 4 5
3.16 17 18 19 6
4.15 24 25 20 7
5.14 23 22 21 8
6.13 12 11 10 9
7.
8.int i=6
9.1 2 3 4 5 6
10.20 21 22 23 24 7
11.19
- 关于iReport汉化版强制使用英文的配置方法
Kai_Ge
iReport汉化英文版
对于那些具有强迫症的工程师来说,软件汉化固然好用,但是汉化不完整却极为头疼,本方法针对iReport汉化不完整的情况,强制使用英文版,方法如下:
在 iReport 安装路径下的 etc/ireport.conf 里增加红色部分启动参数,即可变为英文版。
# ${HOME} will be replaced by user home directory accordin
- [并行计算]论宇宙的可计算性
comsci
并行计算
现在我们知道,一个涡旋系统具有并行计算能力.按照自然运动理论,这个系统也同时具有存储能力,同时具备计算和存储能力的系统,在某种条件下一般都会产生意识......
那么,这种概念让我们推论出一个结论
&nb
- 用OpenGL实现无限循环的coverflow
dai_lm
androidcoverflow
网上找了很久,都是用Gallery实现的,效果不是很满意,结果发现这个用OpenGL实现的,稍微修改了一下源码,实现了无限循环功能
源码地址:
https://github.com/jackfengji/glcoverflow
public class CoverFlowOpenGL extends GLSurfaceView implements
GLSurfaceV
- JAVA数据计算的几个解决方案1
datamachine
javaHibernate计算
老大丢过来的软件跑了10天,摸到点门道,正好跟以前攒的私房有关联,整理存档。
-----------------------------华丽的分割线-------------------------------------
数据计算层是指介于数据存储和应用程序之间,负责计算数据存储层的数据,并将计算结果返回应用程序的层次。J
&nbs
- 简单的用户授权系统,利用给user表添加一个字段标识管理员的方式
dcj3sjt126com
yii
怎么创建一个简单的(非 RBAC)用户授权系统
通过查看论坛,我发现这是一个常见的问题,所以我决定写这篇文章。
本文只包括授权系统.假设你已经知道怎么创建身份验证系统(登录)。 数据库
首先在 user 表创建一个新的字段(integer 类型),字段名 'accessLevel',它定义了用户的访问权限 扩展 CWebUser 类
在配置文件(一般为 protecte
- 未选之路
dcj3sjt126com
诗
作者:罗伯特*费罗斯特
黄色的树林里分出两条路,
可惜我不能同时去涉足,
我在那路口久久伫立,
我向着一条路极目望去,
直到它消失在丛林深处.
但我却选了另外一条路,
它荒草萋萋,十分幽寂;
显得更诱人,更美丽,
虽然在这两条小路上,
都很少留下旅人的足迹.
那天清晨落叶满地,
两条路都未见脚印痕迹.
呵,留下一条路等改日再
- Java处理15位身份证变18位
蕃薯耀
18位身份证变15位15位身份证变18位身份证转换
15位身份证变18位,18位身份证变15位
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 201
- SpringMVC4零配置--应用上下文配置【AppConfig】
hanqunfeng
springmvc4
从spring3.0开始,Spring将JavaConfig整合到核心模块,普通的POJO只需要标注@Configuration注解,就可以成为spring配置类,并通过在方法上标注@Bean注解的方式注入bean。
Xml配置和Java类配置对比如下:
applicationContext-AppConfig.xml
<!-- 激活自动代理功能 参看:
- Android中webview跟JAVASCRIPT中的交互
jackyrong
JavaScripthtmlandroid脚本
在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之:
1 JAVASCRIPT脚本调用android程序
要在webview中,调用addJavascriptInterface(OBJ,int
- 8个最佳Web开发资源推荐
lampcy
编程Web程序员
Web开发对程序员来说是一项较为复杂的工作,程序员需要快速地满足用户需求。如今很多的在线资源可以给程序员提供帮助,比如指导手册、在线课程和一些参考资料,而且这些资源基本都是免费和适合初学者的。无论你是需要选择一门新的编程语言,或是了解最新的标准,还是需要从其他地方找到一些灵感,我们这里为你整理了一些很好的Web开发资源,帮助你更成功地进行Web开发。
这里列出10个最佳Web开发资源,它们都是受
- 架构师之面试------jdk的hashMap实现
nannan408
HashMap
1.前言。
如题。
2.详述。
(1)hashMap算法就是数组链表。数组存放的元素是键值对。jdk通过移位算法(其实也就是简单的加乘算法),如下代码来生成数组下标(生成后indexFor一下就成下标了)。
static int hash(int h)
{
h ^= (h >>> 20) ^ (h >>>
- html禁止清除input文本输入缓存
Rainbow702
html缓存input输入框change
多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。
如果不想让浏览器缓存input的值,有2种方法:
方法一: 在不想使用缓存的input中添加 autocomplete="off";
<input type="text" autocomplete="off" n
- POJO和JavaBean的区别和联系
tjmljw
POJOjava beans
POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规
- java中单例的五种写法
liuxiaoling
java单例
/**
* 单例模式的五种写法:
* 1、懒汉
* 2、恶汉
* 3、静态内部类
* 4、枚举
* 5、双重校验锁
*/
/**
* 五、 双重校验锁,在当前的内存模型中无效
*/
class LockSingleton
{
private volatile static LockSingleton singleton;
pri