`

用锁实现缓存机制

 
阅读更多
package test1;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;



/**
 * 通过锁,实现缓存机制
 * 伪代码
 * @author Administrator
 *
 */
public class CatchUsedLock {
	
	public static void main(String[] args) {
		
	}
	
	private Map<String, Object> map = new HashMap<String, Object>();
	
	// 此方法,多个线程进来,会多次操作数据库
	public void getData1 (String key) {
		if (map.get(key) == null) {
			map.put(key, "到数据库中取相关数值");
		}
	}
	
	
	// 此方法在读的时候被互斥,效率不高,按需求,只需要在写的时候互斥
	public synchronized void getData2 (String key) {
		if (map.get(key) == null) {
			map.put(key, "到数据库中取相关数值");
		}
	}
	
	// 应使用此方法
	private ReadWriteLock lock = new ReentrantReadWriteLock();
	public synchronized void getData3 (String key) {
		try {
			lock.readLock().lock();
			Object val = map.get(key);
			if (val == null) {
				lock.readLock().unlock();
				lock.writeLock().lock();
				// 此处还需再判断一次,防止当多个线程都被阻塞在lock.writeLock().lock();
				// 然后一个线程从数据库中取值后,走完,解锁,另一个线程进来发现是空的,又走一次数据库。
				val = map.get(key);
				if (val == null) {
					val = "到数据库中取相关数值";
					map.put(key, val);
				}
				lock.writeLock().unlock();
				lock.readLock().lock();
			}
		} finally {
			lock.readLock().unlock();
		}
	}
}

 

分享到:
评论

相关推荐

    spring缓存机制-入门实例

    本篇文章将深入探讨Spring缓存机制的基础知识,并通过一个入门实例来阐述其工作原理和使用方法。 Spring缓存抽象是自Spring 3.1版本引入的,它提供了一个统一的API,支持多种缓存解决方案,如EhCache、Guava Cache...

    35.[视频] Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】

    在本节中,我们将深入探讨如何使用Spring Boot集成Redis来实现高效的缓存机制。Spring Boot是Java开发领域中一个流行的微服务框架,它简化了设置和配置过程,使得开发人员可以快速启动项目。Redis则是一种高性能的...

    C++ 双缓存机制播放音频流(PCM裸流)

    在本文中,我们将深入探讨如何使用C++实现双缓存机制来播放音频流,特别是针对PCM(脉冲编码调制)裸流。PCM是数字音频的一种常见格式,它以原始样点的形式存储声音数据,不包含任何编码或压缩。双缓存机制在处理...

    C#读取web.config配置,建立高速缓存机制

    综上所述,通过web.config和Application对象构建的高速缓存机制,可以在.NET应用程序中实现对全局共享数据的有效管理和高速访问,从而提高应用程序的运行效率。不过,也需要合理规划缓存策略,避免造成资源的浪费或...

    hiro缓存机制共4页.pdf.zip

    对于 Hiro 缓存机制的具体实现,可能涉及到如何选择合适的缓存策略、缓存数据结构设计、缓存失效处理、并发控制等方面,但详细内容需要查阅相关文档或源代码才能提供准确的解答。希望以上通用的缓存知识对您有所帮助...

    Mybatis-plus基于redis实现二级缓存过程解析

    Mybatis-plus基于Redis实现二级缓存过程解析 Mybatis-plus是一款基于Java语言的持久层框架,旨在简化数据库交互操作。...在高并发、高性能的应用场景中,使用二级缓存机制可以带来明显的性能提升。

    优化增强的缓存机制(SimpleCache).zip

    "优化增强的缓存机制(SimpleCache)"这个主题主要关注如何在Android应用程序中有效地实现和优化缓存策略,以减少网络请求,降低资源消耗,提高响应速度。在这个项目中,我们可能会探讨以下关键知识点: 1. **内存...

    MyBatis缓存机制深度解剖[收集].pdf

    在并发读写场景下,MyBatis使用Java并发库中的ReadWriteLock(具体实现为ReentrantReadWriteLock),通过锁机制确保在写入缓存时的线程安全性。 执行流程大致如下: 1. 在Service层调用Mapper接口的方法。 2. ...

    PHP阻塞锁和非阻塞锁机制

    在PHP中,我们可以使用`flock()`函数实现文件锁,这是最常见的阻塞锁实现方式。例如,当多个请求同时尝试写入同一个文件时,第一个请求会获得文件锁,其他请求则会被阻塞,直到第一个请求完成写入并释放锁。 接着,...

    redis分布式锁实现

    文件"DistributedLockByRedis"可能包含了具体的Redis分布式锁实现代码,包括客户端的API设计、lua脚本、续租逻辑以及容错策略等,对于理解和实现分布式锁是一个宝贵的参考资料。通过深入研究这些内容,开发者可以更...

    java分布式锁实现代码

    本文将深入探讨如何使用Redisson和Curator框架来实现Java环境中的分布式锁。 首先,让我们来看一下Redisson实现的分布式锁。Redis是一个高性能的键值数据库,常被用作分布式系统的缓存或数据存储。Redisson是基于...

    分布式锁实现方式1

    本文将深入探讨三种常见的分布式锁实现方式:数据库实现、Redis缓存实现以及ZooKeeper实现,并分析它们各自的优缺点及适用场景。 首先,我们来看数据库实现方式。这种方式通常是在数据库中创建一张专门的锁表,对于...

    Hibernate缓存机制

    ### Hibernate缓存机制详解 #### 一、Hibernate缓存机制原理及配置 **1.1 Hibernate缓存概述** Hibernate作为一款流行的Java持久层框架,其缓存机制是提高应用程序性能的关键之一。缓存的主要作用在于减少数据库...

    基于redis的分布式锁实现

    ### 基于Redis的分布式锁实现 #### 分布式锁背景及概念 在现代分布式系统中,确保数据一致性和防止资源竞争变得至关重要。尤其是在涉及多个进程或节点间通信的场景下,传统的单进程锁机制(如Java中的`...

    分布式锁简单实现

    在这个“分布式锁简单实现”项目中,开发者提供了一个基本的分布式锁实现,尽管可能在效率上存在一些问题,但对于我们理解分布式锁的工作原理和实现方式具有一定的参考价值。 分布式锁的核心目标是解决在多服务器、...

    如何实现超高并发的无锁缓存

    1. **去除锁机制**:不再使用任何锁来保护数据结构,而是依靠数据本身的特性或外部机制来保证数据的一致性。 2. **数据完整性保证**:通过其他手段来确保数据的最终一致性,例如使用原子操作或签名验证等方式。 *...

    zk:redis分布式锁.zip

    本压缩包“zk:redis分布式锁.zip”提供了基于Zookeeper(zk)和Redis两种分布式锁实现的示例和相关资料。 首先,我们来看Zookeeper(zk)的分布式锁。Zookeeper是Apache的一个开源项目,提供了一个高可用的、高性能...

    redis锁与zk锁机制处理

    在标题提到的"redis锁与zk锁机制处理"中,我们主要关注两种常见的分布式锁实现:基于Redis的分布式锁和基于Zookeeper(ZK)的分布式锁。下面将详细讨论这两种锁的原理、优缺点以及适用场景。 1. Redis分布式锁 ...

    分布式锁实现案例.pdf.zip

    具体到案例中的"分布式锁实现案例.pdf"文档,可能会详细分析以上提到的实现方式,包括各自的优缺点、适用场景以及具体代码示例。读者可以通过阅读这份文档,深入理解分布式锁的工作机制,并学会如何在实际项目中应用...

Global site tag (gtag.js) - Google Analytics