redis
文章平均质量分 83
在项目中用到了redis的相关部分,记录一下知识
LG_985938339
长沙理工大学机械毕业,目前深圳从事java工作,努力进大厂
展开
-
使用队列实现redis数据一致性的思考
使用队列保证redis数据的一致性简介分析及制定解决方案使用队列的详细方案方案代码一些值得注意的地方总结简介在使用redis的时候,前面介绍了,由于操作数据库和操作redis缓存不是一个原子操作,且还会存在多个CPU之间并行执行的情况,所以就会有一个线程在操作数据库和缓存的时间节点之间,另外一个线程也在执行操作数据库和缓存,这样就会导致数据可以与缓存之间会存在数据不一致的情况。并且,无论使用何种更新策略,都无法保证数据的一直性,那么,如果某些数据在业务场景下不能出现数据库与缓存的长时间的不同步情况,原创 2021-02-12 00:15:24 · 3045 阅读 · 19 评论 -
使用虚引用的一种应用——解决队列数量的限制
使用虚引用的一种应用——解决队列数量的限制思考一些想法方案结束没事就喜欢研究这些东西,于是对之前做的使用队列解决缓存一致性有了新的思考。下面只是记录我的思考思路,欢迎大家一起来讨论。思考在上篇博客中,有具体的给出了使用ReentrantLock来解决缓存一致性的方案:链接: 对使用队列解决缓存一致性的思考(二).在上个方案中,已经可以利用ReentrantLock来代替线程+阻塞队列实现的消费模式。这样做的有点就是不需要开启多余的线程进行消费,可以节省线程资源,并且可以放心大胆的设置更多的锁,原创 2021-12-07 22:27:30 · 409 阅读 · 0 评论 -
对使用队列解决缓存一致性的思考(二)
对使用队列解决缓存一致性的优化思考一些想法新的方案:ReentrantLock思考在上篇博客中,有具体的给出了使用队列来解决缓存一致性的方案,就是下面的这个流程:链接: 使用队列保证redis数据的一致性.在这个方案中,我们在请求过来时,首先绝大部分的查询请求直接通过缓存查到了,就直接返回了,不会进入到队列,只有少部分的查询请求以及少量的跟新请求可以进入到队列里来。然后,在队列的另外一端,都会有一个对应的线程来消费它,并且消费完后通知被阻塞线程处理成功。这是一个不错的方案,比如有每秒有300原创 2021-04-21 22:15:25 · 696 阅读 · 1 评论 -
Redis中的五种数据类型及其原理
Redis中的五种数据类型及其原理String类型Hash类型List类型Set类型Zset类型String类型Hash类型List类型Set类型Zset类型原创 2021-04-03 00:17:04 · 394 阅读 · 0 评论 -
缓存击穿、缓存穿透及其解决方案
缓存击穿、缓存穿透及其解决方案缓存击穿缓存穿透布隆过滤器缓存击穿简介缓存击穿是某一时间大量请求并发访问某一个key,而正好这个key并没有在缓存层中,从而全都跑到数据库查询,导致数据库压力过大甚至崩溃的情况。而它引起的原因一般是热点key过期导致的。解决办法1.为了避免缓存击穿,那么最好就是设置热点key为永不过期的,这样就不会有缓存击穿的情况了。2.使用hystrix进行限流,熔断器,资源隔离等操作,即使发生了缓存击穿等操作,那也没有关系,我能够使用hystrix来保证服务的高可用性,其实我原创 2021-03-07 16:55:28 · 2112 阅读 · 4 评论 -
缓存雪崩及其解决方案
缓存雪崩是什么,怎么引起的,有什么危害?缓存雪崩,一般是由大量的key集中在一段时间内失效,或者redis服务故障引起的,导致查询请求查不到缓存,大量的请求涌入mysql,它会导致mysql瞬间被大量的流量打死,或者是由于该服务接口访问时间过长,导致耗尽了线程资源,不仅会导致该服务其他接口得不到线程资源,也有可能会使上游服务的资源也全都耗在这,然后引起整个系统的崩溃。预防为主的策略那么,首先这个肯定是预防为主,我们就应该要尽量避免引起缓存雪崩的原因对于服务不可访问来说,想要一个高可用的服务,首先我原创 2021-03-06 18:22:06 · 2418 阅读 · 3 评论 -
Redis集群的三种方式
Redis集群的三种方式使用简单的主从结构集群主从结构集群加上哨兵集群使用简单的主从结构集群就像mysql集群一样,使用一主多从的方式进行配置,master负责数据的写入和修改,slaves负责数据的读取,而master和slaves之间则通过异步复制的方式进行同步,一般来说,写请求比较少,读请求比较多,这样的话正好可以承载大量的并发请求,并且如果并发量再接着增大的话,只需要增加机器,横向扩展就行了。复制偏移量:master和slave都维护了一个复制偏移量offset,master每次向slav原创 2021-02-21 13:20:17 · 353 阅读 · 0 评论 -
redis集群发生数据丢失的情况
1.由于网络故障导致的脑裂问题,还有个什么问题去了,明天再看。2.主从模式、哨兵模式、redis cluster的优缺点,尤其是哨兵模式和redis cluster的一些细节上也要说。原创 2021-02-20 20:31:39 · 2132 阅读 · 0 评论 -
分布式缓存的路由策略
分布式缓存的路由策略为什么需要路由分发?路由分发的策略为什么需要路由分发?在我们使用redis cluster集群的时候,由于其有多个主节点和多个从节点,不同于以往的一主多从,这多个主节点之间的数据是不共享的,所以,那么如果我们在存取数据的时候,就必须从确定的这个主节点中去存取数据,不能存的时候在这个master存,取得时候就跑到别的master去取了,这样就不能够偶去到数据,由于数据的类型正好又是键值对的形式存在的,那么我们就可以通过这个键去将请求路由分发到不同的master上去,所以,在分布式缓存原创 2021-02-13 17:17:52 · 285 阅读 · 0 评论 -
Redis中的持久化机制
Redis中的持久化机制介绍RBDAOF总结介绍对于redis来说,为什么需要持久化呢?如果一个redis master因为某种原因挂掉了,比如是因为这个服务器宕机了,那么就需要立即对它进行重启,以尽快的能够对外提供服务,那么,如果没有持久化机制的存在,我们都知道,使用redis的原因主要就是为了缓解数据库的压力,让更多的请求数据可以直接通过redis查到,所以在重启了redis之后,如果大量的请求过来了,redis中却没有数据了,就会造成所有的请求都直接打到了数据库上,可能服务器才刚重启,数据库又原创 2021-02-11 19:53:14 · 164 阅读 · 0 评论 -
Redis中的几种更新策略
Redis中的几种更新策略最近项目中用到redis做缓存,翻阅了各种资料,顺便也记录一下。在redis缓存和mysql数据库跟新的策略中,它们都存在一定的缺点,可能会导致数据一致性的问题,即缓存和数据库中的内容不一致,主要有以下几种策略:1.删除缓存再更新数据库这是很容易发生数据不一致问题的,当有一个读线程A一个更新线程B同时进行访问时,如果是以下顺序,B删除缓存,A读取缓存中不在key,A去数据库中查询旧的数据并插入缓存,B将新的数据写入数据库,这样就导致了缓存中仍然是老数据,而数据库中依然是新原创 2021-01-23 17:26:35 · 6108 阅读 · 3 评论