编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的代码重用性、可读性、可扩展性、可靠性,使程序呈现高内聚,低耦合的特性。

  1. 代码重用性(相同功能的代码,不用多次编写)
  2. 可读性(编程规范性,便于理解)
  3. 可扩展性(需要增加新功能,非常的方便)
  4. 可靠性(增加新的功能后,对原有的功能不影响)
  5. 高内聚(模块内部非常紧密)、低耦合(功能之间依赖性低)

设计模式包含了面向对象的精髓,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”

Java设计模式

上篇日志简单的使用了角色授予和权限授予,接下来,将通过数据库来管理用户对应的权限与角色。

权限表结构设计方式

第一种权限设计模型,权限和角色都考虑。数据库设计中,用户与角色是多对多的关系,角色与权限也是多对多的关系,而权限与资源是一对一的关系。它们的关系如下图所示。

>
JavaSpringBootShiro

前篇日志了解到 Shiro 是什么,Shiro 可以做什么,以及 Shiro 结合 ini 文件来做一个简单的权限管理的示例。

接下来,就是将 Shiro 与 SpringBoot 进行整合,然后结合数据库对用户进行身份认证。

整合的基本思路

在未整合 SpringBoot 之前,所有的数据都是在文件中,所以要读取 ini 配置文件,我们一般的步骤如下图所示。

>
JavaSpringBootShiro

Shiro 介绍

权限体系在现代软件应用中有着非常重要的地位。一个应用如果没有权限体系都会显着这个系统“特别不安全”,无论是传统的 MIS 系统还是互联网项目出于对业务数据和应用自身的安全,都会设置自己的安全策略。

Apache Shiro 是一个强大的并且简单使用的 Java 权限框架。主要应用认证(Authentication)、授权(Authorization)、加密(Cryptography)和 Session Manager。Shiro 具有简单易懂的 API,使用Shiro 可以快速并且简单的应用到任何应用中,无论是从最小的移动 app 到最大的企业级 web 应用都可以使用。

>
JavaShiro

哨兵模式概述

就是主节点宕机了,然后通过“哨兵”来自动从很多从节点中自动选出一个主节点来。从 Redis 2.8 开始就正式提供了 Sentinel (哨兵)架构来解决“手动切换为主服务器”问题。

哨兵模式是一种特殊的模式,首先 Redis 提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待 Redis 服务器响应,从而监控运行的多个 Redis 实例。

image-20211121081433399

它是根据投票的方式,得出的投票数自动将从库转换为主库。

>
Redis

主从复制伪集群搭建

这里的伪集群配置的是 1 主 2 从。

1、复制 3 个配置文件,配置文件名分别为 redis-master-6379.confredis-slave-6380.confredis-slave-6381.conf

2、修改三个配置文件的端口号、日志文件和 rdb 文件。

redis-master-6379.conf 需要配置内容如下

pidfile /var/run/redis-slave-6379.pid
port 6379
logfile "redis-master-6379.log"
dbfilename redis-master-6379.rdb

redis-slave-6380.conf 需要配置内容如下

>
redis

I/O 流是什么

I:Input、O:Output,即输入输出。

一个文件,从磁盘到内存,叫输入。从内存到磁盘,叫输出。通过 IO 可以完成磁盘文件的读和写。

以内存为参照物就好理解了。

i/o

流是什么,流可以认为是一种数据流向。从磁盘到内存,从内存到磁盘,这就是流向。

Java

前言

HashMap 在我们的实际开发中是非常频繁使用到的一个类,也非常的清楚它保存的是一组键值对。不过,HashMap 在面试当中也是非常高频面试的一个点。经过我的了解及研究,我也开始写一遍日志,来展现我对 HashMap 的一些看法。

在了解 HashMap 之前,来聊聊哈希表是什么吧。

>
Java数据结构

介绍

Redis 发布订阅(pub/sub)是一种消息通信模式︰发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道,其发布与订阅的流程如下图所示。

img

当消息发布者发送一旦发送,已经订阅的消息订阅者就会收到信息。

>
Redis

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。 对此,Redis 提供了持久化功能!

Redis 数据持久化共有两种数据,分别是 RDB 和 AOF。接下来看看那这两种持久化方式有什么异同。

>
Redis