spring redis cache使用思考

项目中使用spring redis cache做为cache客户端。

spring redis cache中RedisCache是整个spring cache的领域模型,对应一个cache块的操作类。

RedisCache中定义了put,get,clean,evict操作。

其中clean方法用于清除当前cache块中所有的元素,这里会加锁,而锁的实现是往redis服务器上存放一个key为:cache块名称加上~lock的元素。最后清除锁则是在clean方法执行完成后在finally中清除。

put与get方法运行时会查看是否存在lock锁,存在则会sleep 300毫秒。这个过程会一直继续,直到redis服务器上不存在锁时才会进行相应的get与put操作。

这里存在一个问题,如果clean方法运行时间很长,这时当前运行clean操作的机子挂了,就导致lock元素一直存在于redis服务器上。

之后就算这个机子重新启动后,也无法正常使用cache。原因是:get与put方法在运行时,锁lock始终存在于redis服务器上。

项目运行中,遇到了这种情况。

总结:

在开发过程中,如果使用到开源框架中的某个方法,一定要深入了解其实现方式,运用场景。最坏的情况是什么。

时间: 2024-12-28 21:22:06

spring redis cache使用思考的相关文章

eclipse spring redis 整合-配置

花了一天时间折腾redis的配置 用到的jar spring 3.1.1 aopalliance-1.0.jar commons-pool2-2.3.jar jedis-2.7.2.jar spring-data-redis-1.6.6.RELEASE.jar jedis和commons-pool2有版本依赖关系,所以要保证和上面一致 spring-data-redis版本 和 spring框架的版本也有依赖关系 所以要保证和上面一致 applicationContext-redis.xml <

史上最全的Spring Boot Cache使用与整合

一:Spring缓存抽象# Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术:并支持使用JCache(JSR-107)注解简化我们开发: Cache接口为缓存的组件规范定义,包含缓存的各种操作集合: Cache接口下Spring提供了各种xxxCache的实现:如RedisCache,EhCacheCache ,ConcurrentMapCache等:

Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark

<Windows Azure Platform 系列文章目录> 熟悉Redis环境的读者都知道,我们可以在Linux环境里,使用Redis Benchmark,测试Redis的性能. http://redis.io/topics/benchmarks 今天正好遇到一个情况,客户的开发不是很熟悉Linux环境.笔者从其他同事那里拿到了Redis Benchmark for windows工具,在这里简单分享一下. 下载地址是:http://files.cnblogs.com/files/thre

Spring使用Cache、整合Ehcache

从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回.所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果. 使用Spring Cache需要我们做两方面的事: n  声明

深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码

之前在介绍Spring Redis进行存储的时候,都是通过RedisTemplate中的defaultSerializer,即JdkSerializationRedisSerializer.通过Jdk的序列化比较简单,但是有时候线上调试的时候通过控制台查看,完全看不出来存储了什么东西.而且在空间占用和性能上,相比Jackson,完全没有优势. 有过两次线上出问题,定位的时候知道缓存有错,却不知道到底出在那个缓存的字段上,调试非常不方便.于是序列化统统换成了Jackson. 代码如下: impor

spring redis入门

小二,上菜!!! 1. 虚拟机上安装redis服务 下载tar包,wget http://download.redis.io/releases/redis-2.8.19.tar.gz. 解压缩,tar -zxvf redis-2.8.19.tar.gz 进到文件夹,cd redis-2.8.19/,编译一下,make 创建空文件夹用于存放redis程序,mkdir /usr/local/redis 把编译后的产物依次复制到redis文件夹下 1) 编译后src文件夹下 红色部分文件都分别复制过去

Azure Redis Cache

将于 2014 年 9 月 1 日停止Azure Shared Cache服务,因此你需要在该日期前迁移到 Azure Redis Cache.Azure Redis Cache包含以下两个层级的产品. 基本版 – 单节点,多规格. 标准版 – 主/从双节点,多规格.标准层产品将具有 99.9% 的 SLA. 具体文档参看 http://azure.microsoft.com/zh-cn/documentation/articles/cache-dotnet-how-to-use-azure-r

分布式缓存技术redis学习系列----深入理解Spring Redis的使用

关于spring redis框架的使用,网上的例子很多很多.但是在自己最近一段时间的使用中,发现这些教程都是入门教程,包括很多的使用方法,与spring redis丰富的api大相径庭,真是浪费了这么优秀的一个框架.Spring-data-redis为spring-data模块中对redis的支持部分,简称为"SDR",提供了基于jedis客户端API的高度封装以及与spring容器的整合,事实上jedis客户端已经足够简单和轻量级,而spring-data-redis反而具有&quo

Azure Redis Cache (1) 入门

<Windows Azure Platform 系列文章目录> Microsoft Azure Redis Cache基于流行的开源Redis Cache. 1.功能 Redis 是一种高级的键值存储,其中,键可以包含数据结构,例如字符串.哈希.列表.集合和有序集合.Redis 支持针对这些数据类型的一组原子操作. Redis 还支持设置简单的主-从复制,具有非常快的非首先阻止同步.网络分割时自动重新连接等. 其他功能包括事务.发布/订阅.Lua 脚本.具有有限生存时间的键和配置设置,使 Re