`

分布式锁,分布式缓存

 
阅读更多

分布式锁:个人理解,其实一样是锁,只不过是为了分布式应用的锁。普通锁或者读写锁。
实现方法:比如通过redis,使用Redisson,应用可先获取锁(自定义字符串的key,可以是一个锁,也可同时获取多个锁,但需注意死锁问题),然后tryLock,拿到锁后进行操作即可。
难点:当然,会有很多细节,比如获取锁后阻塞,一直不释放。等等。

 

分布式缓存实践,发展历程:

  • 性能需求, 随着读操作的量的上升需要解决,经历的过程有: 
    数据库读写分离(M/S)–>数据库使用多个Slave–>增加Cache (memcache)–>转到Redis
  • 可靠性需求 
    Cache的"雪崩"问题让人纠结 (雪崩即缓存失效,大量并发操作同时从数据取,数据库卡死。可通过多增加一个缓存标记(失效时间<对应数据失效时间),这样标记失效,第一个请求会在另外一个线程队列进行失效缓存查询set处理返回,并重置失效时间)
    Cache面临着快速恢复的挑战

疑问:
1、缓存穿透:数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。可通过查询数据为null后,设置默认值解决。

但假如,缓存没有,禁止从数据库拿。而缓存和数据库一致性,通过job也同步呢?但实用性有待确认。

 

分布式缓存:个人理解,由于单个redis是单线程,分布式由自己实现,一般采用一致性hash。每个实例又采用主从,防止实例不可用造成的请求穿透。

疑问:当扩展或者减少机器,缓存数据怎么迁移。以及,批量查询时,怎么操作?

分享到:
评论

相关推荐

    分布式相关面试题汇总:分布式锁、分布式事务、分布式缓存、分布式ID

    面试中,分布式锁、分布式事务和分布式缓存等概念是考察开发者技术能力的重要方面。下面将对这些主题进行详细阐述。 分布式锁是解决分布式环境下的资源争抢问题的关键工具。在单机系统中,锁的实现相对简单,但在...

    分布式锁原理讲解视频资料

    2. 基于缓存的分布式锁:使用Redis等内存数据库,通过SETNX命令实现原子性操作,设置超时时间防止死锁。还可以结合lua脚本增强安全性。 3. 基于Zookeeper的分布式锁:利用Zookeeper的临时有序节点和watcher特性,...

    C++基于redis的分布式锁redisAPI

    首先,Redis是一个高性能的键值存储数据库,广泛用于缓存、消息队列、分布式锁等场景。分布式锁是解决多线程或多进程共享资源时,避免并发问题的有效手段。在C++中,通过Redis API可以实现远程调用Redis服务,实现...

    浅谈分布式锁

    2. 基于缓存实现:常见的缓存组件有Redis,利用Redis提供的数据结构(如setnx命令)和特性(如过期时间设置)来实现分布式锁。但要注意Redis的复制是异步的,且单点故障可能会导致锁失效。 3. 基于ZooKeeper实现:...

    zk分布式锁1

    * 分布式缓存锁:ZooKeeper分布式锁可以被用来实现分布式缓存的锁机制,避免了缓存不一致的问题。 * 分布式任务锁:ZooKeeper分布式锁可以被用来实现分布式任务的锁机制,避免了任务执行的不确定性。 ZooKeeper...

    java分布式锁实现代码

    在分布式系统中,为了保证数据的一致性和安全性,分布式锁是一种常见的解决方案。本文将深入探讨如何使用Redisson和Curator框架来实现Java环境中的分布式锁。 首先,让我们来看一下Redisson实现的分布式锁。Redis是...

    zk:redis分布式锁.zip

    分布式锁是一种在分布式系统中实现锁机制的技术,用于在多节点之间协调访问共享资源,确保在高并发环境下数据的一致性和完整性。本压缩包“zk:redis分布式锁.zip”提供了基于Zookeeper(zk)和Redis两种分布式锁实现...

    springboot+dubbo分布式架构,提供分布式缓存、分布式锁、分布式Session、读写分离

    数据同步:基于redis的分布式锁。 Web安全:实现XSS过滤和CSR过滤。 多系统交互:Dubbo,ActiveMQ多系统交互。 前后端分离:前端使用ajax访问后端的rest服务,后端返回json格式数据。页面用nginx反向代理访问。 支付...

    缓存和分布式锁.pdf

    在Spring Boot项目中整合Redis以实现分布式缓存,是提高系统性能的有效手段。整合步骤包括配置pom文件引入Redis依赖、配置application.yml文件指定Redis服务器地址及端口、通过RedisAutoConfiguration自动配置类进行...

    redis和redisson实现分布式锁

    分布式锁是分布式系统中解决并发控制的关键技术,它允许在多台服务器上共享资源并确保同一时刻只有一个客户端能访问特定的资源。Redis作为一款高性能的键值存储系统,常被用作实现分布式锁的工具,而Redisson是基于...

    springboot+分布式锁分布式锁

    分布式锁在高并发环境下是必不可少的工具,它主要用于协调分布在不同节点上的进程,确保在多线程或多机器间对共享资源的访问具有互斥性。SpringBoot作为一个轻量级的Java开发框架,常用于快速构建微服务应用。结合...

    springboot redis zookeeperlock rabbit实现的分布式锁

    在分布式系统中,确保数据的一致性和安全性是至关重要的,而分布式锁是解决这一问题的有效手段。本项目基于SpringBoot框架,结合Redis、Zookeeper和RabbitMQ实现了分布式锁,让我们一起深入探讨这三个组件在分布式锁...

    分布式锁与信号量分布式锁与信号量.txt

    - 利用缓存系统(如Redis)实现分布式锁。 - Redis 的 `SETNX` 命令可用于实现简单的分布式锁。 - 更复杂的场景下可使用 RedLock 算法,该算法提高了锁的可靠性和安全性。 - **基于Zookeeper**: - Zookeeper ...

    分布式锁的原理

    2. **基于缓存的分布式锁**:如Redis或Memcached,它们提供了原子操作,比如`INCR`、`DECR`等。客户端通过尝试对某个键进行自增操作来获取锁,如果自增前键的值为0,那么自增操作成功,表示获取锁。释放锁时,将该键...

    分布式锁/信号量的实现方式:基于Redis、Zookeeper 、etcd 的分布式锁 确保在分布式环境中安全地访问共享资源

    例如,如果系统已经使用了Redis作为缓存层,则可以考虑使用基于Redis的分布式锁;如果系统需要更加强大的一致性保证,则可以选择使用Zookeeper或者etcd。无论是哪种方式,都应该充分考虑其性能特点和可能带来的开销...

    springboot版本redis分布式锁.zip

    SpringBoot结合Redis作为分布式锁和缓存穿透解决方案,可以有效地解决这些问题。本案例主要探讨如何在SpringBoot项目中集成Redis实现分布式锁以及防止缓存穿透。 首先,我们要了解什么是分布式锁。分布式锁是一种在...

    05、缓存&分布式锁1

    在IT领域,缓存和分布式锁是提升系统性能和稳定性的重要技术手段。本文将深入探讨这两方面的内容,特别是在Spring框架中的应用。 首先,缓存的主要目的是为了提高数据访问速度,减轻数据库的压力。当某些数据访问...

    redis分布式锁实现类

    redis分布式锁的工具类,采用的是Lua代码的方式,保证了Java执行方法的原子性。

    分布式锁与信号量.zip

    2. **基于缓存的分布式锁**:如Redis提供的`SETNX`命令,可以实现原子性的设置键值,如果键不存在则设置成功并返回true,表示获取锁;当不再需要锁时,通过`DEL`命令删除键来释放锁。这种方式速度快,但需要考虑锁...

Global site tag (gtag.js) - Google Analytics