上一篇聊了Redis的主从复制以及实现原理,下面会在复制的基础上来说说Redis的高可用方案:哨兵机制 哨兵机制什么是哨兵机制在主从复制的模式下,主服务器宕机后,从服务器是不能自动转为主服务器的,只能手动进行故障转移 而哨兵机制(Sentinel)就是Redis的高可用解决方案,由一个或多个Sentinel实例组成的Sentinel系统用来管理主服务器以及连接的所有从服务器。可以实现故障发现、故障自动转移、配置中心和客户端通知 监控(Monitoring):Sentinel会不断地检查你的主服 ...
如何优雅的做数据校验-Hibernate Validator详细使用说明
数据校验是在平时的编码过程中常做的工作,在系统的各个层可能都要去实现一些校验逻辑,再去做业务处理。这些繁琐的校验与我们的业务代码在一块就会显得臃肿。而且这些校验通常是业务无关的。也是在工作中使用到Hibernate Validator,但却发现有人没有使用好它(竟然还能看到一些if else的校验代码…),所以在这里决定整理下关于Hibernate Validator的使用 Bean Validation 2.0(JSR 380)定义了用于实体和方法验证的元数据模型和API,Hibernate ...
Redis主从复制的配置和实现原理
Redis的持久化功能在一定程度上保证了数据的安全性,即便是服务器宕机的情况下,也可以保证数据的丢失非常少。通常,为了避免服务的单点故障,会把数据复制到多个副本放在不同的服务器上,且这些拥有数据副本的服务器可以用于处理客户端的读请求,扩展整体的性能 下面会介绍Redis的主从复制配置和实现原理,后续还会有Redis的高可用方案:哨兵机制(Sentinel)、分区集群(Cluster) 什么是主从复制我们可以通过slaveof <host> <port>命令,或者通过配置s ...
Redis持久化机制:RDB和AOF
Redis数据持久化Redis作为一个内存数据库,数据是以内存为载体存储的,那么一旦Redis服务器进程退出,服务器中的数据也会消失。为了解决这个问题,Redis提供了持久化机制,也就是把内存中的数据保存到磁盘当中,避免数据意外丢失 Redis提供了两种持久化方案:RDB持久化和AOF持久化,一个是快照的方式,一个是类似日志追加的方式 RDB快照持久化RDB持久化是通过快照的方式,即在指定的时间间隔内将内存中的数据集快照写入磁盘。在创建快照之后,用户可以备份该快照,可以将快照复制到其他服务器以创 ...
深入了解Redis底层数据结构
说明说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是Redis对外暴露的数据结构,用于API的操作,而组成它们的底层基础数据结构又是什么呢 简单动态字符串(SDS) 链表 字典 跳跃表 整数集合 压缩列表 Redis的GitHub地址https://github.com/antirez/redis 简单动态字符串(SDS) ...
装饰模式-为类动态添加职责
装饰模式定义 装饰模式(Decorator Pattern)- 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活 装饰模式也可以叫做包装器(Wrapper),可以给一个类或对象增加行为 通常有两种方式来给类或对象来增加行为: 继承机制:通过继承一个现有的类可以使得子类在拥有自己方法的同时还可以拥有父类的方法,但是这种方式是静态的,用户不能控制增加行为的方式和时机 关联机制:将一个对象嵌到另一个对象中,并由另一个对象来决定是否调用嵌入对象的行为来扩展自己的行为, ...
适配器模式-通过适配器来复用
适配器模式是一种结构型设计模式,适配器模式主要是来解决接口不兼容的问题,使得原本没有关系的类可以协同工作。就好像我们笔记本电脑的电源适配器,在电压110v-220v之间都是可以正常工作的(那么大一坨),这适配器的工作就是把外部不稳定的电压转化成笔记本电脑能稳定使用的直流电压 适配器模式定义 适配器模式(Adapter Pattern)- 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 使用适配器模式其实就是把一个接口或者类转换成其他 ...
模板方法模式-封装不变,扩展可变
模板方法模式是一种行为型设计模式,它比较简单,我们平时的编程中可能就经常用到了它 介绍定义 模板方法模式(Template Method Pattern)- 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 简单来说,就是把可变的部分(方法)放在子类中实现,把不可变的部分放在父类中实现 举个例子,假如你赚钱了买了个房子,交房之后是个毛坯需要装修,装修的流程是水电、泥工、木工、再买家具电器等,这时关于装修哪种风格有了不同意见,你 ...
Redis介绍、安装以及数据结构(操作命令)
Redis介绍什么是RedisRedis是用C语言开发的一个开源(BSD许可)的高性能键值对(key-value)内存数据库,可以用作数据库、缓存和消息中间件。它是一种NoSQL(NOT-Only Sql,泛指非关系型数据库)数据库 性能优秀,数据在内存中,读写速度非常快,支持并发10W QPS 单进程单线程,是线程安全的,采用IO多路复用 丰富数据类型:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets) 等 支持数据持久化 ...
建造者模式-一步步组装复杂的对象
介绍定义建造者模式是一种创建型模式,它的定义如下 建造者模式(Builder Pattern) - 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。又可以称为生成器模式 适用场景 隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果 多个部件都可以装配到一个对象中,但产生的运行结果不相同 产品类非常复杂或者产品类因为调 ...