缓存
文章平均质量分 82
一江溪水
这个作者很懒,什么都没留下…
展开
-
redis 事务
在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。可以监控一个或多个键,如果在事务执行之前,被监视的key被其他命令修改(或删除),则事务被打断(类似乐观锁),之后的事务就不会执行,监控一直持续到。可以保证脚本内的命令一次性、按顺序地执行,其同时也不提供事务运行错误的回滚,执行过程中如果部分命令运行错误,剩下的命令还是会继续运行完。是单进程程序,并且它保证在执行事务时,不会对事务进行中断,事务可以运行直到执行完所有事务队列中的命令为止。原创 2022-12-25 16:21:56 · 948 阅读 · 0 评论 -
Redis为什么这么快?
Redis经常被用作做缓存, 一致性要求不高的场景,还可以当做kv存储使用。另外, Redis还提供了消息订阅、事务、索引等特性。我们还可以利用集群特性搭建分布式存储服务,实现非强一致性的分布式锁服务。Redis用到上述场景, 都有一个共同的优势, 就是处理速度快(高性能)。...原创 2021-12-04 19:59:00 · 3725 阅读 · 0 评论 -
Redis分布式锁如何自动续期
Redis 实现分布式锁指定一个 key 作为锁标记,存入 Redis 中,指定一个 唯一的用户标识作为 value。当 key 不存在时才能设置值,确保同一时间只有一个客户端进程获得锁,满足互斥性特性。设置一个过期时间,防止因系统异常导致没能删除这个 key,满足防死锁特性。当处理完业务之后需要清除这个 key 来释放锁,清除 key 时需要校验 value 值,需要满足只有加锁的人才能释放锁 。问题如果这个锁的过期时间是30秒,但是业务运行超过了30秒,比如40秒,当业务运行到30秒的时原创 2021-11-27 16:33:38 · 5141 阅读 · 0 评论 -
基于RedLock的分布式锁
概述在单个主节点的架构上实现分布式锁,是无法保证高可用的,在生产环境上,我们的Redis都是以集群部署的;那么如果Redis实现分布式锁的是一个主从集群,可能会发生什么情况呢?如果进程A在主节点上加锁成功,然后这个主节点宕机了,则从节点将会晋升为主节点。若此时进程B在新的主节点上加锁成功,之后原主节点重启,成为了从节点,系统中将同时出现两把锁,这是违背锁的唯一性原则的。RedLock实现如果要保证分布式锁的高可用,则需要采用多个节点的实现方案。Redis的官方给出的建议是采用RedLoc原创 2021-10-12 16:50:23 · 322 阅读 · 0 评论 -
Redis实现分布式锁
什么是分布式锁分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性为什么要分布式锁当多个线程需要并发修改一个数据时,为了避免竞争,在单机的情况下,加synchronized或者Lock即可实现互斥但在分布式的环境下,当多个server并发修改同一个资源时,为了避免竞争就需要使用分布式锁。那为什么不能使用Java自带的锁(synchronized或者Lock)呢?因为Java中的锁是面向多线程设计的,它只局限于当前的实例。而多个server实际上是多进程,是不原创 2021-10-10 21:14:37 · 483 阅读 · 1 评论 -
Redis-有序集合(Zset)数据结构
集合概念SetSet类似于Java中的HashSet 。Redis中的set类型是一种无序集合,集合中的元素没有先后顺序,并且不可重复。当需要存储一个列表数据,又不不能出现重复数据时,Set 是一个很好的选择,并且set提供了判断某个成员是否在一个Set集合内的接口,List是没有这种接口的可以基于set轻易实现交集、并集、差集的操作。Redis 可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。这个过程也就是求交集的过程。Zset和Set相比,sorted set增加了一个权重参数sc原创 2021-10-06 16:59:17 · 1054 阅读 · 0 评论 -
Redis缓存过期与内存淘汰
Redis缓存过期与内存淘汰Redis中有个设置时间过期的功能,即对存储在redis 数据库中的值可以设置一个过期时间,到了过期时间,key会被删除如果内存空间满了,再往Redis里面插入数据,就会触发缓存淘汰机制缓存过期策略作为一个缓存数据库,这是非常实用的。我们set key的时候,都可以给一个expire_time, 就是过期时间,通过过期时间我们可以指定这个key可以存活的时间。那么,到了过期时间后,这些key是怎么被删除的呢?缓存过期是在 Key 超过 expire_time 后原创 2021-08-20 16:03:38 · 379 阅读 · 0 评论 -
Redis的持久化方式
Redis的持久化方式Redis 缓存的优势是提供快速的查询和存储能力,所以所有的数据都被存储在内存中。相对于硬盘,内存中的数据是半持久化存储,当遇到不可抗阻力,例如断电或者硬件损坏导致的服务器宕机时,内存中的数据会完全丢失。为了防止 Redis 中的数据丢失,需要将数据持久化存储到硬盘。持久化持久化就是把 Redis 数据从内存同步到硬盘的过程。Redis中提供了两种持久化方案RDB 持久化:将 Redis 的数据定时 dump 到硬盘;AOF 持久化:将 Redis 的操作日志追加写入硬盘文原创 2021-08-19 15:39:02 · 175 阅读 · 0 评论 -
如何保证缓存与数据库的一致性?
常见的缓存更新策略先更新缓存,再更新数据库先更新数据库,再更新缓存先删除缓存,再更新数据库先更新数据库,再删除缓存延时双删-更新数据库前后均删除缓存如果系统不存在并发情况,这些策略都没问题,但是一旦协同并发上来后,这些策略都有问题,具体采用那些策略,需要根据具体的业务分析先更新缓存,再更新数据库这种策略一般不会使用,比如我们想象一种场景,我们先更新缓存,然后更新数据库,但是某些原因更新数据库失败了,那么肯定就会导致数据不一致。而且这个不一致,还会导致这次更新直接丢失了因为大多数系统中,原创 2021-07-19 16:21:40 · 152 阅读 · 1 评论 -
如何解决缓存穿透,缓存击穿,缓存雪崩
前言缓存在我们日常的开发中,都要数据库来进行数据的存储,当系统的用户量上来之后,系统需要承受大量的并发操作,特别是对数据库的操作,是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。为了克服这些高并发的问题,系统通常会引入缓存技术,将一些经常访问的热点数据放在缓存中原创 2021-06-20 17:31:22 · 219 阅读 · 0 评论