- 浏览: 100344 次
最新评论
-
kaizi1992:
嗯嗯。是的。@cs6641468 谢谢!希望多提意见
spring boot框架学习之重要注解3注解方式读取外部资源配置文件 -
cs6641468:
1. Spring Boot引入文件配置,优先考虑推荐的@Co ...
spring boot框架学习之重要注解3注解方式读取外部资源配置文件
文章列表
【架构设计】多级缓存:应用案例与问题解决策略
- 博客分类:
- 凯哥Java
【架构设计】多级缓存:应用案例与问题解决策略
多级缓存系统的工作原理及其在提升应用性能方面的关键作用。通过对比本地缓存与分布式缓存的特点
| 原创作者/编辑:凯哥Java
| 分类:架构设计系列教程
多级缓存系统:提升性能的关键策略
多级缓存系统作为性能优化的重要组成部分,通过在不同层级存储数据,有效提升了应用程序的响应速度。这种策略主要包括本地缓存和分布式缓存两大组成部分。
本文原创:凯哥就Java(kaigejava)
工作机制
Nginx使用篇:实现负载均衡、限流与动静分离
| 原创作者/编辑:凯哥Java
| 分类:Nginx学习系列教程
nginx的logo
Nginx 作为一款高性能的 HTTP 服务器及反向代理解决方案,在 ...
优化批处理流程:自定义BatchProcessorUtils的设计与应用
| 原创作者/编辑:凯哥Java
| 分类:个人小工具类
在我们开发过程中,处理大量的数据集是一项常见的任务。特别是在数 ...
怎么在Windows操作系统部署阿里开源版通义千问(Qwen2)
| 原创作者/编辑:凯哥Java | 分类:人工智能学习系列教程
GitHub上qwen2截图
随着人工智能技术的不断进步,阿里巴巴通义千问团队近期发布了Qwen2系列开源模型,这一系列模型在多个领域展现出卓越的性能,特别是在自然语言理解、知识、代码、数学及多语言等能力上均显著超越当前领先的模型。本文将详细介绍如何在Windows操作系统上部署阿里开源版通义千问(Qwen2)模型,快速上手并体验这一强大的AI工具。
Redis实战11-实现优惠券秒杀下单
- 博客分类:
- 凯哥Java
本篇,咱们来实现优惠券秒杀下单功能。通过本篇学习,我们将会有如下收获:
1:优惠券领券业务逻辑;
2:分析在高并发情况下,出现超卖问题产生的原因;
3:解决超卖问题两种方案:版本号法及CAS法
4:乐观锁弊端改进方 ...
在上一篇中Redis实战之session共享,我们知道了通过Redis实现session共享了,那么token怎么续命呢?怎么刷新用户呢?本来咱们就通过拦截器来实现这两个功能。
登录拦截器优化:
先来看看现在拦截器情况:
拦截流程:
当拦截器拦截需要拦截到的url时候,才会在拦截器中更新用户token的过期时间。那如果,访问了不被拦截的路径,就不会给token续命的。这样就会导致用户token过期,而重新登录的。这样是不对的。
拦截了哪些路径?在config/MvcConfig中
当访问以上这些路径的是,就不会自动更新用户的token过期时间了。
优化:我们可以在现有拦截 ...
Redis实战之session共享
- 博客分类:
- 凯哥Java
当线上集群时候,会出现session共享问题。
当线上集群时候,会出现session共享问题。
虽然Tomcat提供了session copy的功能,但是缺点比较明显:
1:当Tomcat多的时候,session需要大量同步到多台集群上,占用内网宽带
2:同一个用户session,需要在多个Tomcat中都存在,浪费内存空间。
如果要替换掉Tomcat的session共享,替代方案应该满足:
1:数据共享
2:内存存储
3:key\value结构
基于Redis实现共享session登录
本文由凯哥Java(gz#h:kaigejava),个人blog:www#k ...
分库分表后全局唯一ID的四种生成策略对比
- 博客分类:
- 凯哥Java
分库分表之后,ID主键如何处理?
当业务量大的时候,数据库中数据量过大,就要进行分库分表了,那么分库分表之后,必然将面临一个问题,那就是ID怎么生成?因为要分成多个表之后,如果还是使用每个表的自增长ID,意味着每个表都是从1开始累加的,这样肯定是不对的。需要一个全局唯一的ID来支持。所以这也是你实际生产环境中必须考虑的一个问题。全局ID生成器,一般需要满足下列几个特性:
唯一性、高可用、递增性、安全性、高可用性
常用的主键ID生成策略有以下几种:
数据库自增ID
原理:
如果使用这种方式,那么这就意味着,你的系统里每次得到一个ID,都需要往一个库中的一个表中插入一条没有什 ...
Redis快速入门,分两个客户端:Jedis和SpringDataRedis
本文有凯哥Java(kaigejava).个博:www.kaigejava.com 发布于iteye
使用Jdedis
1、引入依赖
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dep ...
Redis实战9-全局唯一ID
- 博客分类:
- 凯哥Java
发布优惠券的时候,每个店铺都可以发布优惠券,当用户抢购的时候,优惠券表中的id如果使用数据库的自增长ID会存在以下问题:
1:id的规律太明显,容易被刷
2:当数据量很大的时候,会受到单表数据的限制
缺点场景分析:
id规律场景:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。
单表限制:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。
...
1.1.安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl
1.2.上传安装包并解压
通过前面的学习,我们已经掌握了docker-compose容器编排及实战了。高级篇也算快完了。有没有相关,我们前面学习的时候,都是通过命令行来操作docker的,难道docker就没有图形化工具吗?答案是肯定有的。咱们本篇就来讲讲docker图形化工具及使用图形化工具安装Nginx及docker系列教程总结。
Portainer是什么?
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
Portainer的安装
官网: https://www.portainer.io/
https://docs.portaine ...
通过前面两篇的学习,我们对docker网络及四大网络类型都了解了。本文,咱们就来学习docker的自定义网络。我们为什么需要自定义网络呢?是为了让各个主机分门别类,井井有条。方便关联,使得网络之间可以通过服务名进行通信。为什么在容器中,我们要通过服务名进行通信呢?那是因为,docker容器内部的IP是有可能发生变化的。我们使用自定义网络,就是解决容器IP变动时候可以通过服务名直接网络通信而不受到影响。
我们先来看看没有使用自定义网络前:
在上一篇文章中,我们案例使用的tomcat81和tomcat82.我们启动这两个容器。使用命令:
docker run -d -p 8081:8080 ...
Docker网络下-自定义网络实战
- 博客分类:
- 凯哥Java
通过前面两篇的学习,我们对docker网络及四大网络类型都了解了。本文,咱们就来学习docker的自定义网络。我们为什么需要自定义网络呢?是为了让各个主机分门别类,井井有条。方便关联,使得网络之间可以通过服务名进行通信。为什么在容器中,我们要通过服务名进行通信呢?那是因为,docker容器内部的IP是有可能发生变化的。我们使用自定义网络,就是解决容器IP变动时候可以通过服务名直接网络通信而不受到影响。
我们先来看看没有使用自定义网络前:
在上一篇文章中,我们案例使用的tomcat81和tomcat82.我们启动这两个容器。使用命令:
docker run -d -p 8081:8080 ...
通过上一篇学习,我们对docker网络有了初步的了解。本篇,咱们就来实战docker网络。
docker网络实战
实战docker网络,我们将从以下几个案例来讲解
1:birdge是什么?
2:host
3:none
4:container
实战网络类型如下:
在docker中,网络的配置是以json格式存在的,下面我们就来看看每种类型网络配置信息
我们先来看看bridge类型的网络
使用命令:docker network inspect bridge
查看host类型的网络
使用到命令:docker network inspect host
none类型 ...