Redis 缓存使用、与Memcached的差异

一、缓存的使用

   同集成spring进行存取操作一致,只是加入key的失效时间而已。

 

   1.创建一个cachedManager  封装存取方法

Java代码 <EMBED type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer height=15 width=14 src=http://tablemiao.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf allowscriptaccess="always" quality="high" flashvars="clipboard=%40Repository%0Apublic%20class%20CachedManager%20extends%20BaseDao%7B%0A%09%0A%09public%20boolean%20setCached(String%20key%2CObject%20value%2CLong%20expire)%7B%0A%09%09try%7B%0A%09%09%09super.redisTemplate.opsForValue().set(key%2C%20value%2C%20expire%2C%20TimeUnit.MINUTES)%3B%0A%09%09%09return%20true%3B%0A%09%09%7Dcatch(Exception%20e)%7B%0A%09%09%09logger.info(%22%E6%B7%BB%E5%8A%A0%E7%BC%93%E5%AD%98%E5%A4%B1%E8%B4%A5%EF%BC%9A%7B%7D%22%2Ce.getMessage())%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%0A%09%0A%09public%20Object%20getCached(String%20key)%7B%0A%09%09try%7B%0A%09%09%09return%20super.redisTemplate.opsForValue().get(key)%3B%0A%09%09%7Dcatch(Exception%20e)%7B%0A%09%09%09logger.info(%22%E8%8E%B7%E5%8F%96%E7%BC%93%E5%AD%98%E5%A4%B1%E8%B4%A5%EF%BC%9A%7B%7D%22%2Ce.getMessage())%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%0A" wmode="transparent"> 收藏代码

  1. @Repository  

  2. public class CachedManager extends BaseDao{  

  3.       

  4.     public boolean setCached(String key,Object value,Long expire){  

  5.         try{  

  6.             super.redisTemplate.opsForValue().set(key, value, expire, TimeUnit.MINUTES);  

  7.             return true;  

  8.         }catch(Exception e){  

  9.             logger.info("添加缓存失败:{}",e.getMessage());  

  10.             return false;  

  11.         }  

  12.     }  

  13.       

  14.     public Object getCached(String key){  

  15.         try{  

  16.             return super.redisTemplate.opsForValue().get(key);  

  17.         }catch(Exception e){  

  18.             logger.info("获取缓存失败:{}",e.getMessage());  

  19.             return false;  

  20.         }  

  21.     }  

添加缓存的时候多了两个参数一个是缓存时间,一个是单位(纳秒到天可选,源码可看)


2.测试  缓存一分钟的一个key

Java代码 <EMBED type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer height=15 width=14 src=http://tablemiao.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf allowscriptaccess="always" quality="high" flashvars="clipboard=cached.setCached(%22cached_test%22%2C%20%22%E4%BD%A0%E5%A5%BD----%22%2C%20Long.valueOf(1))%3B%0A%09%09for%20(int%20i%20%3D%200%3B%20i%20%3C%2015%3B%20i%2B%2B)%7B%0A%09%09%09logger.info(%22%E8%8E%B7%E5%8F%96%E7%BC%93%E5%AD%98%E6%95%B0%E6%8D%AE%3A%7B%7D%2C%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4%3A%7B%7D%22%2C%20cached.getCached(%22cached_test%22)%2C%0A%09%09%09%09%09new%20SimpleDateFormat(%22yyyy-MM-dd%20HH%3Amm%3Ass%22)%0A%09%09%09%09%09%09%09.format(new%20Date()))%3B%0A%09%09%09Thread.currentThread().sleep(5000)%3B%0A%09%09%7D%0A" wmode="transparent"> 收藏代码

  1. cached.setCached("cached_test""你好----", Long.valueOf(1));  

  2.         for (int i = 0; i < 15; i++){  

  3.             logger.info("获取缓存数据:{},当前时间:{}", cached.getCached("cached_test"),  

  4.                     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")  

  5.                             .format(new Date()));  

  6.             Thread.currentThread().sleep(5000);  

  7.         }  

Redis 缓存使用、与Memcached的差异_第1张图片

 

结果可见,一分钟之后失效。详见cc-redis-tow  package:cachedtest

 

二、与Memcached比较

1.基本参数

   memcached  默认端口11211  缓存默认失效时间 30天(有种说法是永久、但在30天后可存不可取)  一个key中存储的value值最大为1M,超过1M可拆分成多个key进行操作

   Redis 默认端口6379   缓存默认失效时间不过期(如果取消了默认的持久化方式、数据不被持久化到磁盘上,当内存超出后,redis会使用lru机制把最近最少用的key清除,且写入新数据)  一个key中存储的value值最大为 1g的字节数据

 

2.存储类型

   memcached 类似于一个巨大的hashTable 

   redis 存储类型多样、底层保存字节数组

 

3.数据持久化

   memcached 存数据于内存,超出之后,清除失效keylru机制清除最近最少用的key

   redis 存数据于内存  可持久化到磁盘,重启之后可继续加载使用

Redis 缓存使用、与Memcached的差异_第2张图片
获取【下载地址】 

你可能感兴趣的:(redis)