- 博客(48)
- 收藏
- 关注
原创 Redis集群详解
而在中间增加一层哈希槽,可以把数据和节点解耦,key通过Hash计算,只需要关心映射到了哪个哈希槽,然后再通过哈希槽和节点的映射表找到节点,相当于消耗了很少的CPU资源,不但让数据分布更均匀,还可以让这个映射表变得很小,利于客户端和服务端保存,节点之间交换信息时也变得轻量。Redis会自动把这些槽平均分布在集群实例上。当客户端把一个键值对的操作请求发给一个实例时,如果这个实例上并没有这个键值对映射的哈希槽,那么,这个实例就会给客户端返回下面的MOVED命令响应结果,这个结果中就包含了新实例的访问地址。
2025-02-11 09:53:25
1060
原创 手写Redis分布式锁
指同一个线程可以多次获取同一个锁,而不会导致死锁或其他线程无法获取该锁的情况,可重入锁是一种特殊的锁,它允许一个线程在已经持有该锁的情况下,再次获取(或重入)该锁,而不会产生冲突或死锁,synchronized和ReentrantLock就是可重入性锁。当线程拥有锁之后,往后再遇到加锁⽅法,直接将加锁次数加 1,然后再执⾏⽅法逻辑。退出加锁⽅法之后,加锁次数再减 1,当加锁次数为 0 时,锁才被真正的释放。可以看到可重⼊锁最⼤特性就是计数,计算加锁的次数。
2025-02-11 09:51:57
693
原创 Redis哨兵机制详解
Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
2025-02-10 09:39:16
776
原创 Redis主从架构同步原理
有了AOF和RDB,如果Redis发生了宕机,它们可以分别通过回放日志和重新读入RDB文件的方式恢复数据,从而保证尽量少丢失数据,提升可靠性。但是如果Redis实例宕机了,就无法提供服务了。既然⼀台宕机了⽆法提供服务,那多台呢?是不是就可以解决了。Redis 提供了主从模式,通过主从复制,将数据冗余⼀份复制到其他 Redis 服务器。前者称为主节点 (master),后者称为从节点 (slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台 Redis 服务器都是主节点;
2025-02-10 09:36:36
1163
1
原创 Redis持久化机制详解
RDB(内存快照)是Redis DataBase的缩写,所谓内存快照,就是指内存中的数据在某一个时刻的状态记录。这就类似于照片,当你给朋友拍照时,一张照片就能把朋友一瞬间的形象完全记下来。对Redis来说,它实现类似照片记录效果的方式,就是把某一时刻的状态以文件的形式写到磁盘上,也就是快照。即使宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。在做数据恢复时,我们可以直接把RDB文件读入内存,很快地完成恢复。RDB保存的是dump.rdb文件。
2025-02-09 18:07:29
1205
原创 Windows11下载、安装和配置JDK(包含多个版本的JDK配置)
双击打开安装包 -> 选择下一步 -> 选择安装路径(注意不要安装在带有中文的路径下)->修改完路径后点击下一步->安装完成。右键window底部菜单栏的window图标 -> 选择系统 -> 点击高级系统设置->点击高级页签->点击右下角的环境变量。检验安装是否成功,打开cmd,输入java -version命令并回车,如果出现以下信息,说明安装成功。关闭之前所有的cmd,重新打开一个cmd,输入java -version,如果版本更改了,说明成功了。新建一个变量:JAVA_17(第二个JDK版本)
2024-03-02 23:31:14
2164
原创 Nacos环境搭建 -- 服务注册与发现
Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,能快速实现动态服务发现、服务配置、服务元数据及流量管理。
2024-03-02 11:00:58
1540
原创 如何解决缓存和数据库的数据不一致问题
数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。
2024-02-16 20:25:41
1894
1
原创 多线程基础
单核CPU内核,同一时刻只能被一个线程使用。为了提升CPU利用率,CPU采用了时间片算法将CPU时间片轮流分配给多个线程,每个线程分配了一个时间片(几十毫秒/线程),线程在时间片内,使用CPU执行任务。当时间片用完后,线程会被挂起,然后把 CPU 让给其它线程。线程再次运行时,系统是怎么知道线程之前运行到哪里?CPU切换前会把当前任务状态保存下来,用于下次切换回任务时再次加载。任务状态的保存及再加载的过程就叫做上下文切换。任务状态信息保存在哪里呢?
2024-02-07 16:20:42
2165
2
原创 MacBook Pro docker 安装rabbitmq
1、搜索rabbitmq镜像docker search rabbitmq:management2、拉取镜像docker pull rabbitmq:management3、运行镜像docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 docker.io/rabbitmq:management4、访问,默认访问账户:guest 密码:guesthttp://localhost:156725、dokc.
2020-12-22 17:03:29
239
原创 docker 安装 spring cloud nacos
1、下载nacosdocker pull nacos/nacos-server:1.2.02、查看docker下镜像版本 执行 docker images3、执行docker镜像生成启动容器 执行下面的命令docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server:1.2.0参数解析:run 启动运行容器 --env 配置环境 MODE=standalong 单节点 、MO..
2020-06-05 11:20:47
269
原创 docker 安装 maven nexus(2.x) 私服
1、下载nexus2.xdocker pull sonatype/nexus:2.14.82、将容器内部/nexus-data挂载到主机/data/nexus2/nexus-data目录docker run -d -p 9080:8081 --name nexus --restart=always -v /data/nexus2/nexus-data:/nexus-data sonatype/nexus:2.14.83、查看日志docker logs -f nexus
2020-06-04 17:36:53
784
原创 SpringBoot 实战 | 集成 Swagger2
什么是Swagger2 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger的优点 1、文档自动更新 2、可以直接测试文档 3、易于管理,一次配置即可使用 4、接口返回结果明确,包括数据类型、状态码、错误信息。集成步骤 首先创建一个...
2019-12-16 21:23:49
188
原创 java策略模式
定义 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。适用场景系统有很多类,而他们的区别仅仅在于他们的行为不同 一个系统需要动态地在几种算法中选择一种优点开闭原则 (面向扩展开发,面向修改关闭) 避免使用多重条件转移语句(if...else) 提高算法的保密性和安全性(客户端只知...
2019-12-07 18:28:21
153
原创 centos7 docker 安装redis
1、新建redis文件夹mkdir redis2、拉取redis镜像(进去redis文件夹)docker pull redis:latest3、查看镜像docker images4、docker启动redisdocker run --name redis -p 6379:6379 -d --restart=always redis:latest redis-se...
2019-01-16 10:59:08
1528
原创 centos 7安装 nginx
1、更新yumyum update2、安装依赖yum install gcc-c++yum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel3、进入到 /usr/local/src目录下载nginxwget http:/...
2018-11-11 13:09:40
195
原创 docker 安装 nginx
1、首先拉取nginx镜像docker pull nginx2、查看nginx镜像的配置、日志文件的位置,以便挂载文件。3、找到镜像中nginx.conf、default.conf、html、log的位置nginx.confdefault.confhtmllogexit退出容器4、挂载文件在系统中创建挂载源文件和文件夹mkdir ...
2018-11-08 20:45:54
200
原创 Docker下安装mysql
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7命令解析:--name:容器名--p:映射宿主主机端口-v:挂载宿主目录到容器目录-e:设置环境变量,此处指定root密码-d:后台运行容器...
2018-10-28 20:59:23
185
原创 Centos 7 安装 Docker
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。一、安装Docker Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。 ...
2018-10-28 20:52:28
295
原创 the import cannot be resolved
clean项目,重新编译项目。eclipse --> Project --> clean
2018-09-03 15:09:48
788
原创 redis序列化java8 LocalDateTime
org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Can not construct instance of java.time.LocalDateTime: no suitable constructor found, can not deserialize from ...
2018-09-03 11:44:20
800
原创 第一个Netty程序——构建和运行Echo服务器和客户端
在构建之前,需要安装开发环境:JDK和Apache Maven以及IDE。pom文件:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4...
2018-06-03 15:17:05
552
原创 第一个Netty程序——编写Echo客户端
Echo客户端:①连接到服务器②发送一个或多个消息③对于每个消息,等待病接收从服务器返回的相同的消息④关闭客户端通过ChannelHandler实现客户逻辑package netty.client;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelHan...
2018-06-03 15:05:44
357
原创 第一个netty程序——编写Echo服务器
所有的Netty服务器都需要一下两部分:①至少一个ChannelHandler——该组件实现了服务器对从客户端接收的数据的处理,即它的业务逻辑。②引导——这是配置服务器的启动代码。至少,它会将服务器绑定到连接请求的端口上。因为Echo服务器会影响传入的消息,所以它需要ChannelInboundHandler接口,用来定义响应入站事件的方法。这个简单的应用程序只需要用到少量的这些方法,所以继承CH...
2018-06-03 15:00:55
1503
原创 echarts 柱状图页面代码(备忘)
发票数据统计 .search_panel{ margin-left : 80px; } 开票时间:搜索清空 $(function(){$(".starttime2").datetimepick
2017-08-29 14:26:11
677
转载 windows 下redis在后台运行
1. 进入 DOS窗口2. 在进入Redis的安装目录3. 输入:redis-server --service-install redis.windows.conf --loglevel verbose ( 安装redis服务 )4. 输入:redis-server --service-start ( 启动服务 )5. 输入:redis-server --se
2017-06-13 21:43:23
6376
原创 前台传过来的json数据,解析request
/*** 解析前台获得的交互数据* @param request* @return* @throws IOException*/public static JSONObject getJsonObject(HttpServletRequest request) throws IOException{String resultStr = ""; Stri
2017-04-13 20:11:42
3741
原创 遍历xml并把结果放到map中
/*** 遍历解析xml* @param infoXML* @return*/public static Map doXml(String infoXML) { Document document; Map map = new HashMap(); try { document =
2017-04-10 19:34:46
1454
1
原创 判断回文串
package suanfa;import java.util.Scanner;public class Palindrome {public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.println("输入一个字符串: ");St
2017-03-17 20:27:41
324
原创 Spring4整合MyBatis3(5)
jsp页面:fkbookapp/WebContent/WEB-INF/content/loginForm.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>登录界面登录页面 ${requestScope.message}
2017-03-16 18:41:25
403
原创 Spring4整合MyBatis3(4)
控制层功能实现fkbookapp/src/org/fkit/controller/FormController.javapackage org.fkit.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVaria
2017-03-16 18:38:18
442
原创 Spring4整合MyBatis3(3)
fkbookapp/src/org.fkit.mapper/UserMapper.javapackage org.fkit.mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.fkit.domain.User;public in
2017-03-16 18:09:00
377
原创 Spring4整合MyBatis3(2)
fkbookapp/WebContent/WEB-INF/web.xml<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jav
2017-03-16 18:00:09
288
原创 Spring4整合MyBatis3 (1)
开发环境配置:1.安装jdk8 2.安装eclipse 3.安装Tomcat8 4.安装MySql5准备数据库资源:#创建用户表create table tb_user(id int primary key auto_increment,#idloginname varchar(50) unique, #登录名 邮箱 PASSWORD VARCHAR
2017-03-16 17:44:10
642
原创 选择排序算法
package suanfa;public class SelectSort {static final int SIZE=10;public static void selectSort(int[] a){int index,temp;for(int i=0;iindex=i;for(int j=i+1;jif(a[j]index=j;}}
2017-03-15 12:31:59
219
原创 JDBC操作数据库的编程步骤
//第一步,注册驱动程序Class.forName( “数据库驱动的完整类名”);//第二步,获取一个数据库的连接Connection conn=DriverManager.getConnection("连接URL","用户名","密码");//第三步,创建一个会话Statement stmt=conn.createStatement();//第四步,执行SQL语句,增加、
2017-03-13 14:52:52
309
原创 懒汉模式
package suanfa;public class Singleton2 {//懒汉模式private static Singleton2 instance=null;public static synchronized Singleton2 getInstance(){if(instance==null)instance=new Singleton2();
2017-03-12 21:27:28
584
原创 Singleton模式之饿汉模式
package suanfa;public class Singleton {//饿汉模式private Singleton(){}private final static Singleton instance=new Singleton();public static Singleton getInstance(){return instance;}}
2017-03-12 20:44:39
226
原创 求1+3+5+...+99的和
package suanfa;public class Test {public static void main(String[] args) { int n = 99; int sum=0; for(int i = 1; i { sum+=i; }
2017-03-12 18:36:25
972
原创 递归算法计算阶乘
package suanfa;import java.util.Scanner;public class Fact {//求阶乘方法static long fact(int n){if(nreturn 1;}else{return n*fact(n-1);//阶乘}}public static void main(String[] arg
2017-03-12 14:01:41
479
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人