- 博客(37)
- 资源 (2)
- 收藏
- 关注
原创 centOS虚拟机配置固定ip地址
2.进入cent的网络配置,命令如下。不同机器路径可能略有不同。如上所示:VMnet8的网段是192.168.172.1.设置完成后,重启服务。
2024-08-10 01:40:15
131
原创 火币矿池微服务架构
● 对外接口 hbp-open-api。给第三方提供对外接口,对可用性要求较高,独立出来采用多实例的集群部署。微服务所有请求的入口,负责路由分发,黑白名单url,以及部分简单的安全验证等。● 配置中心:hbp-config-cernter。● 结算服务 hbp-hpt。● 算力服务 hbp-pow。算力拉取,独立作为一个服务 ,独立维护高可用性,独立对外提供接基。● 管理后台服务 hbp-admin。● 登录中心 hbp-uc。● 注册中心 hbp-eureka。
2024-08-06 02:52:41
113
原创 jwt权限验证原理
通过对头部和载荷进行编码,然后用指定的算法和密钥生成的签名,用于验证数据的完整性和真实性,其中secret是密钥,不可泄漏,并且其生成也用到了头部信息和载荷信息。: 服务器在收到请求时,解码 JWT 头部和载荷,使用密钥验证签名是否正确。生成时,服务器将用户的身份信息(例如用户 ID 和角色)放入载荷中,并用密钥对其进行签名,生成完整的 JWT。1. JWT,全称是Json Web Token, 是一种JSON风格的轻量级的授权和身份认证规范,可实现。5.代码示例,工具类。JWT 的这三部分通过点(
2024-07-30 23:53:14
267
原创 IM即时通讯系统设计——获取消息历史记录
会根据groupId.先从redis中获取到messageId 的list。再进行遍历,根据messageId 获取具体的消息内容。
2024-05-16 18:54:05
457
原创 IM即时通讯系统设计(2)——对应更新消息已读未读状态
这样设计,主要是因为经常需要更新单条消息的某个属性。例如用户已读某条消息,则需要更新isRead属性。这样利用redis的hash结构,可以方便的直接更新某条消息的某个属性。key是CHAT_MESSAGE_CONTENT_CACHE+{messageId}首先所有的聊天消息都是用Hash结构存放在redis中。value是消息的具体内容。
2024-05-16 18:19:49
235
原创 mysql 保存记录时,id发生冲突的问题
PushMessageListener 监听一个topic。当前后两个消息同时到来时候,保存到数据,会发送id冲突的问题。
2023-10-21 19:27:55
83
原创 springboot工程,如果动态控制mybatis-plus的sql数据是否输出
项目背景,springboot工程,用mybatis-plus 做orm框架,nacos获取配置。 需求场景:IM项目,需要动态控制sql语句的输出,平时不用输出sql,以免影响性能。如果有异常或者需求需要排查,才输出sql好方便排查问题。
2023-09-07 18:51:51
141
原创 redistemlate set值的时候带有16进制前缀
nested exception is io.lettuce.core.RedisCommandExecutionException: ERR value is not an integer or out of range异常。redisTemplate.opsForValue().set(key, value) 方法调用的时候,value明明是int值,但是set进去的时候,确实是一个字符串值,key也带上了16禁止的前缀。且同样的代码,在本机环境就不会有该问题,打包发布到测试环境,就会这样的问题。
2023-09-03 23:59:09
411
原创 java流式处理(Stream)的几个特点
惰性求值:Stream 的操作是惰性求值的,也就是说在定义操作流程时,不会立即执行实际计算。不像传统的for循环操作,代码执行到的地方,都会执行对应的计算。数据处理:Stream 提供了丰富的操作方法,可以对流中的元素进行处理。并行处理:Stream 支持并行处理,可以通过 parallel() 方法将流转换为并行流,利用多核处理器的优势来提高处理速度。不可变性:Stream 是不可变的,它不会修改原始数据源,也不会产生中间状态或副作用。每个操作都会返回一个新的流对象,以保证数据的不可变性。
2023-08-24 10:51:14
127
原创 mysql中建立联合索引需要注意哪些问题
联合索引的作用如下:用于多字段查询,比如,建了一个 key(a,b,c) 的联合索引,那么实际等于建了 key(a)、key(a,b)、key(a,b,c) 等三个索引,(是为什么会这样,待考证) 我们知道,每多一个索引,就会多一些写操作和占用磁盘空间的开销,尤其是对大数据量的表来说,这可以减少一部分不必要的开销; 覆盖索引,比如,对于联合索引 key(a,b,c) 来说,如果使用 SQL:select a,b,c from table where a=1 and b = 1 ,就可以直接通过遍历索
2021-09-04 17:33:48
370
原创 MySQL 执行计划的浅析
首先是explain中所有列的信息,Extra只是其中比较重要的一列。EXPLAIN列的解释table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index、ALLtype显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > in...
2021-09-04 17:25:29
1101
1
原创 关于mysql索引的一些问题
1. 什么叫聚集索引与普通索引 聚集索引的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引 普通索引的叶子节点存储主键值。 假设有下表tabletable (id PK, name KEY, sex, flag);表中有四条记录:1, shenjian, m, A3, zhangsan, m, A5, lisi, m, A9, wangwu, f, B 则该表的聚集索引和普通索引的B+树的数据...
2021-09-04 15:56:13
71
原创 为什么 MySQL 官方建议使用自增主键作为表的主键?
因为自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分;并且自增主键也能减少数据的移动,每次插入都是插入到最后,所以自增主键作为表的主键,对于表的操作来说性能是最高的。...
2021-09-03 13:02:17
451
原创 JVM内存排查(1)
首先了解一下垃圾收集工作原理JVM使用一种称为跟踪收集器的垃圾收集器,它通过stop-the-world来操作垃圾收集,标记所有根对象(由主线程直接引用的对象),并遵循它们的引用,标记它沿途看到的每个对象。如果发现某些对象没有任何引用,就标记为垃圾对象,对其进行收集(如下图)。Young Generation -年轻代。这里只会出发最小垃圾回收(Minor GC ),所以代价最小,时间最快。它有两个子代 Eden Space -对象从这里开始。大多数物体都是在Eden Spac...
2021-08-24 00:46:36
126
原创 Hystrix的资源隔离策略
Hystrix提供了两种依赖隔离方式:线程池隔离 和 信号量隔离。两种隔离方式都是限制对共享资源的并发访问量,线程在就绪状态、运行状态、阻塞状态、终止状态间转变时需要由操作系统调度,占用很大的性能消耗; 而信号量是在访问共享资源时,进行tryAcquire,tryAcquire成功才允许访问共享资源。线程池隔离。Hystrix可以为每一个依赖建立一个线程池,使之和其他依赖的使用资源隔离,同时限制他们的并发访问和阻塞扩张。每个依赖可以根据权重分配资源(这里主要是线程),每一部分的依赖出现了问题,也不会
2021-08-23 16:59:37
1046
原创 并发处理的CAS简述
CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下执行函数:CAS(V,E,N) 其包含3个参数 V表示要更新的变量 E表示预期值 N表示新值 如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量值相同时,说明还没线程修改该值,当前线程可以进行修改,也就是执行CAS操作,但如果期望值与......
2021-08-22 21:32:02
90
原创 简述HashMap在并发的情况下,可能形成环链现象的原因:
非线程安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,以下代码就会引起死循环。 public static void main(String[] args) throws InterruptedException { final HashMap<String, String> map = new HashMap<String, Stri......
2021-08-22 21:05:06
356
原创 HahsMap原理
1. HashMap的数据结构图HashMap采⽤Entry数组来存储key-value对,每⼀个键值对组成了⼀个Entry实体,Entry类实际上是⼀个单向的链表结 构,在JDK1.8中,链表⻓度⼤于8的时候,链表会转成红⿊树。2.为什么使用链表+数组 数组的长度是限制死的,我们在对key值进行散列取到下标以后,放入到数组中时,难免出现两个key值不同,但是却放入到下标相同的格子中,此时我们就可以使用链表来对其进行链式的存放。3.Linked......
2021-08-20 18:30:44
113
原创 Redis的哨兵机制
什么是哨兵机制?Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。 自动故障迁移(Automatic failover):当一个Master不能正常...
2021-08-18 23:13:36
100
原创 查看mysql锁情况的命令详解
1.检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况mysql> show status like 'InnoDB_row_lock%';+-------------------------------+-------+| Variable_name | Value |+-------------------------------+-------+| InnoDB_row_lock_current_waits | 0 ||
2021-08-18 22:24:03
2223
原创 InnoDB行锁实现方式
InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁在实际应用中,要特别注意InnoDB行锁的这一特性,不然的话,可能导致大量的锁冲突,从而影响并发性能。下面通过一些实际例子来加以说明。(1)在不通过索引条件查询的时候,InnoDB确实使用的是表锁,而不是行锁。(2)由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的。(3)当...
2021-08-18 22:14:46
519
原创 JDK线程池各种参数
ThreadPoolExecutor的重要参数1.corePoolSize:核心线程数:核心线程会一直存活,及时没有任务需要执行。当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。2.queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,新任务会放在队列中排队等待执行。3.maxPoolSize...
2021-08-18 18:04:08
189
原创 Eureka基本原理
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。服务提供者在启动后,周期性(默认30秒)向Eur
2021-08-16 03:35:48
318
原创 mysql中的mvcc机制
MVCC全称是【Multi-Version ConCurrency Control】即多版本控制协议。MVCC的主要是靠在每行记录上增加隐藏列和使用undo log来实现的,隐藏列主要包括,改行数据创建的版本号(递增的),删除时间,指向undo log的指针等。MVCC是读不加锁的,只有在写的时候才会加锁,从而提高的并发的效率。那么MVCC是如何保证读写隔离的呢?主要是通过快照读和当前读两个操作。快照读: MVCC为了保证并发的效率,在进行读取数据的时候是不加锁的,在执行select的时候(不带
2021-08-16 03:10:46
1213
转载 数据库集中索引的要点
mysql:(1)联合索引:1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是OR关系,加索引不起作用 4、符合最左原则 ...
2018-11-04 22:08:37
201
转载 谈谈 Redis3.0 的集群处理
3.0的集群支持来看看 Redis3.0 推出的 cluster 做了什么。cluster 版本的 Redis 在启动集群服务时,节点之间互相之间会建立连接,这个节点互相发现也是通过配置文件来实现的,运行期间集群会自动将不可用 master 节点切换为它的一个 slave,保持了很好的高可用性。这个基本上是第一个问题的内置解决方案。但是对于第二个问题看上去似乎没什么革新的地方。按照官网介绍
2016-08-24 01:14:50
155
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人