一、缓存的使用
同集成spring进行存取操作一致,只是加入key的失效时间而已。
1.创建一个cachedManager 封装存取方法
- @Repository
- public class CachedManager extends BaseDao{
-
- public boolean setCached(String key,Object value,Long expire){
- try{
- super.redisTemplate.opsForValue().set(key, value, expire, TimeUnit.MINUTES);
- return true;
- }catch(Exception e){
- logger.info("添加缓存失败:{}",e.getMessage());
- return false;
- }
- }
-
- public Object getCached(String key){
- try{
- return super.redisTemplate.opsForValue().get(key);
- }catch(Exception e){
- logger.info("获取缓存失败:{}",e.getMessage());
- return false;
- }
- }
添加缓存的时候多了两个参数一个是缓存时间,一个是单位(纳秒到天可选,源码可看)
2.测试 缓存一分钟的一个key
- cached.setCached("cached_test", "你好----", Long.valueOf(1));
- for (int i = 0; i < 15; i++){
- logger.info("获取缓存数据:{},当前时间:{}", cached.getCached("cached_test"),
- new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
- .format(new Date()));
- Thread.currentThread().sleep(5000);
- }
结果可见,一分钟之后失效。详见cc-redis-tow package:cached和test类
二、与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 存数据于内存,超出之后,清除失效key、lru机制清除最近最少用的key
redis 存数据于内存 可持久化到磁盘,重启之后可继续加载使用