一、redis的事务介绍 1、 Redis保证一个事务中的所有命令要么都执行,要么都不执行。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有 ...
分类:
其他好文 时间:
2018-12-20 19:08:46
阅读次数:
276
一、背景 在电商系统中,库存的概念一定是有的,例如配一些商品的库存,做商品秒杀活动等,而由于库存操作频繁且要求原子性操作,所以绝大多数电商系统都用Redis来实现库存的加减,最近公司项目做架构升级,以微服务的形式做分布式部署,对库存的操作也单独封装为一个微服务,这样在高并发情况下,加减库存时,就会出 ...
分类:
其他好文 时间:
2018-12-20 14:24:20
阅读次数:
250
最近抽空优化了之前已有的redis分布式锁,主要用于解决高并发的问题,比如抢红包,多个人同时操作红包库存,当在库存只剩下1个的时候,一个人的减库存的操作事务没提交,另一个人的查库存操作刚好同步执行,这样就会出现很尴尬的事情,1个红包会被2个人抢走,这个时候,我们就要依托锁,将请求入口锁住,当然锁有很多种方式,这边就记录一下比较好用的redis分布式锁。方式有很多setNX、set、incr等等,s
分类:
其他好文 时间:
2018-12-19 17:05:04
阅读次数:
146
实现互斥锁 package com.zookeeper.lock; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.concurrent.CountD ...
分类:
其他好文 时间:
2018-12-19 17:01:02
阅读次数:
129
Zookeeper 的核心原理 Zookeeper 的由来 各个节点的数据一致性 怎么保证任务只在一个节点执行 如果orderserver1挂了,其他节点如何发现并接替 存在共享资源,互斥性、安全性 Apache 的Zookeeper Google 的Chubby 是一个分布式锁服务,通过Googl ...
分类:
其他好文 时间:
2018-12-17 20:09:16
阅读次数:
205
Redis 简介 Redis全名是Remote Dictionary Server,使用ANSI C语言编写,属于NoSQL数据库。Redis可用作分布式缓存、分布式锁。Redis是内存数据库,也可以持久化。 数据类型 数据模型是key value,key只能是String,value支持多种类型: ...
分类:
其他好文 时间:
2018-12-17 02:31:40
阅读次数:
181
背景:我们系统有一个下传单据接口由于上游推送重复单据[产生异步任务],消费任务的时候是多线程并发执行,导致我们的数据库有很多重复的脏数据,数据库由于业务原因无法加唯一性索引。 解决方案:使用redis的setnx命令实现分布式锁。 原理:setnx---> 这种加锁的思路是,如果 key 不存在,将 ...
分类:
其他好文 时间:
2018-12-15 15:54:58
阅读次数:
175
大多数互联网系统都是分布式部署的,分布式部署确实能带来性能和效率上的提升,但为此,我们就需要多解决一个分布式环境下,数据一致性的问题。 当某个资源在多系统之间,具有共享性的时候,为了保证大家访问这个资源数据是一致的,那么就必须要求在同一时刻只能被一个客户端处理,不能并发的执行,否者就会出现同一时刻有 ...
分类:
其他好文 时间:
2018-12-14 17:31:22
阅读次数:
121
这一次总结和分享用Redis实现分布式锁 与 实现任务队列 这两大强大的功能。先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说分享思路比分享代码更重要(貌似大概是这个意思,若有误请谅解),但我觉得,分享思路固然重要,但有了思路,却没有实现的代码,那会让人觉得很浮夸的, ...
分类:
其他好文 时间:
2018-12-12 18:56:01
阅读次数:
202