Ehcache(07)——Ehcache对并发的支持

Ehcache对并发的支持

 

       在高并发的情况下,使用Ehcache缓存时,由于并发的读与写,我们读的数据有可能是错误的,我们写的数据也有可能意外的被覆盖。所幸的是Ehcache为我们提供了针对于缓存元素KeyRead(读)、Write(写)锁。当一个线程获取了某一KeyRead锁之后,其它线程获取针对于同一个KeyRead锁不会受到限制,但其它线程(包括获取了该KeyRead锁的线程)如果想获取针对同一个KeyWrite锁就不行,它需要等到针对于该KeyRead锁释放后才能获取其Write锁;当一个线程获取了某一KeyWrite锁之后,其它线程获取同一个KeyRead锁或者Write锁的请求将等待针对于该KeyWrite锁释放后才能继续进行,但是同一个线程获取该Key对应的Read锁或者Write锁将不需要等待。获取了对应的锁之后,记得在不再需要该锁后释放该锁。并且需要注意不要引起死锁。

       在Ehcache接口中为我们定义了几个与Read、Write锁相关的方法,具体方法如下所示:
public interface Ehcache {
 
    /**
     * 获取给定Key的Read锁
     * @param key
     */
    public void acquireReadLockOnKey(Object key);
 
    /**
     * 获取给定Key的Write锁
     * @param key
     */
    public void acquireWriteLockOnKey(Object key);
 
    /**
     * 尝试着获取给定Key的Read锁,如果在给定timeout时间内还没有获取到对应的Read锁,则返回false,否则返回true。
     * @param key
     * @param timeout 超时时间,单位是毫秒
     * @return表示是否获取到了对应的Read锁
     * @throws InterruptedException
     */
    public boolean tryReadLockOnKey(Object key, long timeout) throws InterruptedException;
 
    /**
     * 尝试着获取给定Key的Write锁,如果在给定timeout时间内还没有获取到对应的Write锁,则返回false,否则返回true。
     * @param key
     * @param timeout 超时时间,单位是毫秒
     * @return表示是否获取到了对应的Write锁
     * @throws InterruptedException
     */
    public boolean tryWriteLockOnKey(Object key, long timeout) throws InterruptedException;
 
    /**
     * 释放所持有的给定Key的Read锁
     * @param key
     */
    public void releaseReadLockOnKey(Object key);
 
    /**
     * 释放所持有的给定Key的Write锁
     * @param key
     */
    public void releaseWriteLockOnKey(Object key);
  
}

 

 

       我们常用的Cache类已经为我们实现了这些方法,我们可以直接在程序中进行使用。以下是直接在程序中使用锁的一个简单示例。

 

   @Test
   public void test() {
      CacheManager cacheManager = CacheManager.create();
      cacheManager.addCache("test");
      Cache cache = cacheManager.getCache("test");
      final String key = "abc";
      cache.acquireWriteLockOnKey(key);
      try {
         cache.put(new Element(key, "123"));
      } finally {
         System.out.println(cache.get(key));
         cache.releaseWriteLockOnKey(key);
      }
   }

 

 

       记得需要在合适的时候释放所获取的锁。

 

 

(注:本文是基于ehcache2.8.1所写)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尊天缓存是高并发高性能的缓存系统 内存数据库 专门应对高并发高吞吐的服务器环境 尊天缓存主要使用在的高并发的服务器节点上 比如嵌入web服务器中 缓存常用数据 能够极大缓解数据库服务器的压力 显著提升web服务器性能和响应速度 另外使用场景比如集群的均衡服务器 或者企业内网 或者云计算环境的一些高并发节点 还有一种就是数据库服务器的前端 尊天缓存性能上 在一般配置的双核cpu上即可支持四百万次 秒的操作;性能几乎与cpu核心数量呈正比 这是其他系统所无法企及的 尊天缓存功能上 支持键 值对的增 删 改 查全部操作 尊天缓存与memcache radis的比较:尊天缓存独有的高并发技术 天生适应高并发高吞吐的服务器环境 性能提升10倍以上 尊天缓存应对大数据量的方法就是使用64位版本 突破32位版本2G的内存限制 总之 并发需求越高 访问量越大 线程数量越多 服务器的cpu核心越多 尊天缓存能发挥的作用就越大 尊天缓存是高并发高性能的缓存系统 帮您的服务器真正的飞起来 下面是性能测试数据: os:windows server 2008 x64 cpu:AMD Athlon tm 2 core 3 5G 3 5G mem:4G 64线程 数据 次 秒 add : 2566787 read : 4764566 update: 1947282 del : 2888623">尊天缓存是高并发高性能的缓存系统 内存数据库 专门应对高并发高吞吐的服务器环境 尊天缓存主要使用在的高并发的服务器节点上 比如嵌入web服务器中 缓存常用数据 能够极大缓解数据库服务器的压力 显著提升web服务器性能 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值