As I wrote in a previous post,
I’ve started to work in a
new project. My role
there is a technical team
leader of a very big team
(10 developers).
Part of my role is helping the
team to create infrastructure for their applications. As part of the application’s
infrastructure, I recommended to start using caching for better performance.
In the post I’ll demonstrate the simple cache manager I’ve built for the team.
ICacheManager Interface
Before building the cache manager I created an interface for caching.
I’ve done that in order to create abstraction between the application
and the used cache manager since in the future we may want to change
the implementation for Velocity distributed cache for example. Another
reason was for the testability of the caching subsystem. The last reason is
because we are going to use a dependency injection container for our
infrastructure. The following code is the interface I’ve created:
public interface ICacheManager {
/// <summary>
/// Add a new object into the cache
/// </summary>
/// <param name="key">The key of the object to add</param>
/// <param name="value">The value of the object to add</param>
void Add(string key, object value);
/// <summary>
/// Check whether the key is contained by the cache
/// </summary>
/// <param name="key">The key to check</param>
/// <returns>Returns true if the key is contained by the cache</returns>
bool Contains(string key);
/// <summary>
/// Returns the number of items in the cache
/// </summary>
/// <returns></returns>
int Count();
/// <summary>
/// Insert a new object into the cache
/// </summary>
/// <param name="key">The key of the object to insert</param>
/// <param name="value">The value of the object to insert</param>
void Insert(string key, object value);
/// <summary>
/// Get the object that its key is given
/// </summary>
/// <typeparam name="T">The object</typeparam>
/// <param name="key">The given key to check</param>
/// <returns>returns the object or null if it doesn't exists</returns>
T Get<T>(string key);
/// <summary>
/// Removes the object that is referenced by the given key /// </summary>
/// <param name="key">The given key</param>
void Remove(string key);
/// <summary> /// Get/Set the the given key and object /// </summary> /// <param name="key">The given key to the indexer</param> /// <returns>Returns the object that the given key reference</returns> object this[string key] { get; set; } }
The CacheManager Implementation
The implementation of the cache manager is very straight forward.
I’ve used the ASP.NET caching in order to cache the data. The following code
is the simple implementation I’ve created:
public class CacheManager : ICacheManager{ #region ICacheManager Members public void Add(string key, object value) { HttpRuntime.Cache.Add(key, value, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); } public bool Contains(string key) { return HttpRuntime.Cache.Get(key) != null; } public int Count() { return HttpRuntime.Cache.Count; } public void Insert(string key, object value) { HttpRuntime.Cache.Insert(key, value); } public T Get<T>(string key) { return (T)HttpRuntime.Cache.Get(key); } public void Remove(string key) { HttpRuntime.Cache.Remove(key); } public object this[string key] { get { return HttpRuntime.Cache[key]; } set { HttpRuntime.Cache[key] = value; } } #endregion}
This isn’t going to be our caching manager in the future but for now
it is enough in order to start using cache in the application.
Summary
I’ve shown a very simple cache manager. I could have created other
solutions like having an in memory dictionary with cached data or other
implementation that I can think about but the ASP.NET caching is there
for using so why not use it. In the future this implementation will be
replaced with a more appropriate caching mechanism such as Velocity.
分享到:
相关推荐
在Java编程中,Map接口是数据结构中非常重要的一个部分,它提供了键值对的存储方式,便于快速访问和操作数据。在许多实际应用中,尤其是高性能和高并发的场景,Map常被用来实现缓存技术,以提高数据读取速度和系统...
【课程大纲】第1篇-Linux 01-Linux简介及安装 共11页第1篇-Linux 02-文件系统结构及常用shell命令 共62页第2.1篇-LNMP部分-源码方式安装 共27页第2.2篇-LNMP部分-yum方式安装 共21页第2.4篇-LNMP部分-Nginx部分-基本...
1. **Java VisualVM**:这是一个强大的Java性能分析工具,可以显示对象的大小、内存分配和垃圾回收情况。通过“对象”视图,可以观察到对象实例的大小。 2. **JOL (Java Object Layout)**:JOL是一个轻量级库,它...
osCache是Java开发中常用的...通过以上介绍,我们可以看到osCache是一个强大且灵活的缓存框架,它能够显著提升Java应用的性能。在实际开发中,正确理解和使用osCache,可以有效地减少数据库压力,提升应用响应速度。
### Java版Memcache缓存管理与开发 #### Memcache简介及其在高流量网站中的作用 在高流量网站中,为了缓解数据库的压力并提高网站响应速度,通常会采用Memcache作为缓存解决方案。Memcache是一种高性能、分布式...
【标题解析】:“我的第一个java项目---超市管理系统”这一标题表明了这是一个基于Java编程语言开发的初阶项目,主要用于实现超市的管理功能。这通常包括库存管理、销售记录、客户信息处理等方面,对于初学者来说,...
Xmemcached是一个高性能、线程安全的Java实现的分布式缓存系统,专为Memcached设计。这个库的主要目标是提供简单、快速、无阻塞的客户端API,以便于开发人员在Java应用程序中集成和利用Memcached的强大功能。下面将...
【基于Java MVC实现快递员管理系统】是一个典型的软件开发项目,主要使用了Java编程语言和MVC(Model-View-Controller)设计模式来构建一个高效、可维护的快递员管理平台。MVC模式是软件工程中一种常用的设计模式,...
它很可能包含了一个简单的Java缓存实现,可能使用了HashMap或者其他自定义的数据结构来模拟缓存操作。这样的实例通常会包括以下组件: 1. **缓存接口**:定义缓存的基本操作,如put、get、remove和clear。 2. **...
它可以由SessionFactory管理,并且通常由第三方缓存提供器如Ehcache或Infinispan来实现。二级缓存将经常访问的数据存储起来,减少对数据库的访问,从而进一步提升系统性能。 二级缓存分为几个类别,包括查询缓存、...
1. 获取SharedPreferences实例:通过Context的getSharedPreferences()方法,传入一个唯一的名称作为文件名,第二个参数为操作模式(默认MODE_PRIVATE)。 2. 缓存数据:使用SharedPreferences.Editor接口,调用...
第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 ...
首先,我们从“分布式缓存-第一章:基础理论篇.pdf”开始。这一章主要讲解了分布式缓存的基本概念和工作原理。分布式缓存是将数据存储在多台节点上的缓存系统,通过网络进行通信和数据共享。常见的分布式缓存系统如...
- **Ehcache**:是一个广泛使用的开源Java缓存解决方案,支持本地缓存和分布式缓存。它提供了内存和磁盘存储,以及过期策略、缓存预热等功能。 - **Guava Cache**:Google的Guava库提供了一个轻量级的缓存解决方案...
从缓存里获取数据1返回给用户2 ,耗费10ms假设10分钟之内有1000个用户都查询了同一个数据10分钟之内,那1000个用户,每个人查询这个数据都感觉很慢,
当我们谈论“Java对象内存大小”时,我们通常指的是一个Java对象在内存中占据的空间,包括对象头、实例字段以及可能的对齐填充。这个知识点对于开发高效缓存系统尤其重要,因为缓存需要精确管理内存来最大化存储效率...
这些框架提供了一种抽象的方式,简化了缓存的管理和维护,使得开发者可以更专注于业务逻辑,而不是底层的缓存优化。 总的来说,理解并有效利用缓存技术能显著提升Java企业级应用的性能。开发者需要根据系统需求,...
在Java的持久化框架Hibernate中,缓存机制和Session对象的管理是其高效运作的关键要素。本文将深入探讨这两个主题,以帮助开发者更好地理解和利用Hibernate。 首先,让我们聚焦于Hibernate的缓存机制。缓存的存在是...
- **解释器模式**:给定一种语言,定义它的文法表示,并提供一个解释器来实现该语言的语义。在Java中,通常使用抽象语法树(AST)实现。 - **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来似乎...
【课程大纲】第1篇-Linux 01-Linux简介及安装 共11页第1篇-Linux 02-文件系统结构及常用shell命令 共62页第2.1篇-LNMP部分-源码方式安装 共27页第2.2篇-LNMP部分-yum方式安装 共21页第2.4篇-LNMP部分-Nginx部分-基本...