博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 极速集成注解 redis 实践
阅读量:5908 次
发布时间:2019-06-19

本文共 4432 字,大约阅读时间需要 14 分钟。

   Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高。

   官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Redis。

   Spring 团队对 Jedis 进行了封装,独立为 spring-data-redis  项目,配合 spring 特性并集成 Jedis 的一些命令和方法。

   本文重点描述集成过程,能让你迅速的通过 spring-data-redis 将 redis 集成到 spring 项目中,毕竟大家都忙的。

1. 添加项目依赖

org.springframework.data
spring-data-redis
1.8.4.RELEASE
redis.clients
jedis
2.9.0

2. 添加 spring-redis-context 配置

redis 相关类 Spring 托管

  JedisConnectionFactory 为 Jedis 连接工厂,配置由单独抽象的 JedisPoolConfig 提供。

   如果你熟悉 Spring 的 JdbcTemplate 对象的话,这里大概能猜出来 RedisTemplate 的作用,RedisTemplate 对 RedisConnection 进行了封装。

   提供连接管理,序列化等功能,它对 Redis 的交互进行了更高层次的抽象,极大的方便和简化了 Redis 的操作。

   RedisCacheManager 做为 redis 统一的调度和管理者,有兴趣可以反编译源码看看。

   继承自 org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager 并实现 org.springframework.cache.CacheManager。

3. 添加 redis.properties

#============================##==== Redis settings ====##============================##redis 服务器 IPredis.host=127.0.0.1#redis 服务器端口redis.port=6379#redis 密码redis.pass=redis#2017#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上redis.dbIndex=0#redis 缓存数据过期时间单位秒redis.expiration=3000#控制一个 pool 最多有多少个状态为 idle 的jedis实例redis.maxIdle=300#控制一个 pool 可分配多少个jedis实例redis.maxActive=600#当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;redis.maxWait=1000#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;redis.testOnBorrow=true

   当然配置文件你也可以硬编码到程序中,只是在参数发生改变的时候比较痛苦一点而已。

   其中大部分配置项都是围绕着 jedisPool ,如果你对数据库连接池比较熟,你会发现它俩的配置项有点相似。

   当系统 redis 遇到问题出现故障时,理解这里的选项是个不错的选择,。

4. 编写自定义 redis 配置类

@Configuration@EnableCachingpublic class RedisCacheConfig extends CachingConfigurerSupport {    protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);    private volatile JedisConnectionFactory mJedisConnectionFactory;    private volatile RedisTemplate
mRedisTemplate; private volatile RedisCacheManager mRedisCacheManager; public RedisCacheConfig() { super(); } public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate
mRedisTemplate, RedisCacheManager mRedisCacheManager) { super(); this.mJedisConnectionFactory = mJedisConnectionFactory; this.mRedisTemplate = mRedisTemplate; this.mRedisCacheManager = mRedisCacheManager; } public JedisConnectionFactory redisConnectionFactory() { return mJedisConnectionFactory; } public RedisTemplate
redisTemplate(RedisConnectionFactory cf) { return mRedisTemplate; } public CacheManager cacheManager(RedisTemplate
redisTemplate) { return mRedisCacheManager; } @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object o, Method method, Object... objects) { StringBuilder sb = new StringBuilder(); sb.append(o.getClass().getName()); sb.append(method.getName()); for (Object obj : objects) { sb.append(obj.toString()); } return sb.toString(); } }; }}

   该配置类继承自 org.springframework.cache.annotation.CachingConfigurerSupport 并实现 org.springframework.cache.annotation.CachingConfigurer 的方法。

   通俗一点,该类告诉 spring 当前使用的缓存服务为 redis 并自定义了缓存 key 生成的规则。

5. 在你喜欢的地方进行注解缓存

   缓存一般使用在服务层,在你想缓存的方法上面添加相应的注解即可,下面三个缓存的注解你得掌握。

   @Cacheable  spring 会在其被调用后将返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。

   @CachePut  标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

   @CacheEvict 用来标注在需要清除缓存元素的方法或类上的。

   当然这些注解里面还有很多其他的属性配置,配合 spring-el 表达式能做的事情还有很多,大概只有你想不到,没有做不到。

   在业务规则比较复杂的情况下,缓存 key 的设计相当重要,设计出色可以使你的应用飞起来。

   整个集成工作就结束了,是不是很简单,上述算是 redis 的冰山一角,还有很多像 redis 路由/分布式/集群....,有机会实践慢慢体会。

 

转载地址:http://vzvpx.baihongyu.com/

你可能感兴趣的文章
杭哥试用过的精品软件推荐:毛笔字生成软件(ougishi) 4.00 书法 唐宋八大家
查看>>
两台Linux主机,通过GRE隧道并且PAT访问对方网络
查看>>
某度质量部测试开发面试题5(未完待续)
查看>>
添加 Windows 7 摄像头 并将其添加到 我的电脑 资源管理器中
查看>>
SQL Server 2016 RC0 发布
查看>>
链接自动化测试工具xenu
查看>>
令人疑惑的defaultValueAttribute
查看>>
AWR Wait Class
查看>>
一帆风顺中的煎熬,《腾讯传》读后感
查看>>
Java字符串"学java"占多少内存空间
查看>>
三星i917官方wp7.8刷机、越狱、防锁全过程
查看>>
区块链初始化与实现POW工作量证明
查看>>
vsftp安装与下载
查看>>
win10系统80端口被占用怎么办
查看>>
Puppet 实验十一 ubunto 安装 puppet-dashboard 仪表盘
查看>>
对《微营销》与《大数据营销》的读后思考
查看>>
Windows 2008 – Error 2147943712 during task creation
查看>>
hadoop(2.5,2.6) HDFS偶发性心跳异常以及大量DataXceiver线程被Blocked故障处理分享
查看>>
闲睱小记 ——于世
查看>>
Zabbix应用之Server/Agent部署
查看>>