Redis实战
文章平均质量分 83
记录自己在学习redis中的点滴
百万彩票中奖候选人
在csdn上记录自己碰到的奇淫技巧
展开
-
Redis实战-优惠卷秒杀优化
当用户下单之后,判断库存是否充足只需要导redis中去根据key找对应的value是否大于0即可,如果不充足,则直接结束,如果充足,继续在redis中判断用户是否可以下单,如果set集合中没有这条数据,说明他可以下单,如果set集合中没有这条记录,则将userId和优惠卷存入到redis中,并且返回0,整个过程需要保证是原子性的,我们可以使用lua来操作。当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤。4、校验是否是一人一单。原创 2023-05-10 16:51:11 · 226 阅读 · 0 评论 -
Redis实战-Redis消息队列
基于List结构模拟消息队列消息队列(Message Queue),字面意思就是存放消息的队列。而Redis的list数据结构是一个双向链表,很容易模拟出队列效果。队列是入口和出口不在一边,因此我们可以利用:LPUSH 结合 RPOP、或者 RPUSH 结合 LPOP来实现。不过要注意的是,当队列中没有消息时RPOP或LPOP操作会返回null,并不像JVM的阻塞队列那样会阻塞并等待消息。因此这里应该使用BRPOP或者BLPOP来实现阻塞效果。基于List的消息队列有哪些优缺点?优点:缺点:PubS原创 2023-05-10 09:32:21 · 141 阅读 · 0 评论 -
Redis实战-分布式锁(2)-思想及实现
基于setnx重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。原创 2023-05-08 22:59:18 · 94 阅读 · 0 评论 -
Redis实战-分布式锁(1)-思想及实现
利用set nx ex获取锁,并设置过期时间,保存线程标示释放锁时先判断线程标示是否与自己一致,一致则删除锁特性:利用set nx满足互斥性利用set ex保证故障时锁依然能释放,避免死锁,提高安全性利用Redis集群保证高可用和高并发特性。原创 2023-05-08 20:45:58 · 73 阅读 · 0 评论 -
Redis实战-优惠卷秒杀-思想及实现
乐观锁:会有一个版本号,每次操作数据会对版本号+1,再提交回数据时,会去校验是否比之前的版本大1 ,如果大1 ,则进行操作成功,这套机制的核心逻辑在于,如果在操作过程中,版本号只比原来大1 ,那么就意味着操作过程中没有人对他进行过修改,他的操作就是安全的,如果不大1,则数据被修改过,当然乐观锁还有一些变种的处理方式比如cas。:现在的问题还是和之前一样,并发过来,查询数据库,都不存在订单,所以我们还是需要加锁,但是乐观锁比较适合更新数据,而现在是插入数据,所以我们需要使用悲观锁操作。原创 2023-05-07 22:34:05 · 137 阅读 · 0 评论 -
Redis实战-缓存击穿-思想及实现
缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。原创 2023-05-07 11:35:11 · 119 阅读 · 0 评论 -
Redis实战-redis与数据库双写入-思想及实现
一句话:因为缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低服务器读写压力。原创 2023-05-06 11:01:04 · 122 阅读 · 0 评论 -
Redis实战-缓存穿透-思想及实现
缓存穿透产生的原因是什么?原创 2023-05-06 18:45:15 · 66 阅读 · 0 评论