logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

redis悲观锁和乐观锁

Redis的乐观锁主要是通过watch()来实现的,watch()的作用是监视键值对,首先是用multi()开启事务,exec()提交事务,提交事务的时候如果发现键值对的值发生变化则会取消事务,仔细看会发现,都是先设置值,如果成功则表示获取锁成功,然后再执行业务代码,在释放锁。当key不存在时,将key设置为value,如果key已存在,则SETNX不做任何动作。key不存在时,key的值会先被初

文章图片
#redis#数据库#缓存
redis批量操作性能对比

批量存储优缺点总结:1.性能对比:multiSet()>pipeline管道>普通for循环set2.扩展性强,可以支持设置失效时间。multiSet()不支持失效时间的设置//multiSet批量添加public void batchSet(Map<String, String> map) {stringRedisTemplate.opsForValue().multiS

#redis#java
RocketMQ事务消息实现订单创建 + 扣减库存

如果通过事务消息实现“订单创建 + 扣减库存”?

#java-rocketmq#rocketmq#java
分库分表-分片键

分片键算法:分片键决定了数据会被分布在哪个分片,原理就是根据分片键的值计算出数据所分布的分片ID计算的过程就是分片键算法,即 f(shardKey) = shardID,常见的算法有三种。

限流-redis+Lua

1、创建RateLimiter对象开始计时2、当需要获取令牌时,会计算好累计运行了多长时间,里面的计时器用的是google的StopWacht。3、计算需要获取的令牌减去池子里还剩多少令牌,如果池子里面的令牌不够,就预先扣的数量,再用这个预先扣的数量乘以速率,得到下一次获取令牌的人需要等待的时间。4、计算获取当前令牌数量乘以速率需要的时间。5、通过第二步得到的时间减去步骤四得到的时间,如果是大于0

#lua#redis#开发语言
限流-令牌桶限流-Guava RateLimiter

一、Guava的 RateLimiter提供了令牌桶算法实现1、平滑突发限流(SmoothBursty)2、平滑预热限流(SmoothWarmingUp)public abstract class RateLimiter {//平滑突发限流static RateLimiter create(double permitsPerSecond, SleepingStopwatch stopwatch)

#java#http
ConcurrentHashMap的数据结构+以及各个版本之间的区别

4、数据结构不同,1.6 ReentrantLock+Segment+HashEntry 需要两次Hash1.8只需要一次hashsynchronized+CAS+HashEntry+红黑树。ConcurrentHashMap 1.7与1.8的区别。3、size的计算方式不同。2、put的流程不同。

文章图片
#数据结构
skywalking-安装部署

skywalking、Springboot、安装部署

#skywalking
分库分表-数据迁移问题

比如我们已经准备好某一天要进行数据迁移了,那么我会们在当天发布公告,比如通告一下用户,凌晨12点到早上6点系统升级,服务暂不可用。但是,依然无法避免的就是,对用户的感受是不好的,毕竟系统无法使用了。那么,我们还有另一种迁移方案,即:双写方案。针对于停机停服数据迁移的劣势,我们可以在持久层做请求拦截,将写入、修改、删除操作修改为双写,即:对旧库和新库都要做CUD操作。那么,新的数据也就会在新库中存在

面试-数据库连接池-HikariCP和DruidCP区别

SXDBC是众安自己封装的,但其实底层数据库连接池,也可以用HikariDataSource、DruidDataSource下面介绍了,连接池的创建流程。先从加载DataSource开始在关联Mybatis的时候,需要注册DataSource对象@Beanpublic DataSource dataSource() {try {return SxdbcDataSourceFactory.creat

#数据库#java#后端
    共 21 条
  • 1
  • 2
  • 3
  • 请选择