![](https://img-blog.csdnimg.cn/dd60a70b62cf43b2becc79600416505d.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis
文章平均质量分 73
redis
猪大侠0.0
这个作者很懒,什么都没留下…
展开
-
看redisson是如何解决锁超时问题
比如利用redis实现的分布式锁会设置一定的过期时间,超过该时间,缓存自动删除,锁被释放。这是防止因程序宕机等原因导致锁一直被占用。但存在一定的问题,如果是该业务执行过程中有点小阻塞,业务还没执行完,结果锁超时释放,下一个线程就又会进来同时执行,产生并发问题。问题1:怎么保证业务没执行完时,不让锁自己释放呢?不断给锁续约。即上锁之后,每隔一段时间增加缓存中的过期时间,一致重复执行,直到业务执行完。业务执行完会发出完成的信号,循环程序监听到信号后跳出不再续约。原创 2023-08-03 22:06:10 · 1390 阅读 · 2 评论 -
Redisson是怎么实现可重试锁的
可重试锁是什么:一个请求尝试获取锁时,如果锁已被人占用,则立即返回失败结束请求是不合理的。最好的方式是`给予一定的容错空间,在一定的时间内再多次尝试获取锁,如果长时间仍获取不到才返回失败`。而简单的基于redis实现的分布式锁不能实现该功能。redisson可以实现该功能。原创 2023-08-02 14:07:47 · 239 阅读 · 2 评论 -
redisson实现可重入锁原理
在保存锁时会记录获取锁的次数。如果同一个线程递进3次获取同一把锁,那次数就是3,释放锁时,不能直接删除,而是释放一次锁,标志位就。需要注意的是只有判断所以存在并且是自己上的时候,才能再次将标识值+1,如果是其他线程获取的则直接获取锁失败。比如在获取完锁之后,执行完另一个方法又要再一次获取这把锁,是不允许拿到的。就是一个操作redis的一个工具,更多是用来上分布式锁,他帮你写了很多固定的上锁步骤,你直接调用即可。上锁时向redis里存入hash结构的数据,hash的key为线程值,value为上锁的次数。原创 2023-07-31 23:19:18 · 335 阅读 · 2 评论 -
如何解决库存超卖问题
但查询和修改时两个命令,并发情况下,有可能多个线程同时查询出来,符合条件都进入修改命令,这就导致数据没有把控,最后的数值会超出限制的量。 每行数据数据会有个字段version记录当前数据的版本,修改数据前查询该数据的version,修改时比较version是否一致(即可以把version作为where条件,这样保证只能修改version对应的数据)。如下图:线程1,2都查询到的版本为1,线程1先进入sql执行,符合条件执行成功,线程2进入时库中数据版本号已被修改,不能修改。字段被修改后,在根据新的。原创 2023-07-30 22:05:34 · 237 阅读 · 2 评论 -
基于redis实现分布式锁
当我们在项目中对同一个共享资源进行并发的操作时,如果不进行加锁的话有可能会出现数据一致性问题。单体项目时,我们或许会加一个synchronized锁来保证单个实例并发安全。但问题来了,,如果应用被部署了多个节点,并发请求被负载均衡到了不同的应用节点上,那synchronized就锁不住多个应用了,还是会出现数据一致性问题。:同一时刻只能有一个服务(或应用)访问资源。:一致性要求保证加锁和解锁的行为是原子性的。:锁只能被持有该锁的服务(或应用)释放,及不能被其他服务解锁操作释放。原创 2023-07-21 18:21:12 · 124 阅读 · 2 评论 -
Redis缓存穿透怎么解决
先判断缓存中有没有数据,如果没有那直接查库,查完后如果存在则加入缓存并设置较长的过期时间,如果不存在,存入空字符进缓存,设置较短的过期时间。如果没找到则一定是没有该数据,如果找到,虽然也有一定的概率是数据库仍没有该数据(误判),但已经大大缩小损害。是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。会遇到几个问题:一是如果大量查询不同的同对象结果都为null,都会被存进缓存中,那缓存中会存在很多无用数据。可见第一边查询时走的是下面的返回,缓存中是""原创 2023-07-10 23:21:13 · 86 阅读 · 0 评论 -
Redis缓存的更新策略
redis缓存是当我们有大量查询或查询较慢时,先查询缓存以减轻对数据库操作的压力。那数据库变更后,怎么能保证缓存里的数据和数据库的数据保持一致,。通常由两种方式内存淘汰:redis自动进行,当redis内存达到咱们设定的max-memery的时候会自动触发淘汰机制,淘汰调一些不重要的数据。超时剔除:给缓存数据添加TTL时间,到期后自动删除缓存。下次查询时更新缓存。主动更新:编写业务逻辑,在修改数据库的同时,更新缓存。如果对数据库的写操作比较频繁,那最好使用。原创 2023-07-10 23:05:53 · 220 阅读 · 0 评论