防止重复提交,接口幂等性 文章介绍了接口幂等性的概念及其重要性,即用户对同一操作发起的一次或多次请求结果一致,不会因多次点击产生副作用。文章列举了需要防止非幂等性的情况,如用户多次点击按钮、页面回退再次提交等,并以SQL为例说明了哪些操作是天然幂等的。对于如何保证幂等性,提出了多种解决方案:使用token机制(需注意先删除还是后删除token的问题及原子性)、数据库悲观锁与乐观锁、业务层分布式锁、数据库唯一约束、Redis set防重以及防重表和全局请求唯一ID等方法。这些方案各有优缺点,适用于不同的场景。 2021-07-26 3268 0 java 总结 锁 分布式
SpringCache Spring从3.1版本开始引入了`Cache`和`CacheManager`接口来统一不同缓存技术,并支持JCache(JSR-107)注解以简化开发。`Cache`接口的实现包括`RedisCache`、`EhCacheCache`等。每次调用需要缓存的方法时,Spring会检查该方法是否已执行过,若存在结果则直接返回缓存中的数据;否则执行方法并将结果缓存后返回。 使用步骤如下: 1. 添加依赖:`spring-boot-starter-cache`。 2. 在配置文件中指定缓存类型(如Redis)及过期时间。 3. 编写配置类设置缓存序列化方式及其他属性。 4. 通过`@EnableCaching`启用缓存功能。 Spring Cache提供了多个注解如`@Cacheable`用于定义缓存、`@CachePut`更新缓存、`@CacheEvict`清除缓存等。此外,`@Caching`可以组合多种缓存操作。对于缓存问题,如穿透、击穿和雪崩,Spring提供了相应解决方案,例如缓存空值、加锁以及随机过期时间策略。针对读多写少且一致性要求不高的场景,Spring Cache是一个很好的选择。 2021-07-03 1891 0 java 总结 锁 springboot 分布式 微服务
分布式锁Redisson Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, B 2021-07-02 1956 0 java 总结 锁 redis 分布式 微服务
MySql乐观锁和悲观锁 本文介绍了乐观锁和悲观锁的概念及其在数据库中的实现方式。乐观锁假设数据通常不会被其他事务修改,因此读取时不加锁,仅在提交更新时检查是否有冲突;常见的实现方法包括使用版本号或时间戳字段来跟踪数据更改。而悲观锁则认为数据很可能被其他事务修改,所以在每次操作前都会锁定数据,确保同一时间只有一个事务可以修改数据。乐观锁适用于读多写少的场景,能提高吞吐量但可能在高并发写入时导致多次重试;悲观锁适合写多读少的情况,虽然保证了数据的安全性,但会增加系统开销并降低吞吐量。此外,文章还提到了多版本并发控制(MVCC)作为另一种并发控制机制。 2021-06-22 1315 0 总结 mysql 锁