自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于Redis主从节点数据过期一致性的思考,它真的足够一致了吗?

单机过期实现方式: 定期删除、惰性删除主从之间的过期: 实现方式、使用本地时钟导致的问题、实际验证

2020-08-30 17:56:44 1041

原创 HTTPS原理及执行流程

HTTPS实现了客户端与服务端之间的HTTP报文加密传输,要了解它是如何实现的,得先了解加密算法的几种类型和特性加密算法加密算法主要分为两类,对称和非对称。hash算法单向不可逆,会丢失原始信息,不作考虑。对称加密使用同一个密钥进行加密解密。问题:无法保证密钥本身传输的安全性在HTTPS的场景中,客户端和服务端一开始没有联系,只用对称加密没有办法约定好初始的密钥非对称加密那么用非对称加密会如何?考虑如下的方式,客户端和服务端各自用对方的公钥加密信息,用自己的私钥解密信息。client

2020-08-22 18:47:52 1154

原创 Redis缓存的使用方式及其问题

一、缓存的优缺点二、Redis 作为缓存的使用方式 读取流程 更新流程三、数据更新时,删除缓存的原因四、使用缓存可能导致的问题及处理方法 问题1:数据不一致 问题2:缓存穿透 问题3:缓存击穿五、缓存适用场景

2020-08-10 08:15:48 1021

原创 图文详解Redis分布式锁(单节点)

本文重点并不在于提供一个可运行的Redis分布式锁示例,而是结合图文理解redis的分布式锁实现上的细节,以及为什么要这样做。

2020-07-13 12:43:26 699

原创 Mybatis动态SQL解析:XML配置如何变成最终的Sql语句?

动态SQL是Mybatis的一项核心功能,通过一份静态的XML配置 + 外部参数,动态生成最终的SQL语句,可以用很少的理解成本配置复杂条件的动态SQL,摆脱各种处理逗号、空格这些细枝末节的痛苦。

2023-07-10 09:09:34 1154

原创 leetcode 39. 组合总和

