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

批量存储优缺点总结:1.性能对比:multiSet()>pipeline管道>普通for循环set2.扩展性强,可以支持设置失效时间。multiSet()不支持失效时间的设置//multiSet批量添加public void batchSet(Map<String, String> map) {stringRedisTemplate.opsForValue().multiS
如果通过事务消息实现“订单创建 + 扣减库存”?
分片键算法:分片键决定了数据会被分布在哪个分片,原理就是根据分片键的值计算出数据所分布的分片ID计算的过程就是分片键算法,即 f(shardKey) = shardID,常见的算法有三种。
1、创建RateLimiter对象开始计时2、当需要获取令牌时,会计算好累计运行了多长时间,里面的计时器用的是google的StopWacht。3、计算需要获取的令牌减去池子里还剩多少令牌,如果池子里面的令牌不够,就预先扣的数量,再用这个预先扣的数量乘以速率,得到下一次获取令牌的人需要等待的时间。4、计算获取当前令牌数量乘以速率需要的时间。5、通过第二步得到的时间减去步骤四得到的时间,如果是大于0
一、Guava的 RateLimiter提供了令牌桶算法实现1、平滑突发限流(SmoothBursty)2、平滑预热限流(SmoothWarmingUp)public abstract class RateLimiter {//平滑突发限流static RateLimiter create(double permitsPerSecond, SleepingStopwatch stopwatch)
4、数据结构不同,1.6 ReentrantLock+Segment+HashEntry 需要两次Hash1.8只需要一次hashsynchronized+CAS+HashEntry+红黑树。ConcurrentHashMap 1.7与1.8的区别。3、size的计算方式不同。2、put的流程不同。

skywalking、Springboot、安装部署
比如我们已经准备好某一天要进行数据迁移了,那么我会们在当天发布公告,比如通告一下用户,凌晨12点到早上6点系统升级,服务暂不可用。但是,依然无法避免的就是,对用户的感受是不好的,毕竟系统无法使用了。那么,我们还有另一种迁移方案,即:双写方案。针对于停机停服数据迁移的劣势,我们可以在持久层做请求拦截,将写入、修改、删除操作修改为双写,即:对旧库和新库都要做CUD操作。那么,新的数据也就会在新库中存在
SXDBC是众安自己封装的,但其实底层数据库连接池,也可以用HikariDataSource、DruidDataSource下面介绍了,连接池的创建流程。先从加载DataSource开始在关联Mybatis的时候,需要注册DataSource对象@Beanpublic DataSource dataSource() {try {return SxdbcDataSourceFactory.creat