39. 组合总和题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]示例 2:输入:candidates = [2

2020-09-09 22:25:53 215

原创 堆的JavaScript实现

由于JavaScript缺少内置的优先队列实现(例如Java的PriorityQueue,Python的heapq),导致刷题时碰到优先队列相关的题只能换语言写,还是自己写一个吧。完整实现代码见 github二叉堆可视化概念堆作为前置知识,首先要了解一下堆的基本概念。堆首先是一棵完全二叉树,也就是每层从左边依次填充的二叉树,由于这个特性,使它可以方便的由数组实现。取一个数组arr,下标为0位置废弃不用,从1开始。那么对任意的下标i来说,它的父节点和左右子节点分别为父节点:arr[i/2]

2020-09-07 07:43:19 1054

原创 Redis中Lua脚本的使用和超时处理

本文将介绍Redis中Lua脚本的基本用法,以及脚本超时导致的问题和处理方式。 包括 lua-time-limit选项作用 执行超时后如何使用 SCRIPT KILL 与 SHUTDOWN NOSAVE 命令

2020-08-25 20:12:03 3787

原创 排序算法总结(JS实现)

1.冒泡排序2.选择排序3.插入排序 快速排序归并排序计数排序基数排序

2020-08-24 08:04:08 262

原创 短链接系统的设计与实现

在部分存在字数限制的场景下(例如微博的140字限制和长短信拆分),如果填入很长的链接将占用可用的文本长度,需要将长链接转换为短链接。一、功能分析一个短链接服务对外仅需要暴露两个功能短链生成:提交网址,返回生成的短链接访问重定向:访问生成的短链接,能够重定向到原本的网址此外由于短链接生成之后需要长期可用,需要使用数据库持久化存储。下面对这两个要实现的功能进行更详细的分析功能1:访问短链重定向该功能比较简单,只需能够根据短链查询到长链接,可以是多对一或一对一的关系。即给定一个短链,唯一确定

2020-08-03 08:25:12 1171

原创 Redis的AOF配置

AOF配置:no-appendfsync-on-rewrite : 后台执行(RDB的save | aof重写)时appendfsync设为noauto-aof-rewrite-percentage: 自动触发AOF重写aof-load-truncated: 指定当发生AOF文件末尾截断时的处理方式aof-use-rdb-preamble: 开启混合持久化

2020-07-18 17:57:39 6028

原创 集群环境下使用Redis分布式锁防止定时任务重复执行

内容包括实现示例及不同服务器存在时间差时的处理方式。当服务器进行水平扩展,部署多个节点之后,分散在多个节点的定时任务将被重复执行。对于执行非幂等操作的定时任务,可以基于Redis的分布式锁来避免重复执行。

2020-07-12 15:24:22 1587

原创 egg-socket.io 向指定客户端发送消息

将消息发送到指定客户端的几种方式1. 广播 (不可取)2. generateId()3. 保存用户id和socket.id的映射关系

2020-06-25 18:46:08 2649

原创 Node.js 工作线程 worker_threads 的使用

在了解工作线程的具体用法之前,有必要先想想:工作线程解决了什么问题?工作线程主要解决的是cpu密集型场景下的问题,由于node只有单个主线程的特性,导致在执行高cpu运算任务时,会有以下的问题:计算任务阻塞主线程,导致无法响应新的请求只能单核执行,无法充分利用多核cpu而工作线程通过开启在主线程中开启新的线程单独执行计算任务,避免了阻塞整个事件循环,使主线程仍然可以继续处理后续的请求。并且由于是新的线程,可以在其他cpu核心上执行,使得单个进程可以更充分的利用多核cpu。用法介绍生成工作线

2020-06-22 08:09:06 3023 3

原创 在kong插件中使用redis

在开发kong自定义插件时,可能会面对需要多个worker共享一些信息或者接收外部的程序输入的情况,kong里面已经包含了lua-resty-redis 这个redis连接库,在插件代码中直接 require "resty.redis"就可以使用了一些要注意的点连接池由于kong的插件开启后,对于指定的Route/Service,每个请求都将执行一遍。如果每次都去重新连接redis,效率会很低。lua-resty-redis提供了pool_size选项来使用redis连接池。当在插件代码中使用r

2020-06-20 15:50:09 1587 2

翻译 【译】Redis 客户端缓存 (Redis server-assisted client side caching)

翻译自redis官方文档 :https://redis.io/topics/client-side-caching

2020-06-07 13:48:52 441

原创 kong 集群部署(混合模式 Hybrid Mode)

到了2.0版本,kong提供了 混合模式 来部署kong集群在这种模式下,kong的节点被分为两种角色,分别是控制节点CP和数据节点DP

2020-05-25 21:56:28 2443

原创 进程内缓存与分布式缓存(redis)比较

-进程内缓存Redis水平扩展困难简单可靠/易用没有过期,内存淘汰等可靠访问速度直接操作变量,延迟低需要网络传输和序列化能否保存引用类型可以保存引用类型只能存字符串进程内缓存缺点1. 不利于水平扩展进程内缓存只有单个应用程序能够读取,然而现在的后端程序往往是需要多个节点进行负载均衡的如果使用了进程内缓存,那么也就意味着每个节点有...

2020-01-10 16:22:19 831

原创 正则表达式入门(下)---分组和断言

三. 分组 ()在上一篇文章中 的量词部分说到, 量词的一般形式为{m,n},用于限定{}前面的 元素 出现的次数为什么这里写的是元素而不是字符呢?这就要引入 分组 的概念了, 使用()将一块表达式括起来, 可以把这个整体当做一个元素处理例如(ab)? 可以将两个字符ab作为一个整体看待,这时量词?表示的就是ab作为整体,要么一起出现,要么一起不出现/^(ab)+$/.test('aba...

2020-01-02 21:55:10 127

原创 正则表达式入门(上)---字符组和量词

相信很多人都碰到过需要用正则匹配字符串的时候,但又不会写,上网一通乱搜,也不明白那些字符什么意思,就当黑箱调来改去的经历。但其实如果只是想看懂简单正则表达式的话,并没有那么困难。符号虽多,但仍有线索可寻。它的内容可以大致划分为字符组、量词、分组和断言四部分这四个部分的表示方法都和几种括号(),[],{}息息相关,下面就让我们以括号为线索了解正则表达式吧(为了方便,文中示例使用JavaSc...

2019-12-15 19:27:30 293

原创 解决sudo找不到环境变量的问题

原因sudo命令会重置环境变量,查看文件/etc/sudoers,可以看到这样的配置Defaults env_reset解决方法最简单的, 使用sudo -E即可保留当前用户的环境变量, 但缺点也很明显,每次都要加修改/etc/sudoers文件,将Defaults env_reset改为 Defaults !env_reset,这样以后使用sudo就再也不会重置...

2019-03-13 22:15:46 8844 2

原创 express下载excel

node写了个查询数据生成和下载excel的功能,踩了些坑,记一下先贴个例子app.get('/download', function (req, res, next) { let data = [[1, 2, 3], [true, false, null, 'sheetjs'], ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3']...

2018-10-29 22:26:20 1160 1

原创 打乱数组排序

学习排序算法时,为了用一个数组测试多个排序算法,排序完成后要进行打乱; public static int[] shuffle(int [] arr) { Random random=new Random(); int rand=0; for (int i = 0; i < arr.length; i++) { rand=

2017-09-24 23:02:55 273

原创 使用Java定时执行shell脚本

执行shell脚本java定时任务

2017-09-14 13:32:09 3140

原创 LintCode-两数之和

两数之和题目描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。你可以假设只有一组答案。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].方法一:两重循环 public int[] t

2017-09-12 19:51:20 196

原创 VMware中ubuntu磁盘扩展

磁盘扩展开机前右击ubunut标签进入”虚拟机设置”界面点击硬盘在”磁盘实用工具”中 ,点击”扩展”,选择要扩展到的大小开启虚拟机后安装 分区编辑器 Gparted 方法1 : sudo apt-get install gparted方法2 : 在”ubuntu软件”中搜索安装打开Gparted ,依次: 右击 “linux-swap” ,禁用交换空间 ,删除 li

2017-09-04 15:51:51 664

Gemfire8.2文档

GemFire是一个位于应用集群和后端数据源之间的高性能、分布式的操作数据(operational data)管理基础架构。它提供了低延迟、高吞吐量的数据共享和事件分发。GemFire充分利用网络中的内存和磁盘资源,形成一个实时的数据网格(data fabric or grid)。

2017-09-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除